Java项目排查cpu负载高_玖富娱乐主管发布


玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。

配景

  我卖力的个中一个项目在空负载的状况下,CPU占用率依旧连结着100%摆布,线上、测试、开辟的效劳都一样;是什么致使的呢?在开辟状况我检察了要求流量,这个流量能够疏忽但CPU占用率一向在60%-100%之间浮动。

剖析题目

  流量能够疏忽,但CPU占用依旧极为高申明不是要求多致使的资本占用,缘由应该是项目自身自觉致使的;自觉包孕准时义务与死循环,而详细哪一段代码如今也肯定不了。如今我们就能够借助原生的jdk剖析对象来定位是项目哪块涌现了题目(你能够用更高等的jprofilter等,一衔接,题目一览无余),以下我就接纳jdk自带对象jstack、jstat 、jmap等来逐渐定位。

定位题目

  • 在Linux状况下用top检察cpu、内存等资本占用状况(可接纳: top -p pid 详细检察某个运用)。发明pid=4179的java运用占用cpu很高  

     

    -玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。-
  •  检察pid=4179的运用各个线程占用cpu的时候片状况:ps -mp 4179 -o THREAD,tid,time (ps -mp pid -o THREAD,tid,time)。发明tid =4528的线程一向长时候占有着cpu而且占用率达100%

         

  • 将 4528转为16进制,便于在客栈信息中查询定位代码块:printf "%xn" 4528,转成16进制为 11b0
  • 在客栈信息中定位报错代码块:jstack 4179|grep 11b0 -A 30 ( jstack pid|grep TID(16进制) -A 30 )

     

总结

  从客栈信息中我们能够看到是 WAITING致使,这个申明有一个线程长时候占用资本,而其他线程一向处于守候的状况。终究定位出是在一个分布式锁完成的模块中有一个连结锁的代码块有题目。然后经由过程优化这个分布式锁终究处理了这个题目。经由过程此次优化,大大节约出了效劳器资本(现在这个体系在线上是4台集群,相当于节约了1*4 个cpu,如果是一个上百以至上千的集群,那末这个资本占用是没法设想的),最主要的是避免了这类状况对体系自身的影响,避免了对一般要求的壅塞。

 

-玖富娱乐是一家为代理招商,直属主管信息发布为主的资讯网站,同时也兼顾玖富娱乐代理注册登录地址。