调整java占用cpu_java 线上高占用cpu调优

1.使用 top 查看cpu占用情况

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

32423 root 20 0 2160292 125968 16692 S 13.6 15.0 0:30.92 java

1766 root 20 0 159824 2140 1552 S 1.0 0.3 1:44.98 sshd

4773 systemd+ 20 0 1354560 49724 10208 S 1.0 5.9 1:13.72 mysqld

32715 root 20 0 64076 4708 3952 R 0.7 0.6 0:00.10 top

771 root 16 -4 47844 24 0 S 0.3 0.0 0:03.66 sedispatch

910 root 20 0 9768 2716 2408 S 0.3 0.3 0:00.01 bash

1996 root 20 0 64796 1664 464 S 0.3 0.2 1:11.67 top

31165 root 20 0 0 0 0 I 0.3 0.0 0:00.04 kworker/0:2-ata_sff

1 root 20 0 180868 4384 2952 S 0.0 0.5 0:05.26 systemd

2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd

3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp

可以看到我们占用最高的pid是32423

2.然后输入 top -Hp 32423 查看 详细进程

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

3643 root 20 0 2160292 128484 16692 R 85.1 15.3 1:03.22 java

32425 root 20 0 2160292 128484 16692 S 1.0 15.3 0:02.22 java

32423 root 20 0 2160292 128484 16692 S 0.0 15.3 0:00.00 java

32424 root 20 0 2160292 128484 16692 S 0.0 15.3 0:11.50 java

32426 root 20 0 2160292 128484 16692 S 0.0 15.3 0:00.04 java

32427 root 20 0 2160292 128484 16692 S 0.0 15.3 0:00.06 java

32428 root 20 0 2160292 128484 16692 S 0.0 15.3 0:00.00 java

32429 root 20 0 2160292 128484 16692 S 0.0 15.3 0:15.96 java

32430 root 20 0 2160292 128484 16692 S 0.0 15.3 0:03.47 java

32431 root 20 0 2160292 128484 16692 S 0.0 15.3 0:00.00 java

32432 root 20 0 2160292 128484 16692 S 0.0 15.3 0:00.11 java

可以看到我们占用最高的3643

用 printf("$x\n") 3643 来查看该进程的16进制, 然后再使用jstack -l 32423 |grep e3b -C 20 定位出问题点

[root@10 testapp]# printf "%x\n" 3643

e3b

[root@10 testapp]# jstack -l 32423 |grep e3b -C 20

2020-08-17 13:28:15

Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.261-b12 mixed mode):

"Attach Listener" #31 daemon prio=9 os_prio=0 tid=0x00007f3408004800 nid=0x3c82 waiting on condition [0x0000000000000000]

java.lang.Thread.State: RUNNABLE

Locked ownable synchronizers:

- None

"Thread-2" #30 daemon prio=5 os_prio=0 tid=0x00007f342c29d800 nid=0xe3b runnable [0x00007f33ff7fa000]

java.lang.Thread.State: RUNNABLE

at java.io.FileOutputStream.writeBytes(Native Method)

at java.io.FileOutputStream.write(FileOutputStream.java:326)

at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)

at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)

- locked <0x00000000f77a25e0> (a java.io.BufferedOutputStream)

at java.io.PrintStream.write(PrintStream.java:482)

- locked <0x00000000f7785748> (a java.io.PrintStream)

at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)

at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)

at sun.nio.cs.StreamEncoder.flushBuffer(StreamEncoder.java:104)

- locked <0x00000000f7785730> (a java.io.OutputStreamWriter)

at java.io.OutputStreamWriter.flushBuffer(OutputStreamWriter.java:185)

at java.io.PrintStream.newLine(PrintStream.java:546)

- eliminated <0x00000000f7785748> (a java.io.PrintStream)

at java.io.PrintStream.println(PrintStream.java:807)

- locked <0x00000000f7785748> (a java.io.PrintStream)

at com.example.shirodemo.controller.TestController$Worker.run(TestController.java:34)

at java.lang.Thread.run(Thread.java:748)

4.可以看出是testcontroller的run方法出现问题,且大约在34行.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值