性能问答>请教大佬,线程运行过程中退出,怎么查问题?>
4回复
7月前

请教大佬,线程运行过程中退出,怎么查问题?



刚开始执行的时候线程一直在工作的,并发访问大约8分钟后,线程退出了,后台没有任何日志,检查jstack中发现线程确实不在了,目前已经做过的尝试有:
1,查看当时的CPU和内存状态,CPU比较高,8核的CPU占用500%多,内存充足,16G只有了大约4G;
2,查看 /var/log/messages 日志没有任何相关的信息。
想查出退出的具体原因,请问该如何查询?
去除业务的线程代码如下:

public void run() {
	while (true) {
		try {
			if (jedis.exists(appName)) {
				Map<String, String> requests = jedis.hgetAll(appName);
				for (Map.Entry<String, String> entry : requests.entrySet()) {
					service.execute(new HandleThread());
				}
				Thread.sleep(1);
			} else {
				logger.debug("redis 数据为空");
				Thread.sleep(200);
			}
		} catch (Exception e) {
			logger.error("扫描文件夹出错", e);
		}
	}
}

望大佬们给点意见。

911 阅读
请先登录,再评论

catch (Exception e) 中的Exception 改成 Throwable,再次运行看到了Java heap space,并发的时候数据量太大了,然后将jedis.hgetAll(appName)改成jedis.hscan过滤一下条件,限制每次读取大小,问题解决了。

27月前
回复 张:

点个采纳,把问题标记为解决状态,兄弟

7月前回复

已经定位到问题所在了😊

27月前
回复 张:

可以把原因也贴出来给大家参考下哦~

7月前回复