由于系统中调用webservice,向http://p2p.xxxxx.com.cn发送了多次http请求,系统每隔一段时间会死机(静态文件都无法访问)系统每隔两个星期需要重启才能正常提供服务。
查询步骤如下:
ping p2p.xxxxx.com.cn
获取ip:218.92.221.xx
netstat -na |grep 218.92.221.xx |wc -l
输出:145
发现所有的182.92.8.1xx:33084 218.92.221.xx连接都是CLOSE_WAIT
用cat /proc/sys/net/ipv4/ip_local_port_range查看182.92.8.1xx这台服务器的端口范围:32768 61000
发现只有:28232端口,如果CLOSE_WAIT超过28232个,以后的http请求都会time_wait(没有响应,tomcat挂掉)。
于是问题找到了:
在服务器与客户端通信过程中,因服务器发生了socket未关导致的closed_wait发生,致使监听port打开的句柄数到了145个,且均处于close_wait的状态,最终造成配置的port被占满出现“Too many open files”,无法再进行通信。
close_wait状态出现的原因是被动关闭方未关闭socket造成。
查看对外提供的服务:netstat -na |grep LISTEN
用于统计当前各种状态的连接的数量的命令
---------------------------
#netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'