业务场景:游戏行业,N个服务器,要进行大批量的合服处理,玩家数据会上升,从新整理和服务器的分配情况和逻辑处理,正常开发后,当天白天正常,然后晚上高峰期开始玩家频繁反馈无法登录~~~
处理逻辑:
优先确认服务是否宕机,如果是,就重启,分析linux系统日志,根据宕机的原因进行处理即可;
再确认服务器情况,cpu、内存、硬盘、网络等等;
内存使用情况还算正常,还有30-40的余量空间,cpu很明显的异常:
![](https://i-blog.csdnimg.cn/blog_migrate/8d569d7a51953b6d768a6c69f7cb213a.png)
再查询进程下线程的具体情况:
![](https://i-blog.csdnimg.cn/blog_migrate/8a570845eabbf1f134341b5fb9f54a0d.png)
再吧5675转16进制: 162b ,再查询堆栈信息
jstack 5656|grep -i -B 10 -A 50 162b
![](https://i-blog.csdnimg.cn/blog_migrate/10596c34ecfec5e3d5acadf2ba3af7d7.png)
可以确认,系统在疯狂GC~~~再查询gc的详情
jstat -gcutil 5596 1000 5;
jstat -gc -h3 5596 250 10;
![](https://i-blog.csdnimg.cn/blog_migrate/661320c318960c60e11ec5febcd0cbf4.png)
到此,确认是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都正常。