Linux에서 높은 동시 socket 최대 연결 수 제한, tcp 기본 1024개 연결 해결
3202 단어 java 개발 걸음걸이 캠프
[18-11-9 12:10:59:156 CST] 0000014b SystemOut O 2018-11-09 12:10:59 156 [ERROR][Heal-Session-Thread][com.google.code.yanf4j.core.impl.AbstractController] SessionMonitor connect error java.net.SocketException: 파일을 너무 많이 열었습니다.nio.ch.Net.socket0(Native Method) at sun.nio.ch.Net.socket(Net.java:529) at sun.nio.ch.Net.socket(Net.java:512) at sun.nio.ch.SocketChannelImpl.(SocketChannelImpl.java:122) at sun.nio.ch.SelectorProviderImpl.openSocketChannel(SelectorProviderImpl.java:73) at java.nio.channels.SocketChannel.open(SocketChannel.java:154) at net.rubyeye.xmemcached.impl.MemcachedConnector.connect(MemcachedConnector.java:508) at net.rubyeye.xmemcached.impl.MemcachedConnector$SessionMonitor.run(MemcachedConnector.java:127)
나중에 서버 측에서 설정한 socket의 수량이 충분하지 않은 것을 발견했습니다. linux는 기본적으로 1024개의 연결 요청만 허용합니다.인터넷 관련 문서를 참고하였으니 이 값을 좀 크게 설정하면 된다.
, linux 시스템의 기본 ulimit는 1024명의 액세스 사용자가 가장 많이 열 수 있는 프로그램 수입니다.일반 포트 (즉, 하나의 프로세스) 의 최대 연결이 2 인 16차방 65536
이 명령을 통해 ulimit-n은 기본값이 1024인 것을 볼 수 있습니다
전역 파일 보기 핸들 수 제한 (시스템 지원 최대치)cat/proc/sys/fs/file-max 프로세스 파일 보기 핸들 수 제한 ulimit-n
* soft nofile 65536
* hard nofile 65536
session required/lib/security/pam_limits.so
64bit 시스템이라면 다음과 같이 해야 합니다.
session required/lib64/security/pam_limits.so
net.ipv4.ip_local_port_range = 1024 65535
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.core.netdev_max_backlog = 30000
net.ipv4.tcp_no_metrics_save=1
net.core.somaxconn = 262144
net.ipv4.tcp_syncookies = 0
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
fs.file-max=1000000
/sbin/sysctl -p /etc/sysctl.conf
/sbin/sysctl -w net.ipv4.route.flush=1
echo ulimit -HSn 65536 >> /etc/rc.local
echo ulimit -HSn 65536 >>/root/.bash_profile
ulimit -HSn 65536
수정을 통해 tcp는 65536개의 연결에 도달할 수 있습니다. 전혀 문제가 없습니다.
이 명령을 통해 ulimit-n을 볼 수 있습니다. 값이 65536으로 바뀌었습니다. 즉, 현재 최대 65536개의 tcpsocket 연결을 지원합니다.
현재 서버 명령에 몇 개의 TCP가 연결되어 있는지 확인하십시오.
netstat -antp |grep -i est |wc -l
netstat에 대해서는 다음을 참조하십시오.
Linux netstat 명령 상세 정보