os/Linux
process max open files with systemd
Jacob_baek
2021. 11. 24. 19:48
/etc/security/limits.conf 내에 nofile 을 변경했음에도 특정 프로세스는 적용이 안된것을 보게되어
이에 대해 확인한 사항을 정리한다.
이슈 확인
아래와 같이 ulimit으로 확인한 max open files 가 65535임에도
[root@localhost ~]# ulimit -n
65535
systemd에 의해 실행되는 process의 limits은 다른 값을 출력하는것을 확인하였다.
[root@localhost ~]# cat /proc/11223/limits | grep "open file"
Max open files 1024 4096 files
분석결과
systemd는 기본적으로 기본값을 따로 가지고 있고 해당 값이 적용되는것으로 보인다.
$ sudo systemctl show -p DefaultLimitNOFILE
DefaultLimitNOFILE=4096
그렇다면 systemd는 별도로 limits를 관리하는걸까?
아래 bugzilla에 나와있듯이 systemd는 global limits를 무시하고 자체적으로 관리하게 된다.
해결방안
하여 다음과 같은 line이 systemd 의 service 파일에 들어가야한다.
다음과 같은 경로에 /etc/systemd/system/xxxxxxx.service (경로는 각 service 마다 다르니 systemctl status xxx로 확인해서 변경하자.)
[Service]
LimitNOFILE=65535
LimitNPROC=65535
...
물론 이를 변경하고 daemon-reload를 하고 restart를 진행하면 원하는 limits가 적용된다.
systemctl daemon-reload
systemctl restart XXXXXX
참고사항
참고로 Rocky Linux에서는 default value를 어떻게 가지는지 확인해보면
[rocky@localhost ~]$ systemctl show -p DefaultLimitNOFILE
DefaultLimitNOFILE=262144
default value가 올라가 있는것을 확인할 수 있다.