开发者社区 > 博文 > 锁定java进程内资源(内存,cpu,耗时)占用高线程方法
分享
  • 打开微信扫码分享

  • 点击前往QQ分享

  • 点击前往微博分享

  • 点击复制链接

锁定java进程内资源(内存,cpu,耗时)占用高线程方法

  • 京东黄金团队(JDGolder)
  • 2021-01-19
  • IP归属:未知
  • 43520浏览

【1】查到程序对应java进程的进程号    

    ps –ef|grep [程序关键字]|awk '{if($3==1)print$2}'

    示例:ps –ef|grep trade|awk '{if($3==1)print $2}'



【2】将进程的线程信息打印至文件中

 top -n1b -H -p [pid]> [文件名]

示例:top -n1b -H -p 235795> toplog.txt



【3】过滤提取有用信息(默认排序为CPU使用率排序,可以在第二步时变更为所需排序)

tail -n +7 [top文件名] |awk '{print$1,$9,$10,$11}' > [新生成文件名]

示例:tail -n +7 toplog.txt |awk '{print $1,$9,$10,$11}' >toplog.txt



【4】提取线程堆栈信息到堆栈文件

/usr/java/jdk1.6.0_45/bin/jstack–l [pid] > [线程堆栈文件名称]

示例:/usr/java/jdk1.6.0_45/bin/jstack -l 21180 >jstacklog.txt



【5】线程id进制转换,锁定线程

分析(3)中得到文件,将cpu消耗高的或者时间耗时长的线程id取到(3)中所得文件第一列(即进程编号PID),将其由10进制转换为16进制。

如:



【6】通过(5)中得到的十六进制的线程编号,然后在(4)中得到文件中检索16进制得到的线程id,可得到其堆栈信息,从而锁定线程,



共0条评论