使用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)即可 

猜你喜欢

转载自wangqiaowqo.iteye.com/blog/2334037