Java nio 有时会导致CPU100%,一般是什么原因

Java nio 有时会导致CPU100%,一般是什么原因,第1张

cpu使用率高的原因及解决方法:

第一、杀毒软件,常见的金山、瑞星杀毒软件会对网页、插件等进行监控,这样就增大了系统负担,自然也就会造成cpu使用率高。

第二、驱动不达标,现在人们使用的驱动有几大一部分是属于测试版的驱动,这一类驱动并不合格,它可以造成CPU100%的使用率,而且不容易发觉。

 轿派 第三、病毒木马,病毒在系统内部复制,必然造成极高的cpu占有率

第四虚中、网络链接,这是最直接的客观原因,主要是网络连接不稳定。

第五、启动项太多,一般来说开机启动项过多,就会增加cpu的使用率,增加其荷载。

第六、桌面尽量少放文件,在桌面上放过多的文件,极大的占用cpu,造成使用率过高

第七、软件本身需要占有很高的CPU,比如一览器有时有的软件和系统会有点不兼容。

第八、“svchost”进程影响,svchost.exe是系统的一个核心进程,svchost.exe有时非常闭誉贺令人头痛,如果看到某个svchost.exe占用很大CPU,这时可以去下aports或者fport来检察其对应的程序路径,看下是不是有程序调用svchost.exe。

第九、右击文件100%扥使用率,这个也是非常常见,在官方解释也很有意思。

第十、cpu温度过高,证明cpu本身就是出于不正常运行,自然也就会导致异常。

第十一、word文件过大,cpu对其拼写和语法检查过度。

方法1

1.jps 获取Java进程的PID。

2.jstack pid >>java.txt 导出CPU占用高进程的线程栈。

3.top -H -p PID 查看对应进程的哪个线程占用CPU过高。

4.echo “obase=16PID” | bc 将线程的型绝PID转换为16进制,大写转换为小写。

5.在第二步导出的Java.txt中查找转换成为16进制的线程PID。找到对应的线程栈。

6.分析负载高的线程栈都是什么业务 *** 作。优化程序并处理问题脊大。

方法2

1.使用top 定位到占用CPU高的进程PID

top

通过ps aux | grep PID命令

2.获取线程信卜野姿息,并找到占用CPU高的线程

ps -mp pid -o THREAD,tid,time | sort -rn

3.将需要的线程ID转换为16进制格式

printf "%x\n" tid

4.打印线程的堆栈信息

jstack pid |grep tid -A 30

你是自己编写的程序吗?如果是请自查代码

CPU占用过高,一般是因为你线程启动太多或者其中一个或多个线程工作太忙

工作太忙的例子,最简单的,代码太长,执行需要一段时间,CPU就会升高,可以适当地加上sleep(milliseconds)来使其睡眠一小会。

还有就是线程有的时候必须要时刻监听一个值,这个时候简单粗轮链暴的方式就是while(true),然后里面判断一个boolean是否为真,如果是则break,如果不是则继续循环

这样的代码是【非常】【非常蔽尺】吃CPU的,还是避免它比较好,或者至少加入sleep(1)来让其休息一下,1已经很小了。。

线程太多的话,我们的CPU本来是很闲的,尤其是电脑闲置的时候,基本上是不会干活的,只会监听一下硬件设备,以及自动保存一下未保存的文档等等,它的时间片安排的特别宽松,也就不会出现占用过高的问题,结果假设你的程序给它安排了几十个线程等着执行……

因为CPU可不是给一个单独的线程一堆时间,直到这个线程结束再给下一个线程。

CPU会把自己的时间片资源分配给随机的线程,执行时间结束后强制暂停线程,优先级高的能获得更多处理时间,但不保证必然能得到全部时间。

如果线程太多了,那么sleep方法就没什么用了,因为本来是让线程休息的,结果这个休息了那个立马腊并孙就开始,所以用处不大了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12564930.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存