개발/ETC
[ error ] Too many open files
쩨이엠
2020. 7. 12. 10:13
728x90
반응형
서버 로그가 겁나 많이 찍히길래 놀래서 들어가봤더니 Too many open files라는 IOException이 발생하고 있었다
2020-07-10_01:55:42.942 ERROR [http-nio-8200-Acceptor] [org.apache.tomcat.util.net.Acceptor:175] ::: Socket accept failed
java.io.IOException: Too many open files
at java.base/sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
at java.base/sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:533)
at java.base/sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:285)
at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:461)
at org.apache.tomcat.util.net.NioEndpoint.serverSocketAccept(NioEndpoint.java:73)
at org.apache.tomcat.util.net.Acceptor.run(Acceptor.java:95)
at java.base/java.lang.Thread.run(Thread.java:834)
그러더니 맘대로 셧다운 해버림
.. 왜그러는데....... 왜 맘대로 셧다운하는데.......
찾아보니 OS에 요청할 수 있는 리소스의 limit을 넘어갔을 때 나오는 에러라고 한다
해결방법은 limit를 늘려주면 된다
Hn -> Hard limit
Sn -> Soft limit
실제 서버의 Hn과 Sn을 조회해본다
$ ulimit -Hn
4096
$ ulimit -Sn
1024
늘리기 위해서는 /etc/security/limits.conf를 변경해야한다
이 때 주의할 점은 /proc/sys/fs/file-max의 숫자보다 크게 설정하면 문제가 생길 수 있다고 하니 이것보다는 작게 설정할 것
$ cat /proc/sys/fs/file-max
96460
$ sudo vi /etc/security/limits.conf
/etc/security/limits.conf 맨 밑의 숫자를 변경한다
...
root hard nofile 50000
root soft nofile 50000
...
그리고 저장
source /etc/security/limits.conf 혹은 logout했다가 다시 login을 해준다
[ec2-user@ip-172-31-34-156 ~]$ ulimit -Hn
50000
[ec2-user@ip-172-31-34-156 ~]$ ulimit -Sn
50000
현재 돌아가고 있는 서비스도 재기동 해주거나 limit을 바꿔준다
$ ps -ef | grep iot
user 6276 6246 0 01:54 pts/0 00:00:00 grep --color=auto iot
root 29160 1 0 Jul10 ? 00:24:21 java -Dspring.profiles.active=dev -server -jar iot.jar
29160 pid를 확인 한 후 limit을 변경한다
혹시 모르니 조회부터
$ sudo prlimit --nofile --output RESOURCE,SOFT,HARD --pid 29160
RESOURCE SOFT HARD
NOFILE 4096 4096
변경
$ sudo prlimit --nofile=50000 --pid=29160
다시 확인
$ sudo prlimit --nofile --output RESOURCE,SOFT,HARD --pid 29160
RESOURCE SOFT HARD
NOFILE 50000 50000
728x90
반응형