一、背景
项目程序是内嵌到APP的H5页面,从APP跳转进入H5页面需要调用APP系统的token认证接口,近期某个时间点出现登录验证失败情况,排查服务日志,发现token认证接口服务报错(java.lang.OutOfMemoryError: Java heap space)。
二、排查过程
1、服务代码内存泄漏情况排查
a、是否有循环引用情况
b、长生命周期对象持有短生命周期对象的引用
(例子:全局静态map中缓存局部变量、且没有清空操作,map越来越大)
c、长时间开启非常耗费资源的连接
2、程序堆内存参数配置是否合理
a、根据服务器资源情况配置,理论可配置服务器内存的1/4 (-Xmx1204M -Xms1024M)
b、Xmx和Xms值尽量配置一致,不一样情况,初始化JVM堆内存空间较小,这会导致每当空间不够用的时候会向操作系统申请,需要进行一次GC
3、收集oom日志,定位内存消耗情况
a、java启动命令添加参数,当程序发生oom情况会输出详细日志
(-Xmx1204M -Xms1024M -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+DisableExplicitGC -XX:+HeapDumpOn