본문 바로가기

기타

[uWSGI] max-requests 와 min-worker-lifetime

반응형

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

반응형