java 线程 cpu 如何 调度 linux_Linux下java进程CPU占用率高分析方法(一)

Linux下java进程CPU占用率高分析方法

在工作当中,肯定会遇到由代码所导致的高CPU耗用以及内存溢出的情况。这种情况发生时,我们怎么去找出原因并解决。

一般解决方法是通过top命令找出消耗资源高的线程id,利用strace命令查看该线程所有系统调用

1.通过top命令查看当前系统CPU使用情况,找到可疑进程PID

top - 09:37:18 up 70 days, 16:29, 2 users, load average: 1.13, 1.04, 0.97Tasks:105 total, 1 running, 104 sleeping, 0 stopped, 0zombie

Cpu(s):1.0%us, 4.9%sy, 0.0%ni, 93.6%id, 0.0%wa, 0.0%hi, 0.0%si, 0.5%st

Mem: 2067816k total, 1756680k used, 311136k free, 236340k buffers

Swap: 524284k total, 255508k used, 268776k free, 277040k cached

PID USER PR NI VIRT RES SHR S%CPU %MEM TIME+COMMAND24138 apache 20 0 1273m 384m 3668 S 103.3 19.0 1232:39java3359 root 39 19 2704 36 0 S 0.3 0.0 4:39.34gam_server6696 root 20 0 34148 1604 244 S 0.3 0.1 5:06.63httpd19254 root 20 0 785m 221m 3176 S 0.3 11.0 9:04.36java1 root 20 0 2224 28 0 S 0.0 0.0 1:22.46init2 root 20 0 0 0 0 S 0.0 0.0 0:00.00kthreadd3 root 20 0 0 0 0 S 0.0 0.0 0:33.42 ksoftirqd/0

5 root 20 0 0 0 0 S 0.0 0.0 0:00.03 kworker/u:0

从上面命令中可以看出java进程CPU利用率一直保持100%,稳居不下,找到PID 24138

2. 找出消耗资源最高的线程

top -H -p 24138 可以不用第一步,直接执行命令 top -H ,就可以查看到消耗资源最高的线程

top - 09:49:49 up 70 days, 16:41, 2 users, load average: 1.01, 1.04, 1.00Tasks:72 total, 1 running, 71 sleeping, 0 stopped, 0zombie

Cpu(s):0.6%us, 1.3%sy, 0.0%ni, 97.7%id, 0.1%wa, 0.0%hi, 0.0%si, 0.2%st

Mem: 2067816k total, 1760840k used, 306976k free, 236744k buffers

Swap: 524284k total, 253344k used, 270940k free, 279092k cached

PID USER PR NI VIRT RES SHR S%CPU %MEM TIME+COMMAND24167 apache 20 0 1273m 384m 3688 R 99.1 19.0 1169:43java24152 apache 20 0 1273m 384m 3688 S 2.0 19.0 0:28.58java24188 apache 20 0 1273m 384m 3688 S 2.0 19.0 4:56.69java24138 apache 20 0 1273m 384m 3688 S 0.0 19.0 0:00.00 java

3. 查看这个线程所有系统调用情况

strace -p 24167

可能没有重要信息

4. 将需要的线程ID转换为16进制格式

printf "%x\n" 2416773ef

5. 最后打印线程的堆栈信息:

jstack 24167|grep 73ef -A 30

6、也可抓取堆栈信息,查看代码位置

jstack -F 24167 > dump.txt

通过这几步基本可以找出什么原因导致java进程占用那么高CPU资源。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值