일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- MariaDB
- https
- 인증서
- mount
- CentOS
- firewall
- haproxy
- haproxy.cfg
- HLS
- docker
- 8443
- vsftpd
- Tomcat
- phpmyadmin
- docker-compose
- db
- ubuntu
- 도커
- nginx
- centos7
- 방화벽
- youtube-dl
- iptables
- YouTube
- SSL
- Cent
- letsencrypt
- Maria
- mysql
- yum
- Today
- Total
개발자의뇌
Too many open files 에러, 소켓 제한 늘리기 본문
톰캣에서 빈번한 로그성 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 |