多线程线上问题定位(附带有用的Linux命令)

TOP命令

1,如果某个线程cpu利用率一直100%, 则说明这个线程有可能有死循环.

2,如果某个线程长期除以top位置,说明这个线程可能有性能问题

3,cpu利用率高的线程不停的变化,说明并不是某一个线程导致CPU偏高.

如果是第一种情况,有可能是GC造成的.我们可以用jvm自带的jstat命令查看一下GC情况.是否是持久代或者年老代满了.产生的Full GC,从而导致CPU利用率飙高

命令:sudo /usr/java/jdk1.7.0_80/bin/jstat -gcutil 32235 1000 5               (1000是取样时间间隔单位毫秒,5位次数)

 

 S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
  0.39   0.00  12.06  10.09  23.23  54370  306.867     0    0.000  306.867
  0.00   0.39  14.03  10.09  23.23  54371  306.872     0    0.000  306.872
  0.00   0.39  92.19  10.09  23.23  54371  306.872     0    0.000  306.872
  0.00   0.39  92.19  10.09  23.23  54371  306.872     0    0.000  306.872
  0.00   0.39  92.20  10.09  23.23  54371  306.872     0    0.000  306.872
S0:Heap上的 Survivor space 0 段已使用空间的百分比 
S1:Heap上的 Survivor space 1 段已使用空间的百分比 
E: Heap上的 Eden space 段已使用空间的百分比 
O: Heap上的 Old space 段已使用空间的百分比 
P: Perm space 已使用空间的百分比 
YGC:从程序启动到采样时发生Young GC的次数 
YGCT:Young GC所用的时间(单位秒) 
FGC:从程序启动到采样时发生Full GC的次数 
FGCT:Full GC所用的时间(单位秒) 
GCT:用于垃圾回收的总时间(单位秒)
       

我们还可以把目标线程dump下来,直接分析哪儿的代码造成的CPU利用率飙升.

命令:sudo -u root /usr/java/jdk1.7.0_80/bin/jstack 32235 > /usr/local/dump17



查看链接到某个端口的连接数

netstat -nat | grep 12200 -c

查看线程数

ps -eLf |grep java -c


查看系统平均负载

cat /proc/loadavg  

结果:0.16 0.16 0.14 4/304 28096  

前三个数字大家都知道,是1、5、15分钟内的平均进程数。后面两个呢,一个的分子是正在运行的进程数,分母是进程总数;另一个是最近运行的进程ID号

一般来说只要每个CPU的当前活动进程数不大于3那么系统的性能就是良好的,如果每个CPU的任务数大于5,那么就表示这台机器的性能有严重问题。对于 上面的例子来说,假设系统有两个CPU,那么其每个CPU的当前任务数为:8.13/2=4.065。这表示该系统的性能是可以接受的。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值