Я использую сервер Ubuntu 18.04 с запущенными на нем контейнерами Docker (v20.10.12). У меня одновременно запущено около 5 контейнеров, и они потребляют около 1,5 ГБ памяти в обычном режиме, в то время как на моем сервере доступно 8 ГБ памяти. Один из этих 5 контейнеров каждые 18-24 часа теряет память, он потребляет всю оставшуюся память и занимает около 4-5 ГБ в swap, из-за чего загрузка моего процессора и диска резко возрастает до 100%, что в свою очередь приводит к появлению OOM killer и началу отбраковки процессов, и один из них — dockerd.
После того, как dockerd убит, я не могу найти журналы указанного контейнера, в котором произошла утечка памяти, поскольку единственные, которые у меня есть в файловой системе, относятся к контейнерам, которые были созданы после перезапуска dockerd. Так что я полностью в неведении относительно того, что на самом деле происходило в этом контейнере без журналов, и это именно то, что я пытаюсь найти.
Я выяснил, какой контейнер дал утечку grep VmPeak /proc/{PID}/status
, и получил PID с docker inspect -f '{{.State.Pid}}' {CONTAINER_ID}
, в котором в одном случае было указано пиковое использование памяти ~11 ГБ. Но когда я зашел /var/lib/docker/containers/
и проверил все папки, ни в одной из них не было журналов до фактического смахивания OOM killer и перезапуска dockerd. Также попытался посмотреть var/log/syslog
, и он показал мне только то, что OOM killer делает свое дело, а dockerd паникует с различными ошибками сети и брандмауэра. Если я не прав и мне следует глубже погрузиться в системный журнал, пожалуйста, дайте мне знать.
Мне не обязательно получать эти логи, некоторая помощь в настройке какого-то другого решения, которое сохранит логи в другом месте, чтобы я мог проверить их в следующий раз, когда он рухнет, также была бы очень полезна и, возможно, могла бы решить проблему. Но это не связано с рассматриваемой проблемой, поэтому я пойму, если это будет проигнорировано.