Контейнер Docker исчез и работа слишком медленная - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть многопоточное задание на обработку данных, которое выполняется примерно за 5 часов (тот же код) на экземпляре EC2.Но когда он запускается в док-контейнере (я настроил его на 7 ГБ ОЗУ перед созданием контейнера), задание медленно выполняется в док-контейнере в течение примерно 12 часов, а затем док-контейнер исчезает.Как мы можем это исправить?Почему работа в док-контейнере должна быть очень медленной?Процессорная обработка была очень-очень медленной в док-контейнере, а не только в сети.Медленный сетевой ввод / вывод - это нормально.Но мне интересно, что может быть причиной слишком медленной обработки ЦП по сравнению с экземпляром EC2.Также, где я могу найти подробную трассировку того, что произошло в операционной системе хоста, что привело к смерти контейнера Docker.

**docker logs <container_id>**
19-Feb-2019 22:49:42.098 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
19-Feb-2019 22:49:42.105 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
19-Feb-2019 22:49:42.106 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 27468 ms
19-Feb-2019 22:55:12.122 INFO [localhost-startStop-2] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/usr/local/tomcat/webapps/logging]
19-Feb-2019 22:55:12.154 INFO [localhost-startStop-2] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory [/usr/local/tomcat/webapps/logging] has finished in [32] ms
searchResourcePath=[null], isSearchResourceAvailable=[false]
knowledgeCommonResourcePath=[null], isKnowledgeCommonResourceAvailable=[false]
Load language resource fail...
blah blah blah some application log
bash: line 1:    10 Killed                  /usr/local/tomcat/bin/catalina.sh run
Error in Tomcat run: 137 ... failed!

Вверх по выполнению dmesg -T |grep docker, это то, что я вижу.Что такое 500 Dockerd?-500 докер-прокси?Как интерпретировать то, что здесь, под?

[Tue Feb 19 14:49:04 2019] docker0: port 1(vethc30f313) entered blocking state
[Tue Feb 19 14:49:04 2019] docker0: port 1(vethc30f313) entered forwarding state
[Tue Feb 19 14:49:04 2019] docker0: port 1(vethc30f313) entered disabled state
[Tue Feb 19 14:49:07 2019] docker0: port 1(vethc30f313) entered blocking state
[Tue Feb 19 14:49:07 2019] docker0: port 1(vethc30f313) entered forwarding state
**[Wed Feb 20 04:09:23 2019] [10510]     0 10510   197835    12301     111        0          -500 dockerd
[Wed Feb 20 04:09:23 2019] [11241]     0 11241    84733     5434      53        0             0 docker
[Wed Feb 20 04:09:23 2019] [11297]     0 11297    29279      292      18        0          -500 docker-proxy**
[Wed Feb 20 04:09:30 2019] docker0: port 1(vethc30f313) entered disabled state
[Wed Feb 20 04:09:30 2019] docker0: port 1(vethc30f313) entered disabled state
[Wed Feb 20 04:09:30 2019] docker0: port 1(vethc30f313) entered disabled state

В 04:09:23, сверху показано 500 dockerd и т. Д., А снизу в 04:09:24 это убивает 11369 счет процесса Java и т. Д.. Что это значит?Разве это не убило процесс докера?Это убило процесс Java, работающий внутри контейнера Docker?

demsg -T |grep java ср фев 20 04:09:23 2019] [3281] 503 3281 654479 38824 145 0 0 java [ср фев 20 04:09:23 2019] [11369] 0 11369 3253416 1757772 4385 0 0 java [ср фев 20 04: 09: 24 2019] Недостаточно памяти: процесс Kill 11369 (java) 914 или жертва ребенка [ср. 20 февраля 04:09:24 2019] Процесс Kill 11369 (java) total-vm: 13013664kB, anon-rss: 7031088kB,файл-rss: 0 кБ, shmem-rss: 0 кБ

1 Ответ

0 голосов
/ 20 февраля 2019

TL; DR вам нужно увеличить память на вашей виртуальной машине / хосте или уменьшить использование памяти вашим приложением.

ОС убивает Java, который работает внутри контейнера, потому что хост исчерпалобъем памяти.Когда процесс внутри контейнера умирает, сам контейнер переходит в состояние выхода.Эти неиспользуемые контейнеры отображаются с docker ps -a.

. По умолчанию докер не ограничивает ЦП или память контейнера.Вы можете добавить эти ограничения для контейнеров, и если ваш контейнер превысит пределы памяти контейнера, Docker уничтожит контейнер.Этот результат будет виден со статусом OOM при проверке остановленного контейнера.

Причина, по которой вы видите настройки линий Ethernet-500 в процессах докера, заключается в том, чтобы не допустить уничтожения операционной системой самой докера, когда у хоста заканчиваетсяобъем памяти.Вместо этого процесс внутри контейнера уничтожается, и вы можете настроить политику перезапуска в Docker для перезапуска этого контейнера.

Подробнее об ограничениях памяти и настройке показателя OOM для процессов контейнера можно узнать по адресу: https://docs.docker.com/engine/reference/run/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...