실행 중인 컨테이너 외부에서 메모리 덤프를 생성하는 방법

실행 중인 컨테이너 외부에서 메모리 덤프를 생성하는 방법

컨테이너 내에서 .net 서비스를 실행하고 있습니다. 컨테이너 내에서 이 서비스의 메모리 소비가 컨테이너에 설정된 한도까지 점차적으로 증가하고 임계값 한도에 도달한 후 컨테이너가 종료되는 것을 관찰했습니다. 추가 디버깅을 위해 컨테이너 외부에 머무르면서 컨테이너 내부에 .net 서비스의 메모리 덤프를 생성하려고 합니다. 내가 할 수 있을까? 정책에서 허용하지 않기 때문에 타사 소프트웨어를 설치하지 않았습니다.

현재 호스트 세부정보는 다음과 같습니다.

NAME="Ubuntu"
VERSION="16.04.6 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.6 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"

하지만 이미 Ulimit호스트 컴퓨터에 설치했습니다. Ulimit를 사용해 보았지만 성공하지 못했습니다.

답변1

알아낸 결과, 컨테이너 외부에서 컨테이너의 코어 슬롯을 생성하거나 GNU Debugger사용 했는데,gdb

  1. "sudo docker ps -a | grep service_container_name"을 사용하여 컨테이너 ID를 가져옵니다.
  2. "sudo dockerspect [컨테이너 ID] | more"를 사용하여 상위 PID 가져오기
  3. "pstree -pg [상위 프로세스 pid]" 하위 프로세스 PID 가져오기
  4. "sudo ps -aux | grep [하위 프로세스 pid]"
  5. "sudo gcore PID"

관련 정보