系统影响慢或可能无法访问,服务器上发现swap占用很高,负载和cpu通过zabbix监控看比代码升级前都要高.
因服务器核数少,仔细观察有一个cpu利用率一直是100%或90%+上。
以前这类问题也遇到过,网上也有类似解决方法,这里自己做个笔记总结下。
首先不要着急重启服务,可以先切换到备用机器上(生产环境避免单机),保留问题现场查找原因。
top查看CPU情况
1)jps -m 非常方便直接定位所有的Java进程pid
2)jstack -l pid > jstack.log命令打印栈信息,如果因某些原因无法成功打印,
可以使用kill -3 pid,输出到jvm日志中【resin服务器默认输出到jvm-default.log日志中】
3)查找占用CPU资源最高的进程id,使用top -H -p pid 查看进程pid的所有的线程,默认是按照%CPU高~低排序。
或者直接使用top查看, shift+H显示所有的线程,默认按照%CPU高~低排序。
找到占用CPU利用率最高的pid,一般CPU利用率达到90%以上,将pid转换为16进制【 linux自带python,命令:hex(pid)】
4)根据转换的16进制去jstack.log日志中查找基本能定位到具体哪行代码的问题。
"reportThirdException" daemon prio=10 tid=0x00007f8bd450b800 nid=0x12c4 runnable [0x00007f8b906ac000]
java.lang.Thread.State: RUNNABLE
at com.xxx.interfaces.util.NoticeMonitorSysHelper$ThreadStatue$1.run(NoticeMonitorSysHelper.java:167)
at java.lang.Thread.run(Thread.java:722)
posted on 2016-11-04 23:44
David1228 阅读(2283)
评论(0) 编辑 收藏 所属分类:
JAVA 、
J2EE