使用top命令找出占用cpu最高的JAVA进程

(1) 使用top命令找出占用cpu最高的JAVA进程

top -c

PID USER    PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND         

6965 root      20   0    57.3g  27g 1.0g S 303.5 58.4   3243:41 /usr/local/...

23853 root    20   0   1614m 1.1g  15m S  4.6  2.4    4363:17 java...  

22384 guest 15   0 12740 1164  820 R  0.3  0.0    0:00.08  top -c 

2 root      RT  -5     0    0    0 S  0.0  0.0    0:21.97  [migration/0]  
PID:6965

(2) 找出占用cpu最高的线程 

top -Hp 6965 -d 1 -n 1

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND

16392 root      16   0 57.4g  27g 1.0g R 55.3 58.4   0:30.98 java

8757 root      25   0 57.4g  27g 1.0g R 53.6 58.4 103:54.27 java  

top命令参数说明:

-p PID 仅监视指定进程的ID,PID是一个数值;

-c 显示命令行,而不仅仅是命令名

-h 当系统由多个CPU时,个别CPU的状态信息被隐藏,只显示平均状态值

-d N  显示两次刷新时间的间隔,比如 -d 5,表示两次刷新间隔为5秒;


(3) 打印占CPU最高JAVA进程6965的堆栈信息 

jstack 6965 > /root/mss/dump.txt


(4) 占CPU最高线程16392换算成16进制到文档中寻找对应线程4008

用命令

printf "%x\n" 16392 

可查到对应的16进制线程id:4008

"Reference Handler" daemon prio=10 tid=0x27ed0400 nid=0x1f1c in Object.wait() [0

x281ff000]

   java.lang.Thread.State: WAITING (on object monitor)

        at java.lang.Object.wait(Native Method)

        at java.lang.Object.wait(Object.java:503)

        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)

        - locked <0x0e6a5188> (a java.lang.ref.Reference$Lock)


参考文章:
http://lxiaodao.iteye.com/blog/1413774 

来自 <http://blog.csdn.net/hfhwfw/article/details/37930013>

----------------------------------------------------------------------

top -Hp 22751 -d 1 -n 1
top - 10:03:35 up 153 days, 13:55, 1 user, load average: 3.05, 2.95, 2.86
Tasks: 336 total, 3 running, 333 sleeping, 0 stopped, 0 zombie
Cpu(s): 12.5%us, 5.3%sy, 0.1%ni, 81.9%id, 0.1%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 132044872k total, 127819736k used, 4225136k free, 142604k buffers
Swap: 0k total, 0k used, 0k free, 109023720k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
23274 work 20 0 29.6g 2.4g 9904 R 92.9 1.9 6547:42 java
23203 work 20 0 29.6g 2.4g 9904 R 91.0 1.9 6552:36 java
23130 work 20 0 29.6g 2.4g 9904 R 89.0 1.9 6541:45 java
22978 work 20 0 29.6g 2.4g 9904 S 2.0 1.9 7:02.52 java
22982 work 20 0 29.6g 2.4g 9904 S 2.0 1.9 6:48.97 java
23275 work 20 0 29.6g 2.4g 9904 S 2.0 1.9 8:35.93 java
22751 work 20 0 29.6g 2.4g 9904 S 0.0 1.9 0:00.00 java
22752 work 20 0 29.6g 2.4g 9904 S 0.0 1.9 0:01.87 java
22753 work 20 0 29.6g 2.4g 9904 S 0.0 1.9 0:03.21 java
22754 work 20 0 29.6g 2.4g 9904 S 0.0 1.9 0:03.23 java
22755 work 20 0 29.6g 2.4g 9904 S 0.0 1.9 0:03.24 java
22756 work 20 0 29.6g 2.4g 9904 S 0.0 1.9 0:03.23 java
22757 work 20 0 29.6g 2.4g 9904 S 0.0 1.9 0:03.24 java
22758 work 20 0 29.6g 2.4g 9904 S 0.0 1.9 0:03.23 java
22759 work 20 0 29.6g 2.4g 9904 S 0.0 1.9 0:03.21 java
22760 work 20 0 29.6g 2.4g 9904 S 0.0 1.9 0:03.23 java
22761 work 20 0 29.6g 2.4g 9904 S 0.0 1.9 0:00.00 java
22762 work 20 0 29.6g 2.4g 9904 S 0.0 1.9 0:00.00 java
22763 work 20 0 29.6g 2.4g 9904 S 0.0 1.9 0:00.00 java

printf "%x\n" 23274
5aea
printf "%x\n" 23203
5aa3
printf "%x\n" 23130
5a5a


jstack -l 22751 > jstack22751.txt


"pool-3-thread-3" #315 prio=5 os_prio=0 tid=0x00007f777368f000 nid=0x5aea runnable [0x00007f7451e96000]
java.lang.Thread.State: RUNNABLE
at com.baidu.rigel.nbcps.handler.ElasticSearchTask.run(ElasticSearchTask.java:75)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Locked ownable synchronizers:
- <0x000000068013e060> (a java.util.concurrent.ThreadPoolExecutor$Worker)


"pool-3-thread-2" #245 prio=5 os_prio=0 tid=0x00007f7772bba800 nid=0x5aa3 runnable [0x00007f7453ffe000]
java.lang.Thread.State: RUNNABLE
at com.baidu.rigel.nbcps.handler.ElasticSearchTask.run(ElasticSearchTask.java:75)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Locked ownable synchronizers:
- <0x0000000680762fd0> (a java.util.concurrent.ThreadPoolExecutor$Worker)


"pool-3-thread-1" #175 prio=5 os_prio=0 tid=0x00007f77720e0800 nid=0x5a5a runnable [0x00007f76f9422000]
java.lang.Thread.State: RUNNABLE
at com.baidu.rigel.nbcps.handler.ElasticSearchTask.run(ElasticSearchTask.java:75)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Locked ownable synchronizers:
- <0x0000000680209828> (a java.util.concurrent.ThreadPoolExecutor$Worker)




在代码中发现:

public void run() {
this.timestamp = System.currentTimeMillis();
while (this.active) {
long timeNow = System.currentTimeMillis();
if (null != this.queue && this.queue.size() > 0) {
try {
// 超时50毫秒则返回null
T obj = queue.poll(TIMEOUT_MILLISECONDS, TimeUnit.MILLISECONDS);
if (null != obj) {
this.putList.add(obj);
}
} catch (Exception e) {
this.log.info(this.indexName + " Es batch thread sleep interrupted");
// 抛出中断异常先退出循环,停止批量操作
if (!this.active) {
break;
}
}
}

this.queue.size() > 0 这个条件会引起cpu过高 去掉
改为
if (null != this.queue)即可
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值