大量close_wait以及调用ip地址错误获取方法引发的故障

记录一下这几天帮助兄弟项目组解决的几个问题

工程:网关服务器,业务逻辑少,操作不费时
问题:大量的Close_wait,访问速度较慢

分析&解决:
1、close_wait是TCP/IP协议中被动关闭方收到Fin后没有发送Fin导致
项目采用了mina框架,服务器被动关闭时会生成一个异常,调用exceptionCaught()方法,
在该方法中,服务器调用关闭方法session.close(false);false的意思是先发送数据,等数据 发送完了再关闭。通常情况下这是一个正常的流程,但是在高并发访问的情况下,可能生成大量Close_wait。如果情况允许的话,把false改成true就好了。通常情况下,改成true是没有问题的。

2、项目中获取ip的方法有问题:
  ip = ((InetSocketAddress)(session.getRemoteAddress())).getHostName();

此方法会先通过域名服务器获取远程客户段的域名,域名无法获得的情况下再获取ip,在域名服务器不稳定的情况下,通常耗时好几百毫秒。如果没有必要的话,可以将这个代码直接修改为:
	InetSocketAddress accountAddress = (InetSocketAddress) session
.getRemoteAddress();

String accountIp = accountAddress.getAddress().getHostAddress();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值