성능 테스트 중 Docker 컨테이너가 종료됨

성능 테스트 중 Docker 컨테이너가 종료됨

처리 중에 도커 컨테이너가 종료되는 이유를 이해해야 합니다.

간략한 배경:

RH 시스템에서 성능 테스트를 실행 중입니다. (머신에는 64GB RAM, 16개의 CPU가 있습니다.) 약 20시간 동안 실행한 후 컨테이너는 커널에 의해 종료됩니다.

컨테이너 내에서 Java를 실행 중이며 힙 제한이 20GB입니다. (Elasticsearch로 파일을 인덱싱하는 것은 힘든 과정입니다.)

또한 ps-eF를 사용하여 docker 내 메모리 소비를 모니터링하고 Glowroot를 사용하여 힙 크기를 모니터링합니다.

최대 힙 크기프로세스가 종료되기 전에는 6.7GB였습니다.

ps-eF보여주다RSS16977356(1.7GB)입니다.

dmesg 출력은 다음과 같습니다.

[Mon Nov 12 08:44:10 2018] [ pid ]   uid  tgid total_vm      rss nr_ptes swapents oom_score_adj name
[Mon Nov 12 08:44:11 2018] [ 3406]     0  3406  7811475  4240564    8512        0             0 java
[Mon Nov 12 08:44:11 2018] Out of memory: Kill process 3406 (java) score 264 or sacrifice child
[Mon Nov 12 08:44:11 2018] Killed process 3406 (java) total-vm:31245900kB, anon-rss:16962256kB, file-rss:0kB, shmem-rss:0kB

내가 올바르게 이해했다면총 가상 머신처리되고 사용된 모든 RAM을 나타냅니다.익명 RSS프로세스가 종료되면서. 이는 내 컴퓨터에 25GB의 여유 메모리가 있어야 함을 의미합니다.

답변1

메모리

메모리 부족의 위험 이해

실행 중인 컨테이너가 너무 많은 호스트 메모리를 소비하지 않도록 하는 것이 중요합니다. Linux 호스트에서 커널은 중요한 시스템 기능을 수행하는 데 메모리가 충분하지 않다는 것을 감지하면 OOME(Out of Memory Exception)을 발생시키고 메모리를 확보하기 위해 프로세스를 종료하기 시작합니다. Docker 및 기타 중요한 애플리케이션을 포함한 모든 프로세스가 종료됩니다. 잘못된 프로세스가 종료되면 전체 시스템이 중단될 수 있습니다.

(...)

메모리에 대한 컨테이너 액세스 제한

-m or --memory= The maximum amount of memory the container can use. If you set this option, the minimum allowed value is 4m (4 megabyte).

원천:

https://docs.docker.com/config/containers/resource_constraints/#memory

관련 정보