近3月至今,企业的某些应用服务器(java)无缘无故的出現被kill掉状况,缘故各不相同,排查起來也较为痛楚。那什么缘故会导致JAVA进程被kill呢?该怎样去排查难题呢?这里做个小结,跟大伙儿共享下:
什么缘故可能会致使JAVA进程被kill呢?
Java手机应用程序的难题:产生OOM导致进程Crash
JVM本身常见故障:JVM或JDK本身的Bug导致进程Crash
被电脑操作系统OOM-Killer
该怎样去排查难题呢?
1.Java手机应用程序的难题:产生OOM导致进程Crash
这种情况关键在于产品研发编码品质,我碰到过的大约有2次。一般状况下,出現OOM出现异常,JVM的GC会开展收购,是不容易立即导致JVM进程撤出的。假如出現撤出的状况,那便是内存泄漏,因为运行内存占有愈来愈大,結果。。。。但是这类JVM的OOM导致的出现异常,非常好排查。排查流程以下:
Step1: 查询JVM主要参数 -XX:+HeapDumpOnOutOfMemoryError 和 -XX:HeapDumpPath=*/java.hprof
Step2: 依据HeapDumpPath特定的文件目录查询是不是造成dump文件;
Step3: 若存有dump文件,应用VisualVM这类可视化工具剖析就行等专用工具剖析就能;
2.JVM本身常见故障:JVM或JDK本身的Bug导致进程Crash
这种情况碰到一次,由于JDK本身BUG导致的。当JVM出現错误时,会转化成一个hs_err_pid_xxx.log那样的文件,该文件包括了导致jvm crash的关键信息内容,能够根据剖析该文件精准定位到导致crash的根本原因,进而改进以保证系统平稳。当出現crash时,该文件默认设置会转化成到工作中文件目录下,殊不知能够根据jvm主要参数-XX:ErrorFile特定转化成文件目录,eg:
-XX:ErrorFile=/var/log/hs_err_pid.log
然依据错误,能够进到Java BUG dataBase库中来搜索相匹配的BUG:
https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8134389
被电脑操作系统OOM-Killer
这种情况也碰到过一次。Linux 内核有一个体制叫OOM killer(Out-Of-Memory killer),该体制会网络监控这些占有运行内存过大,特别是在是一瞬间迅速耗费很多运行内存的进程,为了避免运行内存耗光而内核会把该进程干掉。能够去/var/log/messages里翻系统软件出错系统日志,实行以下指令:
什么缘故会导致JAVA进程被kill呢
或许,你还可以去内核系统日志里面查寻。有时候Linux系统软件或是系统软件上运作的java或是其他进程,会产生一些无缘无故的难题,例如忽然挂了了,例如忽然重新启动这些。在手机软件上找不着存在的问题,这时人们应当猜疑硬件设备或是内核的难题,这时人们就能够实行 dmesg | grep java 指令来查询:
彻底是可以看内核对进程做对实际操作。
小结
对左右出现异常出現排查的排查次序一般是:Java手机应用程序的难题 -> JVM本身常见故障 -> 被电脑操作系统OOM-Killer。
TOP