最近使用规则引擎drools,分配的内存比较一般,但是数据的并发量比较大,系统上线后总是运行不到一天,被系统杀死,将打印dump的启动参数配置上之后,也没有生成对应的dump文件,让我比较尴尬。深入研究了JVM和操作系统杀死JVM的原因,最终分析出来几点原因,并进行分享下。
首先:先将JVM的组成部分,及每部分存放的内容进行研究了一遍:参考:
https://blog.csdn.net/taohuaxinmu123/article/details/24472073,
https://blog.csdn.net/u010663871/article/details/73603460 不限于这两篇文章。
其次:了解启动jar命令行参数,为java堆内存、栈内存、生成GC垃圾回收日志,OOM时JVM生成dump日志的命令行参数搞定
再次:通过jmap ,jstack等命令查看JVM相关的堆栈大小,及相关的信息
最后:借助监控工具,进行分析系统宕机时堆栈相关大小等
通过以上过程,开始参考如下分析drools:
https://www.iteye.com/blog/rednaxelafx-548536
https://blog.csdn.net/adorechen/article/details/89473543 Drools insert fact 引起的内存溢出
https://blog.csdn.net/iteye_19891/article/details/81799364 drools内存泄露问题排查分析
https://blog.csdn.net/wwwcomy/article/details/84658127 Drools引发的PermGen OOM异常的跟踪
SoftRefLRUPolicyMSPerMB 软连接
https://blog.csdn.net/maangming/article/details/79837245