• 记录一个cpu彪高的BUG处理--jvm调优


    业务场景:游戏行业,N个服务器,要进行大批量的合服处理,玩家数据会上升,从新整理和服务器的分配情况和逻辑处理,正常开发后,当天白天正常,然后晚上高峰期开始玩家频繁反馈无法登录~~~

    处理逻辑:

    优先确认服务是否宕机,如果是,就重启,分析linux系统日志,根据宕机的原因进行处理即可;

    再确认服务器情况,cpu、内存、硬盘、网络等等;

    内存使用情况还算正常,还有30-40的余量空间,cpu很明显的异常:

     

     

    再查询进程下线程的具体情况:

     

     

     

     再吧5675转16进制: 162b ,再查询堆栈信息

    1
    jstack 5656|grep -i -B 10 -A 50 162b

     

     

     可以确认,系统在疯狂GC~~~再查询gc的详情

    1
    jstat -gcutil 5596 1000 5;
    jstat -gc -h3 5596 250 10;

     

     

     

     到此,确认是gc导致的bug~~~

    首先把堆栈导出后,重启,先恢复系统

    1
    2
    jstack -l 5596 > jstack.data;
    jmap -histo  5596 > jmap.data;

    那么如何解决呢?

    1:优化代码

    2:优化服务器

    1的话工作量比较大,而且开头说道了内存其实是够够的~所以选2,jvm调优

    根据jdk版本,选择调整:1.7是PermSize,大于的是MetaspaceSize

    -Xmx3072m -Xms2048m -XX:PermSize=256M -XX:MaxPermSize=512M 

    -Xmx3072m -Xms2048m -XX:CompressedClassSpaceSize=256m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m

    后续观察了几天,cpu都正常。

  • 相关阅读:
    [论文阅读] 颜色迁移-Linear Monge-Kantorovitch(MKL)
    数组对象中某个值累加reduce
    【第八篇】商城系统-库存管理
    这也许是22年国内最牛的Java面试八股文合集(全彩版),不接受反驳
    unity基础5-优化策略
    java 如何查看对象占内存大小
    Java并发(四)----线程运行原理
    REST风格
    Hfish安全蜜罐部署
    C++语法2
  • 原文地址:https://www.cnblogs.com/simplemo/p/17169413.html