记录一次机器load高

周一的清晨,当我寻着熟悉的节奏坐在工位前,打开一堆工具,准备开始敲我无谓的代码的时候,发现右边黄色的报警闪个不停,点开,又是机器load高的报警消息。
刚巧,记起几天前看到的一篇文章里面有个工具,可以更方便的定位load高的线程。
抓耳挠腮,翻找半天,诶,找到了:show-busy-java-threads
把文件传到机器上面,然后看半天说明,有了以下的命令:

sudo ./show-busy-java-threads.sh -s /home/q/java/default/bin/jstack -p 25158 -c 5

然后,确实很好用,输出了几个占用CPU比较高的线程栈信息。比如:

java.lang.Thread.State: RUNNABLE
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
        at java.net.SocketInputStream.read(SocketInputStream.java:170)
        at java.net.SocketInputStream.read(SocketInputStream.java:141)
        at java.net.SocketInputStream.read(SocketInputStream.java:127)
        at redis.clients.util.RedisInputStream.ensureFill(RedisInputStream.java:196)
        at redis.clients.util.RedisInputStream.readByte(RedisInputStream.java:40)
        at redis.clients.jedis.Protocol.process(Protocol.java:151)
        at redis.clients.jedis.Protocol.read(Protocol.java:215)
        at redis.clients.jedis.Connection.readProtocolWithCheckingBroken(Connection.java:340)
        at redis.clients.jedis.Connection.getIntegerReply(Connection.java:265)
        at redis.clients.jedis.Jedis.exists(Jedis.java:179)

发现每个线程都阻塞在了 java.net.SocketInputStream.socketRead0 这个方法上面。
有篇文章比较好:http://javaeesupportpatterns.blogspot.com/2011/04/javanetsocketinputstreamsocketread0.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值