java进程占用cpu、内存较高分析方式

  • linux下使用 “top” 或者 “ps -mp 26178 -o THREAD,tid,time | sort -rn | more” 指令查看占用较高内存的java进程id;
  • 使用 “top -H -p [pid]” 获取某个进程下所有线程占用cpu资源的线程id(tid);
  • 将tid转换成16进制数;
  • 通过jstack查看对应线程的运行信息 “jstack [pid] |grep [tid的16进制数] -A 30”, 如果发现线程时VM Thread基本就是与GC有关的线程了;
  • jstat -gcutil [pid] 1000 100查看线程GC情况
    GC信息
  • 也可通过arthas工具查看实时占用cpu的情况,命令为“dashboard -i 1000 >> /root/cpu.txt”
    Thread-cpu

    如果发现此种情况,可能的原因是需要修改CodeCache的值来解决代码实时编译过程中,codecache占满导致占用cpu较大资源导致服务变慢的情况。-XX:ReservedCodeCacheSize=480M (默认值为240M)
  • 可以通过 ”jinfo -flag ReservedCodeCacheSize“ 指令来查看当前codeCache的值
  • 使用jmap可以查看对应内存使用情况 “jmap -histo:live [pid] | head -n 100”;
  • jmap -heap [pid]查看堆内存情况

注意: 执行命令查看对应进程信息时,一定记得切换到进程所属的用户,否则会有异常情况。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容