线上系统出现问题时,需要记载系统当前运行状况,总结一下,大概需要关注以下几个方面:
1.负载:——top命令
在linux上,执行top 等命令,关注load, Memory, CPU 等系统概况,以及关注CPU和memory 占用较多的进程。
使用top -H, 并按 shift+p 对CPU进行排序,找到当前占用CPU最多的线程。(top -u bpm -H),-H 按线程显示,否则按进程显示
使用 ps -T <pid> |wc -l 找到当前运行的java 进程的线程数。
2.Thread dump——jstack
kill -3 <pid>
jstack <pid> 截获当前java 进程的线程堆栈。
3. Memory——jmap
jmap -heap <pid> 可以得到当前堆内存情况。
如果怀疑有内存问题,还可以dump 堆对象。
Java5:jmap -heap:format=b <pid>
Java6: jmap -dump:format=b,file=heap.bin <pid>
注意:这个操作对机器有很大的性能影响。在java 6中,这个也可以通过java 启动参数中加入-XX:HeapDumpPath=/home/nasdaq/oom.hrof -XX:+HeapDumpOnOutOfMemoryError 实现OOM时自动memory dump
4.GC——jstat
jstat -gcutil <pid> 得到当前应用的gc 情况。
5.网络连接情况
得到与网络各机器的连接数
netstat -na|grep ESTABLISHED|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -r
以上命令执行结果是:
连接数量 连接ip
也可以通过netstat 具体关注某个端口的连接数。
6.日志
备份当前应用日志。
7.工具: