java问题导致linux负载、cpu过高如何定位

1.用top找到最耗资源的进程id

[root@localhost bin]# top
top - 16:56:14 up 119 days,  6:17,  7 users,  load average: 2.04, 2.07, 2.09
Tasks: 256 total,   1 running, 254 sleeping,   0 stopped,   1 zombie
Cpu(s):  5.0%us,  0.3%sy,  0.0%ni, 94.2%id,  0.4%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   8303056k total,  7368528k used,   934528k free,   515232k buffers
Swap: 16386260k total,    27312k used, 16358948k free,  4670096k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                      
 5244 root      15   0 1940m 1.3g  10m S 205.3 15.8 260:31.88 java                                                                                                         
 7991 root      15   0  2336 1020  704 R  2.0  0.0   0:00.01 top        

2.查询最消耗资源的java进程

[root@localhost bin]# top -p 5244 -H
top - 16:56:00 up 119 days,  6:17,  7 users,  load average: 2.05, 2.08, 2.09
Tasks:  67 total,   2 running,  65 sleeping,   0 stopped,   0 zombie
Cpu(s): 25.8%us,  0.2%sy,  0.0%ni, 73.4%id,  0.5%wa,  0.0%hi,  0.1%si,  0.0%st
Mem:   8303056k total,  7369024k used,   934032k free,   515220k buffers
Swap: 16386260k total,    27312k used, 16358948k free,  4670100k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                      
 5920 root      18   0 1940m 1.3g  10m R 98.6 15.8 121:55.29 java                                                                                                          
 5925 root      25   0 1940m 1.3g  10m R 98.6 15.8 121:21.41 java                                                                                                          
 7985 root      15   0 1940m 1.3g  10m S  3.3 15.8   0:00.10 java                                                                                                          
 5246 root      15   0 1940m 1.3g  10m S  1.0 15.8   1:02.50 java                                                                                                          
 5247 root      15   0 1940m 1.3g  10m S  1.0 15.8   1:02.35 java                                                                                                          
 5248 root      15   0 1940m 1.3g  10m S  1.0 15.8   1:02.38 java

3.打印java 栈 信息

在jdk的bin下执行

[root@localhost bin]# jstack 5244 >stack.txt

 

4.将耗资源的javaPID转换为16进制(5920转1720<16进制>  去百度找 :十进制转十六进制)

PID 对应 堆栈中的nid(16进制)

去stack.txt 中查找nid=1720的问题

"LongTimeTask Thread" daemon prio=10 tid=0x40916400 nid=0x1720 runnable [0x412fe000]
   java.lang.Thread.State: RUNNABLE
 at com.zving.tk.service.CreatePaperService.createPaper(CreatePaperService.java:143)
 at com.zving.tk.service.CreatePaperService.execute(CreatePaperService.java:55)
 at com.zving.framework.messages.LongTimeTask.run(LongTimeTask.java:154)

5.根据具体问题查找源代码  

 

6.同时要看一下堆的情况

在jdk的bin目录执行

jmap  - heap  5244

jmap  -histo   5244 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值