Sandcorp샌드코프 · 웹·AI 제품 개발

새 프로젝트 받는 중 · 갱신 2026.11sandcorp.co.krGitHub

← 팁

메모리디버깅

운영 파이썬 프로세스 안을 재시작 없이 들여다보기 — sys.remote_exec

Python 3.14부터 살아 있는 프로세스에 스크립트를 주입해 세션 수, 객체 수, 할당자 상태를 볼 수 있다. 재시작하면 사라지는 문제를 그 자리에서 잡는다.

운영 서버에서만 메모리가 늘거나 연결이 쌓이는데, 재시작하면 증상이 사라져 원인을 볼 수가 없다. 진단 코드를 넣어 다시 배포하는 순간 재현 조건도 같이 날아간다.

Python 3.14부터는 sys.remote_exec(pid, script_path)로 살아 있는 파이썬 프로세스에 스크립트를 주입할 수 있다. 대상 프로세스는 다음 안전한 지점에서 그 스크립트를 자기 안에서 실행한다. 표준 출력은 대상 프로세스 쪽이라 보기 어려우니 결과는 파일로 쓰게 한다.

# /tmp/probe.py — 대상 프로세스 안에서 실행된다
import collections
import gc
import json

counts = collections.Counter(type(o).__name__ for o in gc.get_objects())
with open("/tmp/probe-result.json", "w") as f:
    json.dump({"top_types": counts.most_common(20)}, f)
docker exec --privileged app \
  python -c "import sys; sys.remote_exec(1, '/tmp/probe.py')"
docker exec app cat /tmp/probe-result.json

컨테이너에서는 ptrace 권한이 필요해 --privileged(또는 SYS_PTRACE)로 실행한다. 볼 만한 것: 살아 있는 세션·연결 수, 타입별 객체 수, 의심 객체의 gc.get_referrers(), glibc mallinfo2().

주의할 점: 탐침 코드가 만든 객체와 할당도 측정에 섞인다. 탐침은 가볍게 쓰고 여러 번 되풀이해 비교한다. 3.14 이전 버전이라면 py-spy dump로 스택이라도 본다.

문의 →