zoukankan      html  css  js  c++  java
  • 项目总结53:Linux Java项目CPU过载问题分析

    项目总结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 " tid  (printf "%x " 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);
            }
  • 相关阅读:
    11.菜单(一)
    线性表之顺序存储详解
    SVN 撤回已提交的代码
    线性表1
    顶层父类
    异常类之派生类
    new和delete重载
    异常类之基类
    Qt中多线程问题
    智能指针实例
  • 原文地址:https://www.cnblogs.com/wobuchifanqie/p/12190923.html
Copyright © 2011-2022 走看看