前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java cpu高达100%问题 排查

java cpu高达100%问题 排查

作者头像
java达人
发布2018-01-31 16:16:38
1K0
发布2018-01-31 16:16:38
举报
文章被收录于专栏:java达人

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

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

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

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

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

代码语言:js
复制
while (true) {
      Task task = taskQueue.poll();
      if (task != null) {
         ……..
      }
            …….
}

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

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

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

代码语言:js
复制
       <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镜像站已经关闭了,知道有个阿里的镜像,速度还可以,但感觉其中的库没有官方的全面:

代码语言:js
复制
<mirrors>
    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>
  </mirrors>

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-11-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java达人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档