关闭mina服务_Mina 解决请求后直接关闭连接 | 学步园

本文介绍了在遇到MINA服务导致的服务器TIME_WAIT过多问题时,如何通过设置MINA参数来优化。通过设置`setSoLinger(0)`,在调用close方法后,连接不再进入TIME_WAIT状态,从而有效减少负载。实践证明,这一调整能显著降低TIME_WAIT连接数,提升服务器性能。
摘要由CSDN通过智能技术生成

开场白:

Mina 是一个韩国人写的基本java NIO的一个高性能的传输框架,我们的搜索就是基本它作为一个搜索服务开放接口了。对于系统的TIME_WAIT过多,造成服务器的负载过高,这个问题我也不用多说了,这段时间发现搜索服务器上的TIME_WAIT过多,我们每天大约总处理70W左右的搜索请求,虽然不多,但是造成了TIME_WAIT很多,有好几千个,可以 netstat -antu | grep :端口

就知道了。(安全起见,端口作了模糊处理)

开始:

其实网上很多解决方法的,

1.

就是在启动的脚本文件里面加上 ulimit -n 1024 或者更多就可以了,其实是治标不治本的

2.

linux下修改/etc/sysctl.conf,然后执行/sbin/sysctl -p 使修改生效,修改的信息如

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_fin_timeout = 30

这显然需要修改linux内核参数,一定需要管理员帐号,而我这边却没有这个权限。但也不是最根本的解决方法。

4. 从程序的优化解决角度来说,因为是MINA产生的,那就可以看看MINA的参数配置有没有这样的参数设置了。最后发现在MINA那里有一个参数 setSoLinger(int i) 可以有很效地解决这个问题。

最后Mina的参数应该是这样的。覆盖IoHandlerAdapter的sessionCreated方法应该要这样设置参数。

Java代码

@Override

publicvoidsessionCreated(IoSession session)throwsException {

// TODO Auto-generated method stub

SocketSessionConfig cfg = (SocketSessionConfig) session.getConfig();

cfg.setReceiveBufferSize(2*1024*1024);

cfg.setReadBufferSize(2*1024*1024);

cfg.setKeepAlive(true);

cfg.setSoLinger(0);//这个是根本解决问题的设置

}

@Override

public void sessionCreated(IoSession session) throws Exception {

// TODO Auto-generated method stub

SocketSessionConfig cfg = (SocketSessionConfig) session.getConfig();

cfg.setReceiveBufferSize(2 * 1024 * 1024);

cfg.setReadBufferSize(2 * 1024 * 1024);

cfg.setKeepAlive(true);

cfg.setSoLinger(0); //这个是根本解决问题的设置

}

设置了它后,MINA在调用了close()方法后,不会再进入TIME_WAIT状态了,而直接Close掉了,这样就不会产生这样的那些TIME_WAIT的状态了。

如下图:(安全起见,端口作了模糊处理)

这个搜索服务应用了些参数后,已经没有再出来,因为搜索返回的速度很快,一般是低于50ms以下,每次查看都只能看到几个连接ESTABLISHED而已。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值