
768 worker_connections are not enough
위 오류는 Ubuntu 22.04 LTS 버전으로 nginx 를 설치시 기본 워커의 연결가능한 개수가 768개로 지정되어 있기 때문에 워커에 연결되는 수가 많아 질 경우 발생하는 오류이다.
필자는 아래와 같은 방법으로 해결했으며, 서비스와 PC스펙에 따라서 처리하는 방법은 달라질 수 있겠다.
sudo vi /etc/nginx/nginx.conf
events {
# 기존 768이라고 되어있던 부분을 수정해준다.
# worker_connections 768;
worker_connections 2048;
}
sudo service nginx restart
설정 방법은 크게 세가지로 나뉜다.
OS 설정 변경
아래 부분을 추가 후 저장한다. 현재 서비스에는 * 로 지정을 해 두었다.
sudo vi /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
# 또는
www-data soft nofile 65535
www-data hard nofile 65535
-- 위와 같이 하니 서버가 버티질 못하였다.
nginx soft nofile 50000
nginx hard nofile 80000
root soft nofile unlimited
root hard nofile unlimited
www-data soft nofile unlimited
www-data hard nofile unlimited
-- 위와 같이 다시 설정을 다시 진행 함.
# 세션초기화
exec bash
# 또는
exec zsh
PHP-FPM 설정 파일 변경
[error] 1170#1170: *4604237 connect() to unix:/run/php/php8.1-fpm.sock failed (11: Resource temporarily unavailable) while connecting to upstream
위와 같은 오류가 어느날 발생하기 시작함.
pm.max_children 수정 : www.conf 파일에서 pm.max_children 값을 조정하여 동시에 처리할 수 있는 PHP-FPM 프로세스의 수를 늘립니다.
vi /etc/php/8.1/fpm/pool.d/www.conf
# 상태 분류 : static(정적), dynamic(동적), ondemand(요청에 따른)
pm = static #static은 최대치로 자동 설정
pm.max_children = 50
# pm.max_children 는 현재 운영중인 서버의 여유메모리와, FPM의 평균메모리에 여유분을 5~6Mb 더 주고 나눠서 계산한다.
# 평균메모리 계산
# ps --no-headers -o "rss,cmd" -C php-fpm8.1 | awk '{ sum+=$1 } END { printf ("%d%sn", sum/NR/1024,"M") }'
H/W 설정 변경
해당 부분은 현재 서비스되고 있는 환경에 맞게 스팩을 늘이면 될 것이다.
필자의 서버는 현재 VM(Hyper-V)서버로 운영중이며, 동시에 여러 서비스가 운영될 예정임으로 넋넋하게 세팅을 해 두었다.
Nginx 설정 변경
nginx 설정에서 worker_rlimit_nofile 를 수정해서 프로세스가 가질 수 있는 FD수를 제한 할 수 있습니다.
위 방법은 도입해 보지 않았으므로, 이 글에서는 다루지 않기로 하겠습니다.