我正在编写类似“守护进程”的软件,它使用多线程来执行循环中的某些操作(登录到某个地方,执行某些操作并注销)。
我的应用程序运行大约1000-2000个线程,这些线程可以完成任务。
这是我的HTOP日志,在开始的10分钟内:
因此您可以在上面的屏幕截图中看到一些线程正在运行(按绿色R状态排序)
但过了一段时间之后:
如您所见,只有三个线程周期性地运行(看起来系统会减慢线程速度或使其休眠)。
应用程序为小时间作业(大约10秒到1分钟)运行线程,在线程结束后,固定线程池执行器创建新线程来执行相同的作业。
因此,据我所知,线程的执行速度应该始终相等。但大约10-20分钟后它会减速。在htop中,正常运行的线程每次最多可达~500-200-300-100个线程,最多可达~3-30-60个线程。但在这10-20分钟之后,只有线程在执行。那么你能告诉我发生了什么以及如何解决吗?
最佳答案
线程正在访问mysql吗?我看到它以100%的速度运行…如果线程正在等待I/O,内核会让它休眠,直到数据准备就绪。如果它在磁盘上等待,您可能会看到负载平均值中反映的情况,因此它可能在等待网络数据(您的套接字等是否正确关闭)?你在远程连接的服务器上被阻止了吗?你的远程服务挂了吗?)或者mysql数据(你的连接池太小了吗?mysql不能处理负载吗?)是的。