故事背景
项目在夜里跑定时任务的时候出现异常,然后垃圾回收缓慢,最后造成down机,持续两天,本来不想为此浪费时间,老重启也不好,先看日志。
26-May-2021 00:06:29.287 严重 [http-nio-8080-exec-6] org.apache.coyote.AbstractProtocol$ConnectionHandler.process 无法完成请求的处理java.lang.OutOfMemoryError: GC overhead limit exceededat java.lang.reflect.Method.copy(Method.java:153)at java.lang.reflect.ReflectAccess.copyMethod(ReflectAccess.java:140)at sun.reflect.ReflectionFactory.copyMethod(ReflectionFactory.java:302)25-May-2021 15:40:10.780 严重 [http-nio-8080-exec-4] org.apache.coyote.AbstractProtocol$ConnectionHandler.process 无法完成请求的处理java.lang.OutOfMemoryError: Java heap spaceat java.util.Arrays.copyOfRange(Arrays.java:3664)at java.lang.StringBuffer.toString(StringBuffer.java:671)
问题解决
由于已经将tomcat注册为 windows service服务,所以直接在tomcat修改jvm参数似乎并没有什么用,所以干脆修改注册表。
在开始中输入 regedit 打开注册表。
然后按照下图指示,找到jvmMx,修改为1024。
重启tomcat查看日志
参数已经修改。
26-May-2021 14:37:25.199 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: exit26-May-2021 14:37:25.199 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: abort26-May-2021 14:37:25.199 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Xms128m26-May-2021 14:37:25.199 信息 [main] org.apache.catalina.startup.VersionLoggerListener.log 命令行参数: -Xmx1024m
最后
有人问,既然定位问题原因了,要修复bug啊,我想说,项目已经这个样子了(如下图),最好就不要动了,除非你想加班。