在最近的启动过程中,我遇到了CPU使用率高的问题
问题解决后,此时仅重现操作方法

1.首先使用top命令来查找CPU占用率最高的进程PID,如上所示

2.使用ps -mp pid -o THREAD,tid,time查询进程,该线程的CPU占用率很高。记住TID

3.jstack 29099 >> xxx.log打印出进程的线程日志


4.sz xxx.log将日志文件下载到本地


5.将找到占用最高tid的线程,并将上图中的29108转换为十六进制--- 71b4

6.打开下载的xxx.log并通过搜索方法找到相应的线程以进行故障排除
================================================ ======================

一些容易导致CPU使用率高的点
1.在代码中编写无限循环时,它总是占用CPU,例如

如果增加了线程睡眠时间,则将释放CPU占用率,并且不会一直抢占CPU

2.如上所述,在循环中创建对象也将导致频繁的GC ---通过下图,请勿让无休止的循环,频繁地创建对象


3.System.currentTimeMillis()使用此方法进行计时,由于不断调用,它可能占用了10%至20%的CPU。

解决方案:使用线程进行计时
公共类TimerThread扩展了线程{
公共静态易失性长TIMER = 0;
公共TimerThread(){
setDaemon(true);

}
public void run(){
while(true){
尝试{
// ===每秒定时+1 ===
Thread.sleep(1000);
TIMER ++;

} catch(InterruptedException e){
抛出新的RuntimeException(e);
}
}
}
}

4.C2 CompilerThread0-该线程可能会在进程开始前的某个时间占用10%的cpu,稍后它将下降到1%,详情请参阅其他人的博客
5. FullGC问题,目前还没有遇到,请添加它...
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-347897-1.html
等了这么久终于来了
en~~~确实假货