在 Ubuntu 20.x 服务器上,我们遇到了一些 OOM Killer 问题,它会杀死 Java 进程。我们一直无法发现任何内存泄漏。
但今天早上,我们得到了一份罕见的礼物,那就是短时间内两次击杀 oom。第一次发生在 9:33:39,第二次发生在 9:44:14。以下是这些事件发生期间的 CPU 和内存利用率。
但真正奇怪的是,不到 11 分钟后,第一个进程的 pid 比第二个进程的 pid 少了约 412,000。他们是 1328,然后是 413972。
所以我们开始怀疑Java进程之外的东西。我们有四个 docker 容器运行 Java/Spring/RxJava 高度多线程应用程序,以及 Postgres、Caddy 和 Watchtower(Docker Hub 观察程序)。
但连续 oom-kills 的 pid 看起来确实是一个重要的线索。
是否有可能认为某个流氓参与者可以在 635 秒的时间内生成并终止 412,644 个进程?即每秒 649.8 个进程。除了恶意软件之外,Linux 中还有什么可以做到这一点? Caddy 或 Postgres 可能导致这种情况发生吗? CPU 和内存不会反映这种活动吗? Java中使用的线程会导致这种情况吗?即使发生了 DDoS 攻击,Caddy 能解释那么多进程吗?对于 pid 在如此短的时间内相距如此之远,还有其他可能的解释吗?
机器上是否有我们可能错过的可能有用的日志记录?