线上突发状况时,优先保证服务可用,但是在我们保证服务可用之前,应该尽可能的保留多的现场,以备后面的查找问题所需的数据。
1.数据库连接状况
2.服务器内存使用
free
free -m
3.服务器CPU使用状况,TOP以及线程相关
TOP
top -H -p pid 或者(TOP后shift+H 查看CPU占用的线程)
ps Hh -eo pid,tid,pcpu | sort -nk3 |tail
top可以实时的观察cpu的指标状况,尤其是每个core的指标状况,可以更有效的来帮助解决问题,
-H则有助于看是什么线程造成的CPU消耗,这对解决一些简单的耗CPU的问题会有很大帮助。
4.保留gc log,查看当前gc情况:
jstat
jstat -gcutil pid 1000 1000
5.保留业务日志
6.记录jstack,pstack
jstack
jstack -l pid
jstack -m 则可以看到线程的Java栈和native栈,但如果Java方法被编译过,
则看不到(然而大部分经常访问的Java方法其实都被编译过)。
pstack 可以用来看Java进程的native栈。
7.记录jmap
jmap
jmap -heap pid
jmap -dump:format=b,file=s.bin pid
8.jinfo查看JVM启动参数配置
jinfo -flags pid
【
/opt/jdk1.7.0_71/bin/jinfo -flags 12708
Attaching to process ID 12708, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 24.71-b01
-Xmx24G -XX:SoftRefLRUPolicyMSPerMB=1000000 -XX:+UseConcMarkSweepGC
-Dcom.sun.management.jmxremote.port=4957 -verbose:gc -XX:+PrintGCTimeStamps
-XX:+PrintGCDetails -Xloggc:/export/logs/gc.log
】