cpu负载飙升到100%

问题排查
1空间给够没
2找到代码问题 看死锁synchronized lock 看循环while  (true)

top查看进程
top -Hp pid 查看进程中那个线程占用较高
17767 zhonghe   20   0 4943016 754804  12184 R 98.3  9.4 310:29.85 java                                                                                                                                                                  
17672 zhonghe   20   0 4943016 754804  12184 R 94.7  9.4 310:12.15 java 
转成16进制地址 jstack看堆栈实时日志
jstack -l pid > test.txt 
查看到代码哪个方法有问题

"pool-2-thread-2" #196 prio=5 os_prio=0 tid=0x00007f807d5d1800 nid=0x489c runnable [0x00007f8020371000]
   java.lang.Thread.State: RUNNABLE
	at java.lang.Thread.sleep(Native Method)
	at com.hangmu.iorg.base.pickup.tcp.SocketHandler.onMessage(SocketHandler.java:210)
	at com.hangmu.iorg.base.pickup.tcp.ClientSocket.run(ClientSocket.java:32)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:750)
   Locked ownable synchronizers:
	- <0x0000000092c0abf8> (a java.util.concurrent.ThreadPoolExecutor$Worker)

socket 非阻塞读取消息 导致cpu飙升 
 while (true){ 
 }
 考虑添加一个等待或睡眠的时间来降低CPU的占用率!!!!
Thread.sleep(1);
CPU竞争有很多种策略。
Unix系统使用的是时间片算法 给每个进程分配一段时间,即该进程允许运行的时间 到时间就切走
Thread.Sleep 函数是干吗的呢?还用刚才的分蛋糕的场景来描述。上面的场景里面,5号MM在吃了一次蛋糕之后,觉得已经有8分饱了,她觉得在未来的半个小时之内都不想再来吃蛋糕了,那么她就会跟操作系统说:在未来的半个小时之内不要再叫我上来吃蛋糕了。
而Windows则属于抢占式的 进程得到Cpu 运行完才结束
Thread.Sleep(0)的作用,就是“触发操作系统立刻重新进行一次CPU竞争”竞争的结果也许是当前线程仍然获得CPU控制权,也许会换成别的线程获得CPU控制权
 
nid:操作系统级别的线程id,是一个十六进制
关于线程的信息:
NEW:线程新建,还没开始运行
RUNNABLE:正在java虚拟机中运行的线程
BLOCKED :被阻塞,正在等待监视器锁的线程
WAITING :无限期等待另一个线程执行特定操作的线程
TIMED_WAITING:等待另一个线程执行操作达到指定等待时间的线程
TERMINATED:已经退出的线程

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值