我在不同的20台服务器上运行JBoss上运行的企业应用程序。我已经看到一个问题,在24小时的正常运行时间之后,我必须重新启动JBoss,因为系统负载非常高并且正在影响客户用户体验。
我尝试使用VisialVM,JAVA任务控制对此进行故障排除,以找出线程中究竟是什么导致系统负载如此高(大约20到50),如果保持UP超过24小时。
我现在想把注意力转移到内存泄漏上。所有节点都有6个CPU和16GB RAM。
[user@server 2015_12_27_05_07_32_32631]$ top -M
top - 15:55:49 up 19 days, 13:33, 3 users, load average: 11.19, 9.83, 8.92
Tasks: 280 total, 1 running, 279 sleeping, 0 stopped, 0 zombie
Cpu(s): 91.6%us, 3.4%sy, 0.0%ni, 4.5%id, 0.1%wa, 0.1%hi, 0.3%si, 0.0%st
Mem: 15.577G total, 15.275G used, 309.852M free, 53.969M buffers
Swap: 4095.992M total, 200.824M used, 3895.168M free, 6373.957M cached
如果我在所有节点上执行top -M,我确实看到交换空间正在使用,但是在分配的4GB中就像100~200 MB一样。我可以把它作为内存泄漏的标志吗?
如果应用程序保持UP状态而不重新启动它,我可以使用哪些工具来确定CPU使用率如此之高。
当节点遇到高CPU /负载时,这是VisualVM输出。
以下显示了被阻止的主题: