Ubuntu 20.x 서버에서 Java 프로세스를 종료시키는 일부 OOM Killer 문제가 발생했습니다. 메모리 누수를 찾을 수 없습니다.
그런데 오늘 아침, 우리는 짧은 시간에 두 번의 OOM 킬이라는 흔치 않은 선물을 받았습니다. 첫 번째는 9시 33분 39초에 발생했고 두 번째는 9시 44분 14초에 발생했습니다. 다음은 이러한 이벤트 중 CPU 및 메모리 사용률입니다.
그런데 정말 이상한 점은 11분도 채 지나지 않아 첫 번째 프로세스의 pid가 두 번째 프로세스의 pid보다 약 412,000 적다는 것입니다. 1328년이었고 그 다음에는 413972년이었습니다.
그래서 우리는 Java 프로세스 외부의 무언가를 의심하기 시작했습니다. 우리는 Postgres, Caddy 및 Watchtower(Docker Hub 감시자)뿐만 아니라 Java/Spring/RxJava 다중 스레드 애플리케이션을 실행하는 4개의 Docker 컨테이너를 보유하고 있습니다.
하지만 연속적인 룸킬의 pid는 중요한 단서인 것 같습니다.
악성 행위자가 635초 안에 412,644개의 프로세스를 생성하고 종료할 수 있다고 생각하는 것이 가능합니까? 이는 초당 649.8개의 프로세스입니다. 맬웨어 외에 Linux에서 이 작업을 수행할 수 있는 다른 작업은 무엇입니까? Caddy나 Postgres가 이런 일을 일으킬 수 있나요? CPU와 메모리가 이러한 활동을 반영하지 않을까요? Java에서 사용되는 스레딩이 이 문제를 일으킬 수 있습니까? DDoS 공격이 발생하더라도 캐디가 이토록 많은 프로세스를 감당할 수 있을까요? 그렇게 짧은 시간 내에 pid가 너무 멀리 떨어져 있는 것에 대한 다른 가능한 설명이 있습니까?
우리가 놓쳤을 수도 있는 잠재적으로 유용한 로깅이 머신에 있습니까?