Java线程在linux中陷入困境

时间:2012-01-06 00:55:33

标签: java linux multithreading threadpool

我正在编写类似“守护程序”的软件,它使用多线程在循环中执行某些操作(登录到某处,执行某些操作并注销)。 我的应用程序运行大约1000-2000个线程,这个线程做的工作。 所以这是我最初的约10分钟的htop日志: Before

因此,您可以在上面的屏幕截图中看到正在运行一些线程(按绿色R状态排序)

但过了一段时间后会发生这种情况: After

正如您所看到的,只有三到三个线程定期运行(看起来系统会降低线程速度或使其休眠)。 应用程序运行线程用于小时间作业(大约10秒到1分钟)和线程死后固定线程池执行器创建新线程来执行相同的工作。 据我所知,它应该始终是相同的线程执行速度。但它在约10-20分钟后减速。通常在htop中运行螺纹,最多可达~500-200-300-100个螺纹,每次最多可运行~3-30-60个螺纹。但是在这10-20分钟之后,只有线程正在执行。那么你能告诉我发生了什么以及如何解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

线程是否正在访问mysql?我看到它以100%运行...如果一个线程正在等待I / O,内核将让它休眠直到数据准备就绪。如果它在磁盘上等待你可能会看到反映在负载平均值上,那么它可能正在等待网络数据(你的套接字等正确关闭吗?你是否被阻止从你远程连接的任何服务器?是你的远程服务挂起?)或mysql数据(你的连接池太小了吗?mysql是否无法处理负载?)。