%EC%97%90%20%EB%8F%84%EB%8B%AC%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4.%20'ulimit-n'%EC%9D%84%20%ED%99%95%EC%9D%B8%ED%95%98%EA%B3%A0%20%EB%8B%A4%EC%8B%9C%20%EC%8B%9C%EC%9E%91%ED%95%98%EC%8B%AD%EC%8B%9C%EC%98%A4..png)
특수 LUA 필터를 적용하기 위해 haproxy를 컴파일했는데 이제 haproxy가 최대 파일 열기 제한에 계속 도달했습니다. 원활하게 실행되다가 갑자기 로그에 다음 메시지가 표시됩니다.
Proxy www-out reached process FD limit (maxsock=4026). Please check 'ulimit-n' and restart.
나는 haproxy에 대한 서비스 제한 파일을 생성하여 이 제한을 늘려 보았습니다.
cat /etc/systemd/system/haproxy.service.d/limits.conf
[Service]
LimitNOFILE=600000
haproxy를 시작하면 제한 파일이 로드됩니다.
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/haproxy.service.d
└─limits.conf
Active: active (running) since Wed 2021-08-11 15:07:08 CEST; 8s ago
Docs: man:haproxy(1)
file:/usr/share/doc/haproxy/configuration.txt.gz
Process: 25865 ExecStartPre=/usr/local/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS (code=exited, status=0/SUCCESS)
Main PID: 25867 (haproxy)
그러나 프로세스를 살펴보면 haproxy의 소프트 한계가 아닌 하드 한계만 변경하는 것으로 보입니다.
root 25867 0.1 0.0 141136 18264 ? Ss 15:07 0:00 /usr/local/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
haproxy 25869 0.1 0.0 1173536 12860 ? Sl 15:07 0:00 \_ /usr/local/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
test@test ~> cat /proc/25867/limits | grep "open"
Max open files 4168 600000 files
마지막으로 haproxy에 대한 정보
Build options :
TARGET = linux-glibc
CPU = generic
CC = cc
CFLAGS = -O2 -g -Wall -Wextra -Wdeclaration-after-statement -fwrapv -Wno-unused-label -Wno-sign-compare -Wno-unused-parameter -Wno-clobbered -Wno-missing-field-initializers -Wtype-limits -Wshift-negative-value -Wshift-overflow=2 -Wduplicated-cond -Wnull-dereference
OPTIONS = USE_PCRE=1 USE_OPENSSL=1 USE_LUA=1 USE_SYSTEMD=1
DEBUG =
Feature list : +EPOLL -KQUEUE +NETFILTER +PCRE -PCRE_JIT -PCRE2 -PCRE2_JIT +POLL +THREAD +BACKTRACE -STATIC_PCRE -STATIC_PCRE2 +TPROXY +LINUX_TPROXY +LINUX_SPLICE +LIBCRYPT +CRYPT_H +GETADDRINFO +OPENSSL +LUA +ACCEPT4 -CLOSEFROM -ZLIB +SLZ +CPU_AFFINITY +TFO +NS +DL +RT -DEVICEATLAS -51DEGREES -WURFL +SYSTEMD -OBSOLETE_LINKER +PRCTL +THREAD_DUMP -EVPORTS -OT -QUIC -PROMEX -MEMORY_PROFILING
Default settings :
bufsize = 16384, maxrewrite = 1024, maxpollevents = 200
Built with multi-threading support (MAX_THREADS=64, default=36).
Built with OpenSSL version : OpenSSL 1.1.1 11 Sep 2018
Running on OpenSSL version : OpenSSL 1.1.1 11 Sep 2018
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports : TLSv1.0 TLSv1.1 TLSv1.2 TLSv1.3
Built with Lua version : Lua 5.4.3
Built with network namespace support.
Built with libslz for stateless compression.
Compression algorithms supported : identity("identity"), deflate("deflate"), raw-deflate("deflate"), gzip("gzip")
Built with transparent proxy support using: IP_TRANSPARENT IPV6_TRANSPARENT IP_FREEBIND
Built with PCRE version : 8.39 2016-06-14
Running on PCRE version : 8.39 2016-06-14
PCRE library supports JIT : no (USE_PCRE_JIT not set)
Encrypted password support via crypt(3): yes
Built with gcc compiler version 7.5.0
답변1
나는 일반적으로 사용자별 하드 제한과 소프트 제한을 모두 조정할 수 있는 /etc/security/limits/limits.d에서 이러한 종류의 제한을 처리합니다. (구성 세부사항은 /etc/security/limits/limits.conf 내부의 주석을 확인하십시오). 이것이 systemd 내에 설정된 지시문과 어떻게 상호 작용하는지 모르겠습니다.