php100并发cpu告警,多线程并发导致CPU100%的一种原因和解决办法
在用自定义线程池的时候,遇到cpu100%,经过验证后,发现问题来源于我定义的子线程。
子线程的主要功能是从任务队列(LinkedBlockingQueue)里面持续拿出任务,并且执行。
以下为令CPU100的代码。
private class WorkThread extends Thread
{
@Override
public void run()
{
while(flag)
{
Runnable task=null;
if(flag&&!taskQueue.isEmpty())//当队列非空
{
try
{
task=taskQueue.poll();//拿到任务,若没有则拿到null
if(task!=null)
task.run();//执行任务
} catch (Exception e)
{
e.printStackTrace();
}
}
}
}
}
之后,随便往while循环里面添加进System.out.println(“xxxx”);
发现CPU降低了,不会升到100,于是我修改了代码如下:
//增加一句Thread.sleep(),令所有线程每次进入while循环的时候,都先休眠释放资源,这CPU就不会升到100
private class WorkThread extends Thread
{
@Override
public void run()
{
while(flag)
{
try {
Thread.sleep((long) 0.5);//先释放资源,避免cpu占用过高
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Runnable task=null;
if(flag&&!taskQueue.isEmpty())//当队列非空
{
try
{
task=taskQueue.poll();//拿到任务,若没有则拿到null
if(task!=null)
task.run();//执行任务
} catch (Exception e)
{
e.printStackTrace();
}
}
}
}
}
造成上述现象的原因:LinkedBlockingQueue是线程安全,当多线程同步从队列里面取出任务,在微观时刻,有且只有一个线程能进入队列中取,因此其他线程阻塞等待,此时各线程都持有cpu资源,不释放,
就造成了大量cpu等待,因而CPU会升高;
值得注意的一点:
LinkedBlockingQueue中取出任务方法有几种,比如take(),poll(),一开始我用take方法,发现运行后,线程资源无法得到释放,后来看了api发现take()是阻塞拿,意思是:线程往队列里面拿任务,
如果队列里面没有任务,则进行等待知道有任务再次唤醒。
而poll()方法则是有任务就拿,没任务就返回null,因此不会出现阻塞等待,若上面代码改成用take方法,同样会出现cpu100的问题,也在于阻塞,同时也会出现线程不被GC回收。
php100并发cpu告警,多线程并发导致CPU100%的一种原因和解决办法相关推荐
- 分享导致网站被K的原因及解决办法
相信很多站长都遇到过这样的情况,某天自己网站关键词排名和收录突然暴跌,其实这时可能就要看看是不是网站被K了,判断方法可以看懒猫之前写的文章:南京seo:怎么看出网站首页是否被搜索引擎降权呢,如果被K了 ...
- 导致大量kworker的原因_氨氮超标的几种原因及解决办法
一.有机物导致的氨氮超标 CN 比小于 3 的高氨氮污水,因脱氮工艺要求 CN 比在 4~6,所以需要投加碳源来提高反硝化的完全性.当时投加的碳源是甲醇,因为某些原因甲醇储罐出口阀门脱落,大量甲醇进入 ...
- Socket高并发出现TIME_WAIT的原因以及解决办法
最近公司项目遇到个问题,在Socket并发量较大的情况下,每次服务端发送完数据后,Sevice端采取主动Close的方断开连接.客户端用短连接的方式发送请求,会出现大量请求返回TIME_WAIT的现象 ...
- dma访问主存时_DMA导致Cache数据一致性问题的原因及其解决方式(理论篇)
点击上方公众号名称关注,获得更多内容 ✎ 编 者 悟 语 唉!嫉妒之心真的能俘获它所接触到的任何目标啊--"欲加之罪,何患无辞"呢?"觉悟高的"更有" ...
- Android电视 网页卡,四种导致智能电视卡顿的原因及解决方法!
原标题:四种导致智能电视卡顿的原因及解决方法! 看智能电视最怕遇到的就是卡顿.画面突然顿住,开始转圈圈,让很多用户既气愤又无奈.其实智能电视的卡顿问题,有多方面的原因.本文梳理出几个常见原因及解决办法 ...
- 使用Lock and Load X 插件时导致Final Cat Pro意外退出的解决办法
Lock and Load X是一款Mac平台上的视频稳定防抖插件,适用于FCPX.PR以及AE软件.lock and load x Mac版比PR和FCPX自带的防抖插件,功能更强大,效果更加突出, ...
- Frameset导致Cookies和Session丢失的原因及解决办法
参考资料 1 Frameset导致Cookies和Session丢失的原因及解决办法 http://blog.csdn.net/zl_c/article/details/1742775 2 使用fr ...
- 安全狗php站点404,开启安全狗响应内容保护导致404返回200状态码的解决办法
开启安全狗响应内容保护导致404返回200状态码的解决办法 2020-04-08 开启安全狗响应内容保护导致404状态码返回200的解决办法 今天无意中对www.tbadc.com的404错识做了一个 ...
- U盘插入电脑导致电脑关机的原因及解决办法
前段时间发生了两次极其尴尬的事情,小编的U盘插到两个人人的电脑上都给人家整蓝屏了,小编搜集了一下,U盘插入电脑导致电脑蓝屏的原因有很多,小编在这里总结并分享一下可能的原因及解决办法: 1.Window ...
最新文章
- BZOJ 2004 [Hnoi2010]Bus 公交线路
- 成都Uber优步司机奖励政策(4月8日)
- html5实现贪吃蛇,分享一个用html5实现的贪吃蛇特效代码
- numpy函数:[6]arange()详解
- Visual Studio Online 的 FAQ:iPad 支持、自托管环境、Azure 账号等
- python后台截屏_Python实现屏幕截图
- 如何在GPT分区上安装WIN7
- 如何逃过taint droid的跟踪
- 信息安全完全参考手册之风险分析(第二章)
- androidpn的学习研究(七)Androidpn-server的添加其他xmpp相关的协议(如查看好友列表等)...
- Http网络传递参数中文乱码问题解决办法
- 英特尔发布首款支持 5G NR试验平台 ,离2020年5G商用又进一步
- 使用TASM时报错extra characters on line的解决办法
- 无法打开包括文件: “QTcpSocket”: No such file or directory
- 树上10只鸟,开枪打死1只,还剩几只?
- (5)Redis主从同步原理及详细配置
- STM32小项目之ds18b20测温在oled上显示
- 【华人学者风采】麦立强 武汉理工大学
- 3GPP TS 23501-g51 中英文对照 | 4.2.5a Radio Capabilities Signalling optimisation
- 基于主成分分析的人脸识别及表情识别
热门文章
- jsf表单验证_动态表单,JSF世界期待已久
- java超出gc开销限制_超出了GC开销限制– Java堆分析
- 通过SPANN方式将Spring&Quartz与自定义注释集成
- javadoc定义异常_Doclava:来自Google的自定义Javadoc Doclet
- 依赖注入–字段vs构造函数vs方法
- Java EE 7 / JAX-RS 2.0:具有自定义HTTP标头的简单REST API身份验证和授权
- JVM PermGen –您在哪里?
- 新的自定义控件:TaskProgressView
- Spring集成文件轮询和测试
- Java EE CDI处理程序方法示例