我正在運行 Ubuntu 18.04 伺服器,並在其上運行 Docker (v20.10.12) 容器。我一次運行大約 5 個容器,它們通常消耗大約 1.5GB 內存,而我的伺服器有 8GB 可用內存。這5 個容器之一每18-24 小時就會洩漏一次內存,它會消耗所有剩餘內存並佔用大約4-5GB 的交換空間,這使得我的CPU 和磁碟使用率飆升至100%,進而導致OOM殺手產生並開始剔除進程,其中之一就是 dockerd。
dockerd 被殺死後,我找不到所述存在記憶體洩漏的容器的日誌,因為檔案系統中唯一的日誌是 dockerd 重新啟動後產生的容器。因此,對於沒有日誌的容器中實際發生的情況,我完全一無所知,而這正是我想要找到的。
我找出了哪個容器洩漏了grep VmPeak /proc/{PID}/status
,並使用 獲取了 PID docker inspect -f '{{.State.Pid}}' {CONTAINER_ID}
,其中列出了一種情況下約 11GB 的峰值內存使用情況。但是,當我/var/lib/docker/containers/
檢查所有資料夾時,在實際的 OOM 殺手滑動和 dockerd 重新啟動時間之前沒有任何日誌。也嘗試查看var/log/syslog
,它只向我展示了 OOM 殺手在做它的事情,並且 dockerd 因各種網路和防火牆錯誤而恐慌。如果我錯了並且我應該深入研究系統日誌,請告訴我。
我不一定需要獲取這些日誌,一些幫助設置一些其他解決方案,將日誌保存在其他地方,以便我可以在下次崩潰時檢查它們也將非常有幫助,並且可能解決問題。但這與當前的問題無關,所以我理解是否會被忽略。