6月25日OMS,Ihotel上线成功后执行了一个批处理,SOA报警提示某一台IHOTEL机器调用OMS失败率大于阀值,登录这个机器后发现这台机器CPU使用率处于80%以上,调用OMS有的时候超过5秒。tomcat日志显示一直在执行fullGC.
tomcat报错:
后联系OPS重启这台机器上的tomcat,系统运行正常。
错误原因分析:
使用MAT分析java_pid20367.hprof文件
pool-8-thread-2这个线程产生了占用了1.6GB的内存。造成下面的错误:
这个线程在执行的操作是分页查询OMS,上面的日志显示在SOA调用OMS的时候,由于outOfMemery,soaclient抛出error异常,捕获后没有往外面抛出,因此此线程一直在执行,占用大量的内存【如果此异常抛出到最外层,此线程会终止,线程下面的堆内存也会被GC收回】。因此JVM大部分时间一直在执行FullGC操作,其他线程运行缓慢。最终只能重启tomcat。