개발/Linux

Too many open files 에러, 소켓 제한 늘리기

devbrain 2019. 6. 7. 10:41

톰캣에서 빈번한 로그성 db 처리에 쓰레드를 마구 남발하였더니 

open files 에러가 발생하여 시스템이 정지됨.

리눅스 설치시 매번 늘려놓긴 하지만 가끔 잊는 경우가 있음.

 

 

# open file 확인
ulimit -a

# 시스템 전체의 limit 확인하기 
# open files 같은 수치 변경시 시스템 limit 보다 작아야 한다. 
cat /proc/sys/fs/file-max 



# open files 수치 영구 적용
# 최대값은 131072 아래로 지정하자
# 너무 큰 값은  파일 닫을 때 데몬이 시간을 소비한다.

# file-max 값을 확인하여 넘지 않도록 하자

# 이 값은 시스템을 재시작해야 반영된다.
vi /etc/security/limits.conf
root soft nofile 131072
root hard nofile 131072

 


# 실행되어 있는 프로세스의 limit 변경하기
# 변경 원하는 프로세스 pid 얻기
ps -ef | grep java
1234

 

 


# 프로세스의 리소스 제한 확인하기
prlimit --nofile --output RESOURCE,SOFT,HARD --pid 1234
RESOURCE SOFT HARD
NOFILE   4096 4096

 

 


# 프로세스의 리소스 제한 변경하기
prlimit --nofile=131072 --pid=1234


# CentOS7 에서 tomcat8 NOFILE 반영되지 않을 때

mkdir -p /etc/systemd/system/tomcat.service.d/

vi /etc/systemd/system/tomcat.service.d/limits.conf

[Service]

LimitNOFILE=131072

 

systemctl daemon-reload

 

systemctl restart tomca

 

cat /proc/`pidof java`/limits

 

 

# nginx에서 error.log에 Too many open files 찍힐 때

echo 10 > /proc/sys/net/ipv4/tcp_keepalive_time

# nginx.conf 의 server{ 에 아래 추가
keepalive_timeout 5;

 

# 영구 적용

vi /etc/sysctl.conf

net.ipv4.tcp_keepalive_time=10