안녕하세요.
Nginx 서버에서 워드프레스 웹사이트 여러개를 운영하고 있습니다.
최근 스테깅 사이트에서 웹사이트를 수정하는 가운데 500 Internal Server Error 가 발생하는걸 보았습니다.
그래서 우선 에러 로그를 보니 아래와 같이 나와있고 Nginx 문제인것 같아, 리스타트를 하니 문제는 해결되었습니다만...
2022/03/07 19:43:41 [crit] 563445#563445: accept4() failed (24: Too many open files)
2022/03/07 19:43:42 [crit] 563445#563445: accept4() failed (24: Too many open files)
근본적인 문제를 해결하기 위해 찾아보았습니다만... 너무 많은 정보와 값이 오히려 혼란스럽게 만듭니다.
리스타트 후 제 서버를 확인해보니, 아래와 같은 값이 나와서
ulimit -Hn #hard limit
1048576
ulimit -Sn #soft limit
1024
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7581
max locked memory (kbytes, -l) 65536
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 7581
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
무작정 /etc/sysctl.conf에다가
fs.file-max = 70000
을 추가했습니다만... 이걸로 해결이 된걸까요?
어떤 튜토리얼은 보니 /etc/security/limits.conf 에서 소프트와 하드 값을 각각 따로 지정하는 것도 있던데,
이 작업도 해야되는걸까요...?
조언을 구하고 싶습니다. 감사합니다.
/etc/sysctl.conf
/etc/security/limits.conf 또는 /etc/security/limits.d/***.conf 파일 추가
최근 리눅스라면 nginx와 관련된 systemd 유닛파일에도 LimitNOFILE 설정을 추가해 주는 것이 좋습니다.
nginx.conf에도 worker_rlimit_nofile 설정을 추가할 수 있습니다.
여러 군데를 수정한다면 서로 충돌하지 않도록 일관성있는 값을 사용하는 것이 좋겠지요.
리눅스 튜닝값을 기본 상태 그대로 두고 서버 운영하면 안 되는 이유 중 하나지요.
연결 하나당 최소 3개의 file descriptor를 잡아먹는데 겨우 1024개로 누구 입에 붙여요...