Java JVM错误排查的基本步骤

收集tomcat JVM使用情况

  • top 命令查看【进程】资源占用情况,找到CPU占用最高的【进程】
  • top -H -p6902, 找出【进程】中耗CPU最高的【线程】
  • jstack 6902 > jstack.txt, 导出CPU消耗排前的线程堆栈使用情况

  • cat jstack.txt | grep -C 20 0x1af8, 0x1af8是十进制转化为十六进制的线程号, 转十六进制命令:printf "%x\n" 21742
  • 过滤日志文件, 找出 jstack.txt 使用靠前的线程是否是GC任务
  • jstat -gcutil 6902 2000 10, 6902是【进程】,查看进程是否频繁GC
  • jmap -histo 6902 | head -13, 6902是Java进程的PID, 查看Java的内存占用信息, 内存是否泄漏

收集tomcat连接数

https://blog.csdn.net/wangjia55/article/details/80826162

netstat -antp | grep 8080 | grep ESTABLISHED -c , 8080是tomcat暴露的端口号

收集mongoDB连接数

netstat -antp | grep 27017 | grep ESTABLISHED -c , 27017是mongoDB暴露的端口号