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

发布时间 2023-03-22 19:14:03作者: simpleMo

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

处理逻辑:

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

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

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

 

 

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

 

 

 

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

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

 

 

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

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

 

 

 

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

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

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都正常。