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方法应该要这样设置参数。
@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); //这个是根本解决问题的设置 }
这个搜索服务应用了些参数后,已经没有再出来,因为搜索返回的速度很快,一般是低于50ms以下,每次查看都只能看到几个连接ESTABLISHED而已。Mina 解决请求后直接关闭连接
SocketSessionConfig参数设制,布布扣,bubuko.com
原文:http://www.cnblogs.com/hujihon/p/3726613.html