作为该领域经验丰富的资深人士,我开启了浓缩咖啡机,朝着解决方案迈出了正确的第一步。 喝了一杯咖啡,我有能力解决这些问题。 首先怀疑的是,应用程序本身在崩溃之前似乎表现得完全正常。 没有错误,没有警告标志,在应用程序日志中没有任何可疑的痕迹。
我们已经进行的监视已注意到该进程已终止,并且已经重新启动了崩溃的服务。 但是由于我的血液中已经含有咖啡因,所以我开始收集更多证据。 30分钟后,我发现自己盯着/var/log/kern.log中的以下内容:
Jun 4 07:41:59 plumbr kernel: [70667120.897649] Out of memory: Kill process 29957 (java) score 366 or sacrifice child Jun 4 07:41:59 plumbr kernel: [70667120.897701] Killed process 29957 (java) total-vm:2532680kB, anon-rss:1416508kB, file-rss:0kB
显然,我们成为了Linux内核内部的受害者。 众所周知,Linux是由一堆邪恶的生物(称为“守护程序 ”)构建的。 这些守护程序由多个内核作业管理,其中一项似乎特别危险。 显然,所有现代Linux内核都具有一种称为“内存不足杀手 ”的内置机制,该机制可以在极低内存条件下消除您的进程。 当检测到这种情况时,将启动杀手并选择要杀死的进程。 使用一组对所有过程进行评分的启发式方法选择目标,然后选择得分最差的目标来杀死目标。