Linux:16GB RAM,2CPU
在运行 tomcat 的 Linux 机器上,我使用 jvisualVM 获得了大约 800 个线程,但在运行队列长度中,我只得到了 50 个,因为 CPU 为 100%,并且没有显示阻塞线程。我通过 NMON 获得了这些值。
所以我有以下问题:
- 根据我的理解,每个 java 线程都会创建一个内核线程,如果是这样,为什么我没有获得运行队列长度 800,也没有阻塞线程。
2.所以这意味着只有 50 个线程在等待运行,其余线程处于运行状态,是否有可能同时有 750 个线程在运行?
帮我解决这个困惑,我在谷歌上搜索了所有地方,也没有找到任何线索。非常感谢参考文献
答案1
使用这些设置,假设您使用 BIO 连接器(每个连接 1 个线程)并且平均响应时间为 50 毫秒(因此每个线程每秒可以提供 20 个回复),您应该能够处理:
(每秒 20 条回复 * 800 个线程)+ 200(接受数)+ 每秒 net.ipv4.tcp_max_syn_backlog(TCP 堆栈)连接数。
但是对于您的评论,您对硬件大小感兴趣。此时,如果您有可能进行其他测试,因为您的 CPU 已 100% 利用,请尝试使用一半的负载重新测试。重复增加/减少负载,直到达到 100% CPU,平均负载 = 核心数。现在您有了实际硬件可以处理的最大负载。了解这一点和预期负载后,您现在就可以知道需要多少 CPU。
希望这可以帮助。