最近,我在Java应用程序服务器安装上进行了分析/调整,以识别瓶颈并修复它们。 在此过程中(调整),最常见的操作是在系统加载时检索许多线程转储。 请记住,重载(在某些情况下)可能会产生副作用,可能会导致我们得出错误的结论。 因此,“控制”负载比实际重负载更可取。
当系统处于加载状态时,您会注意到许多Java线程处于RUNNABLE状态,但它们并未真正运行。 他们正在等待“
某物 ”。
导致线程即使处于RUNNABLE状态也要等待的最常见原因如下:
- CPU资源不足 :当运行的线程多于虚拟CPU时,上下文切换,内核,OS作业和系统的其他进程会有延迟是正常的。
- RAM不足 :如果您的RAM不足,则您的系统将使用swap,这总是一个问题。
- I / O :当线程处于read()或write()调用中并等待数据写入或读取时,该线程处于RUNNABLE状态,但实际上并未运行。
- 网络慢 :这与ÿ