java cpu高达100%问题 排查

  2016-11-12  卍极客 

一次系统测试时执行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>


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值