問題描述:
當Tomcat單節點大批量訪問時,會出現:Too many open files 報錯導致系統卡死或者進程直接關閉,從而影響業務。
問題原因:
進程在請求打開一個文件,實際上就是在請求句柄,但是現在進程打開的句柄已經達到了上限,已經無法打開新句柄了,所以導致系統無法在接入新的連接,或者目前連接的請求也將出現問題!
處理方法:
● 增加文件描述符
ulimit -n 65535
echo 65532 > /proc/sys/fs/file-max
● 優化TCP/IP設置
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout echo 60000 > /proc/sys/net/ipv4/tcp_keepalive_time echo 15000 > /proc/sys/net/ipv4/tcp_keepalive_intvl echo 0 > /proc/sys/net/ipv4/tcp_window_scaling
● 其他優化
#使用更多的本地端口
echo 1024 25000 > /proc/sys/net/ipv4/ip_local_port_range
#增加更多的socket buffer內存(參考)
echo 2621143 > /proc/sys/net/core/rmem_max
echo 262143 > /proc/sys/net/core/rmem_default
echo 4096 131072 262143 > /proc/sys/net/ipv4/tcp_rmem
echo 4096 13107262143 > /proc/sys/net/ipv4/tcp_wmem
#增加運行期所需的shm內存(參考)
echo 67108864 > /proc/sys/kernel/shmmax echo 16777216 > /proc/sys/net/core/rmem_max echo 16777216 >
/proc/sys/net/core/wmem_default echo 16777216 >
/proc/sys/net/core/wmem_max echo 4096 > /proc/sys/net/core/somaxconn
echo 262143 > /proc/sys/net/core/rmem_default
#增加用戶最大打開文件數(如果本身系統的數字就比這個要大就不用修改了)
#---------------修改/etc/security/limits.conf文件---------- soft nofile 32768
*hard nofile 32768
###重啓後用戶的最大打開文件數就變成 32768 了,當然你也可以看情況再加大。
總結:
實際情況需要根據機器的具體配置進行調整,不能直接生搬硬套,不然可能會適得其反!建議訪問量較大的應用盡量使用集羣方式部署!