问题描述:
当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 了,当然你也可以看情况再加大。
总结:
实际情况需要根据机器的具体配置进行调整,不能直接生搬硬套,不然可能会适得其反!建议访问量较大的应用尽量使用集群方式部署!