linux中无jstack、java程序cpu占用过高

第一种是没有找到linux服务器jdk的具体位置

实际上java是个软连接,在继续跟进

这个实际才是jdk的实际目录,在目录中可以找到jstack 

第二种是安装的jdk 没有jstack 

首先查看 yum源 yum whatprovides '*/jmap'查看可安装版本 或者自己直接安装一个新的jdk版本,我选择的是 yum install java-1.8.0-openjdk-devel-debug-1.8.0.171-8.b10.el6_9.x86_64

进入目录/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.171-8.b10.el6_9.x86_64-debug/bin可以查看到jstack

重点操作:top -H -p 19607(换成你的pid)查看哪个线程占用cpu不正常

查询pid(将紫色部分替换): /root/jdk1.8.0_172/bin/jps -l| awk '{print $2,$1}'|grep -i '^collector-2.0-fat.jar'|awk '{print $2}'

pid19608的线程占用cpu过大 printf "%x\n" 19608(线程pid) 将线程转成16进制,用jstack pid查看线程

./jstack 19607查看具体问题

linux中无jstack、java程序cpu占用过高_第1张图片

找到记录 能定位你的代码

如果queue为空,长时间运行就会出问题了 continue换成break 修改后代码

你可能感兴趣的:(jdk)