개발자의뇌

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

개발/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

'개발 > Linux' 카테고리의 다른 글

lvm2 mount error 해결  (0) 2019.07.10
CentOS7 타임존 변경  (0) 2019.06.19
hosts.allow hosts.deny tcp wrapper 사용시 주의점  (0) 2019.06.05
CentOS 7 firewall 방화벽 사용 방법  (0) 2019.05.16
http 동시 접속자수 체크  (0) 2018.01.29
Comments