线上cpu 网络 内存 jvm出现异常排查思路

1.查询对应进程 pid jps 或者ps -ef |grep java

2.查询该pid对应的内存分配是否不合适 jmap -heap pid

3.找到最消耗内存的对象 C B I S jmap -histo:live pid | more

4.查询网络连接数 netstat 或者 ll /proc/pid/task |wc -l

5.定位cpu问题 top -c 查看运行信息,找出最消耗cpu的进程

6.查询最消耗cpu进程的线程 6.1. top -Hp pid, 获取到最大cpu占用的线程id 6.2 . 将改线程id转换为16进制 printf "%0x " thread_id 6.3. 查看该线程堆栈信息 jstack pid |grep 0x{thread_id} -C5

7.监控heap和jvm垃圾回收,主要是gc的情况 jstat -gcutil pid

8.查看线上堆大小以及gc收集器 java -XX:+PrintCommadnLineFlags -version 9.查看运行情况 ps -eo pid,tty,user,comm,lstart,etime |grep pid 10.根据端口号查进程pid lsof -i:port netstat -nap|grep port 11.根据进程号查端口 netstat -nap|grep pid 12.根据进程pid查看服务路径 ps -ef|grep java 查看进程pid ll /proc/pid/cwd 查看服务安装路径 13. JAVA_OPTS="-Xms1024m -Xmx4096m -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -Xloggc:/log/tomcat_gc.log -XX:HeapDumpPath=/log/java_heapdump.hprof"

经验分享 程序员 微信小程序 职场和发展