首页 > 编程语言 > 详细

项目总结53:Linux Java项目CPU过载问题分析

时间:2020-01-14 17:55:37      阅读:67      评论:0      收藏:0      [点我收藏+]

项目总结53:Linux Java项目CPU过载问题分析

发现问题

因为项目部署在阿里云服务器上,登陆阿里云服务器,发现服务器CPU一直是100%使用;

 

问题分析

第一步:找到占用过多CPU进程,并找到对应的为题代码

  • 1-登陆Linux服务器,使用TOP指令,找到占用CPU的进程;查找发现PID=31687,且是java项目

技术分享图片

  • 2- 使用ps aux | grep PID   (ps aux | grep 31687)查看是那个java程序占用cpu 。根据文件目录位置确认就是自己部署的Java项目出问题了

技术分享图片

  •  3-ps -mp PID -o THREAD,tid,time  (ps -mp 31687 -o THREAD,tid,time)显示线程列表,找出线程列表中占用cpu过高的tid (如tid=31687 ); | sort -rn -k2 | head -10 表示根据第二个参数倒序排序,且只展示前10个数据

技术分享图片

  •  4-printf "%x\n" tid  (printf "%x\n" 32279)将其tid转化为16进制格式 如7e17 

技术分享图片

  •  5-jstack PID | grep TID -A30(jstack 31687 | grep 7e17 -A30)   打印对应的堆栈信息,查看具体原因;对CPU占用排前10的问题,均是同一个问题,如下

技术分享图片

 

 第二步:分析代码问题

解决问题

  • 1-针对线程安全问题,对HashSet,使用Collections.synchronizedSet(sessionSet)进行同步处理
        HashSet<HttpSession> sessionSet=(HashSet<HttpSession>) context.getAttribute("sessionSet");
        Set<HttpSession> httpSessions = Collections.synchronizedSet(sessionSet);
        if(httpSessions==null){
            httpSessions=new HashSet<HttpSession>(); 
            context.setAttribute("sessionSet", httpSessions);
        }

项目总结53:Linux Java项目CPU过载问题分析

原文:https://www.cnblogs.com/wobuchifanqie/p/12190923.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!