java cpu高达100%问题 排查

时间:2022-04-25
本文章向大家介绍java cpu高达100%问题 排查,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一次系统测试时执行top命令发现cpu竟接近100%!

找到进程id 31260,执行jstack 31260 > cpu31260.log,将堆栈信息dump到log文件中。

通过top -p 31260 -H命令找到占用cpu最多的线程,为31328

打开cpu31260log文件,查找到线程31328的相关信息:

发现是程序代码问题,即该类第37行,原来是一不小心把循环里面的阻塞方法写错了。

while (true) {
      Task task = taskQueue.poll();
      if (task != null) {
         ……..
      }
            …….
}

taskQueue是LinkedBlockingQueue类,程序的本意是在阻塞队列为空时阻塞等待,但poll()方法在获取不到元素时会直接返回null,所以poll()方法应该改成take(),这样就不会有毫无意义的死循环发生。

这里再补充一个小知识点,有时在mvn clean install 的时候经常卡在下载metadata文件,检查更新的地方,导致打包速度变慢。

这和maven仓库的访问速度有关,如果不想频繁检验,可对仓库作一些设置:

       <repository>
	<id>centralmaven</id>
	<url>http://central.maven.org/maven2/</url>
        <releases>
	<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
	</releases>
	<snapshots>
	<enabled>false</enabled>
	</snapshots>
      </repository>

关键是updatePolicy节点,这是maven的更新策略,有多个选项:always表示总是,never表示从不,daily(默认)表示每天,interval:X 表示X分钟。

国内oschina的maven镜像站已经关闭了,知道有个阿里的镜像,速度还可以,但感觉其中的库没有官方的全面:

<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
  </mirrors>

不知道国内还有没有其他不错的镜像站,知道的朋友可以留言推荐下。