개발 팁
프로젝트와 상관없이 다시 쓸 수 있는 요령을 문제·원인·해법·코드 예시로 짧게 적습니다.
- 운영 파이썬 프로세스 안을 재시작 없이 들여다보기 — sys.remote_exec →Python 3.14부터 살아 있는 프로세스에 스크립트를 주입해 세션 수, 객체 수, 할당자 상태를 볼 수 있다. 재시작하면 사라지는 문제를 그 자리에서 잡는다.
- 파이썬 서버가 빈 메모리를 돌려주게 하는 glibc 설정 세 가지 →MALLOC_ARENA_MAX로 arena 수를 줄이고, mmap·trim 기준을 고정하고, 큰 데이터를 내린 뒤와 주기적으로 malloc_trim을 부른다.
- RSS가 줄지 않을 때는 누수인지 할당자 보유인지 먼저 가른다 →타입별 객체 수가 안정적이면 누수가 아니라 할당자가 빈 메모리를 들고 있는 것이다. 객체 수 → mallinfo2 → malloc_trim 순서로 나눠 본다.
- 오래 도는 루프의 지역 변수는 GC 루트다 →while True 루프는 다음 메시지를 기다리는 동안에도 마지막으로 다룬 객체를 붙잡는다. 한 번의 처리를 함수로 빼면 참조가 함수 안에서 끝난다.
- 연결 정리는 finally에서 「어떻게 끝나든 정확히 한 번」 →프레임워크의 disconnect 콜백은 예외로 끝나면 불리지 않을 수 있다. 진입점을 try/finally로 감싸고 두 번 정리하지 않게 표시를 둔다.
- 문서가 닫힐 때 malloc_trim으로 빈 메모리를 OS에 돌려준다 →glibc는 free한 메모리를 바로 OS에 돌려주지 않는다. 큰 객체(문서·방)가 닫힐 때 간격을 두고 malloc_trim(0)을 부르면 RSS 355MB가 229MB로 줄었다.