쩨이엠 개발 블로그

[ error ] Too many open files 본문

개발/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
반응형
Comments