`
chenweinjupt
  • 浏览: 5630 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
社区版块
存档分类
最新评论

解决Mina的传输中造成的TIME_WAIT过多的问题(不能立即断开连接)

    博客分类:
  • MINA
阅读更多

开场白:
 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代码
  1. @Override  
  2.     public void sessionCreated(IoSession session) throws Exception {  
  3.         // TODO Auto-generated method stub  
  4.         SocketSessionConfig cfg = (SocketSessionConfig) session.getConfig();  
  5.         cfg.setReceiveBufferSize(2 * 1024 * 1024);  
  6.         cfg.setReadBufferSize(2 * 1024 * 1024);  
  7.         cfg.setKeepAlive(true);  
  8.         cfg.setSoLinger(0); //这个是根本解决问题的设置  
  9.     }  
@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而已。

0
0
分享到:
评论
1 楼 老马睡不醒 2011-07-04  
直接设置为0的方式不可取。可能造成套接字缓冲区里的数据还来不及发送而套接字就关闭的情况。

相关推荐

    apache-mina-2.0.4.rar_Mina框架_SerialAddress_mina_mina apache down

    在标题"apache-mina-2.0.4.rar_Mina框架_SerialAddress_mina_mina apache down"中,我们关注到"SerialAddress",这在Mina框架中是一个关键概念。 1. **Mina框架**:Mina的核心在于其非阻塞I/O模型,基于Java NIO...

    Apache-Mina-2.rar_apache mina_java mina_mina_mina-core-1.1.3

    对于初学者来说,这样的文档可以帮助快速理解和上手Mina,对于有经验的开发者,它也能提供必要的参考和解决实际问题的策略。 "java_mina"标签表明这个框架是用Java语言实现的,因此具备Java的跨平台特性。Mina利用...

    mina-master_mina_

    描述中提到的"mina 服务端的简单应用,直接部署可以使用"表明这个压缩包包含了一个能够快速运行的MINA服务端应用,开发者无需过多的配置和编码即可启动并使用。 在这个MINA项目中,"mina-master"文件可能是一个包含...

    MINA_API+MINA_DOC+mina

    它还可能包含示例代码,展示如何处理客户端连接、读写数据、异常处理等常见任务,让开发者能快速上手MINA服务器开发。 学习MINA API,开发者可以掌握异步网络编程的核心技巧,理解MINA如何通过事件驱动和过滤器链...

    udp.rar_MINA udp_android mina UDP_mina_mina u

    UDP是一种无连接的传输层协议,适用于需要高速传输但不关心数据丢失的应用场景,如在线游戏和视频流等。 首先,了解MINA的基本概念是必要的。MINA提供了一套高级API,允许开发者用简洁的代码处理网络通信。它使用了...

    TestMINA.zip_DEMO_Mina框架_java mina_mina_mina java

    这个“TestMINA.zip_DEMO_Mina框架_java mina_mina_mina java”压缩包包含了使用Java实现的MINA框架的示例代码,旨在帮助开发者快速理解和应用MINA。 MINA的核心概念包括事件驱动和非阻塞I/O模型,这两个特性使得它...

    apache-mina-2.0.4.rar_apache mina_mina

    Apache Mina是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个"apache-mina-2.0.4.rar"压缩包包含的是Apache Mina 2.0.4版本的源代码,是深入理解和定制Mina的...

    MINA_user_guide_cn.zip_mina

    文档中可能会详细介绍如何配置和使用MINA的Acceptor和Session,包括设置端口、处理连接事件、创建过滤器链以及实现自定义业务逻辑。此外,MINA还支持多种传输协议,如TCP、UDP、SSL/TLS,以及自定义协议,这使得MINA...

    给予mina 协议进行大数据传输

    标题中的“给予mina协议进行大数据传输”指的是一种基于Java的网络通信框架——Apache MINA(Model-View-Controller for Network Applications)。MINA是Apache软件基金会的一个项目,它提供了一个高度可扩展和高...

    Apache_Mina_Server_2.0_V1.0.rar_apache_apache中文手册_mina

    2. **事件驱动模型**:详细解释 Mina 如何基于事件模型进行工作,包括连接建立、数据传输、连接关闭等事件的处理机制。 3. **非阻塞 I/O**:阐述非阻塞I/O的工作原理,以及如何通过 NIO(Non-blocking Input/Output...

    mina-http-2.0.7.jar.zip_mina_mina 获取POST_mina-http_mina-http-2.0

    MINA的核心设计目标是提供一个与传输协议无关的抽象层,使得开发者可以轻松地构建基于TCP/IP、UDP/IP或其他协议的网络应用。在标题中提到的"mina-http-2.0.7.jar",是MINA框架针对HTTP协议的一个实现,特别强调了对...

    mina传输对象的示例

    在标题和描述中提到的“mina传输对象的示例”指的是如何在Mina框架下处理和传输自定义的数据对象。Mina允许开发者通过事件驱动和异步I/O模型来高效地构建网络服务。 Mina的核心组件包括: 1. **Session**: 表示...

    Mina网络通信传输

    即时聊天系统的核心在于高效的数据传输和低延迟,Mina框架的事件驱动模型和非阻塞I/O特性正好满足这些需求,它能同时处理大量并发连接,确保即使在网络拥堵的情况下也能保持良好的用户体验。 压缩包中的文件...

    mina 断包,粘包问题解决

    总的来说,Apache Mina为解决网络通信中的断包和粘包问题提供了强大的工具。通过理解和应用mina_optimize代码,你可以更好地掌握如何在实际项目中规避这些问题,提升网络通信的稳定性和可靠性。在实际开发中,结合...

    Android-MinaSocket一款基于Mina的Socket长连接库

    **Android-MinaSocket:基于Mina的高效Socket长连接库** 在移动应用开发中,尤其是Android平台,实时性与稳定性是许多应用场景的核心需求,比如在线游戏、即时通讯、物联网设备等。在这种背景下,使用Socket进行长...

    mina连接 mina心跳连接 mina断线重连

    在本文中,我们将深入探讨Mina的核心概念,包括连接管理、心跳机制以及断线重连策略。 首先,让我们理解"Mina连接"。在Mina中,连接是指客户端与服务端之间建立的通信链路。它支持多种传输协议,如TCP/IP(Socket)...

    mina的高级使用,mina文件图片传送,mina发送文件,mina报文处理,mina发送xml和json

    这样,Mina就能方便地处理结构化数据的网络传输。 6. **minaImage压缩包子文件** "minaImage"这个文件可能是示例代码、配置文件或者是关于图片传输的示例项目。通过研究这个压缩包,我们可以更具体地了解如何在...

    Apache_Mina.zip_apache_mina

    在Mina框架中,`Session`对象是连接的抽象,它封装了网络连接的所有状态和操作。当客户端与服务器建立连接时,会创建一个对应的Session实例,通过Session可以进行读写操作。`FilterChain`是Mina的核心组件之一,它...

    mina文件传输

    字符串可能需要通过特定的编码器(如StringEncoder)转化为ByteBuf,以便在网络中传输。 3. **服务器端**: - **接收请求**:服务器端监听特定端口,接收到客户端的连接请求后,创建一个Acceptor来处理。Acceptor...

    Android Mina框架使用

    当网络不稳定或服务器端出现问题导致连接中断时,Mina提供断线重连机制。客户端能够检测到连接丢失,并自动尝试重新建立连接。为了防止过多的重连请求,通常会设置重试间隔和最大重试次数。 4. **多端口问题修复**...

Global site tag (gtag.js) - Google Analytics