uwsgi 는 설정에 따라 여러 개의 worker 프로세스로 동작한다. 이 과정에서 worker 프로세스의 memory leak 이 발생할 수 있다. 이러한 문제를 해결하기 위해서 특정 조건에 도달하면 프로세스를 삭제하고 재실행하는 설정이 있는데, 그 중 하나가 max-requests 이다. 이 글에서는 max-requests 에 대해서 정리한다.
1. max-requests
max-requests 는 이름 그대로 worker 프로세스가 처리할 요청의 최대개수를 설정한다. worker 프로세스는 요청을 처리하다가 요청의 개수가 max-requests 에 도달하면 해당 프로세스는 삭제되고 새로운 프로세스로 재실행된다. 이 과정을 통해서 해당 프로세스에 의한 memory leak 을 방지할 수 있다.
2. max-requests 설정방법
max-requests 는 uwsgi 설정파일에 값을 주어 설정하거나 명령어로 실행할 때 -R 옵션을 주어 설정할 수 있다.
아래는 1개의 worker 프로세스와 max-requests 값 1로 지정한 uwsgi.ini 파일이다. 이 설정을 기반으로 하면 하나의 요청을 처리할 때마다 worker 프로세스가 삭제되고 새로운 프로세스로 재실행된다.
[uwsgi]
chdir = /app/src
module = main:app
master = true
processes = 1
max-requests = 1
http-socket = :9090
vacuum = true
die-on-term = true
enable-threads = true
logto = /tmp/uwsgi.log
3. min-worker-lifetime
공식문서에서 max-requests 의 설명을 읽다보면 min-worker-lifetime 에 대해 설명하면서 주의하라는 내용이 나온다.
min-worker-lifetime 은 worker 프로세스의 최소 생존시간 설정으로 기본값은 60초로 설정되어 있다. 워커 프로세스는 생성되고 min-worker-lifetime 으로 설정된 시간 동안은 삭제되지 않는다. 이 설정으로 무분별한 프로세스 재시작으로 인한 성능 문제를 해결할 수 있다.
이 설정은 max-requests 보다 높은 우선순위를 가지고 있기 때문에 워커의 요청 개수가 max-requests 에 도달해도 min-worker-lifetime 동안에는 정상적으로 재시작되지 않을 수 있다.
[Reference]
- https://uwsgi-docs-additions.readthedocs.io/en/latest/Options.html#max-requests
- https://uwsgi-docs-additions.readthedocs.io/en/latest/Options.html#min-worker-lifetime
'기타' 카테고리의 다른 글
[RabbitMQ] RabbitMQ 개념 설명 (0) | 2025.05.13 |
---|---|
[nginx] ssl 인증서 적용 (0) | 2025.04.24 |
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 9. 웹 크롤러 설계 (0) | 2025.04.06 |
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 8. URL 단축기 설계 (0) | 2025.03.18 |
[PostgreSQL] DB 백업 - pg_dump (0) | 2025.03.17 |