今天测试环境的应用出现一直处理请求状态中
1.请求首页无响应,一直处理请求状态
2.使用top查询了进程情况,没有发现什么异常
3.df命令查询了磁盘空间,也是足够的
3.于是用netstat 命令查看了当前tcp链接的情况
netstat -na | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
LISTEN 2
CLOSE_WAIT 23 # 非常异常
TIME_WAIT 1
发现绝大部份的链接处于 CLOSE_WAIT 状态,这是非常不可思议情况。然后用 netstat -an 命令进行了检查
[root@my_centos chain]# netstat -anlp|grep 8015
tcp 12 0 0.0.0.0:8015 0.0.0.0:* LISTEN 27661/java
tcp 601 0 11.647.16.43:8015 173.230.269.152:20102 CLOSE_WAIT -
tcp 1 0 11.647.16.43:8015 173.230.269.152:12350 CLOSE_WAIT -
tcp 510 0 11.647.16.43:8015 173.230.269.152:15800 CLOSE_WAIT -
tcp 510 0 11.647.16.43:8015 173.230.269.152:4378 CLOSE_WAIT -
tcp 631 0 11.647.16.43:8015 173.230.269.152:27830 CLOSE_WAIT 27661/java
tcp 601 0 11.647.16.43:8015 173.230.269.152:3003 CLOSE_WAIT -
tcp 536 0 11.647.16.43:8015 173.230.269.152:6178 CLOSE_WAIT -
tcp 1 0 11.647.16.43:8015 173.230.269.152:29755 CLOSE_WAIT -
tcp 1 0 11.647.16.43:8015 173.230.269.152:23351 CLOSE_WAIT -
tcp 586 0 11.647.16.43:8015 173.230.269.152:27553 CLOSE_WAIT -
tcp 430 0 11.647.16.43:8015 173.230.269.152:10770 ESTABLISHED -
tcp 509 0 11.647.16.43:8015 173.230.269.152:13363 ESTABLISHED -
大量的CLOSE_WAIT
CLOSED 表示socket连接没被使用。 LISTENING 表示正在监听进入的连接。 SYN_SENT 表示正在试着建立连接。 SYN_RECEIVED 进行连接初始同步。 ESTABLISHED 表示连接已被建立。 CLOSE_WAIT 表示远程计算器关闭连接,正在等待socket连接的关闭。 FIN_WAIT_1 表示socket连接关闭,正在关闭连接。 CLOSING 先关闭本地socket连接,然后关闭远程socket连接,最后等待确认信息。 LAST_ACK 远程计算器关闭后,等待确认信号。 FIN_WAIT_2 socket连接关闭后,等待来自远程计算器的关闭信号。 TIME_WAIT 连接关闭后,等待远程计算器关闭重发
使用tcp抓包工具
tcpdump -n port 8015
分析原因:主要是客户端有太多端开的连接,而没有响应给服务端。客户端的代码没有设置请求超时和连接超时的配置,客户端未使用连接池。修改代码后,测试,没有再出现上面的问题。
网友评论