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);
            }
  • 相关阅读:
    反序列化
    反序列化使用
    Serializer序列器
    DRF工程搭建
    JDK目录介绍
    Java环境变量配置
    Java语言的特性
    Java语言概述
    计算机编程语言介绍
    软件开发介绍
  • 原文地址:https://www.cnblogs.com/wobuchifanqie/p/12190923.html
Copyright © 2011-2022 走看看