`

mina的HTTP性能测试

    博客分类:
  • mina
 
阅读更多

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中。

新项目里的web service需要高并发服务能力,tomcat目前最多支持到200个并发。远达不到要求。

0.测试环境:

  client和server:CPU:单核2G,内存:4GB;

  网络:局域网

1.下载mina2.0安装包
打开eclipse建立工程HelloServer,把mina-core-2.0.4.jar,mina-filter-compression-2.0.4.jar
,slf4j-api-1.6.1.jar导入,注意java必须要1.5以上
3.写代码
我的测试代码:
 
把代码写好,官方例子是1.x的,我在附件里把例子里的import错误改过来
 
另外为了好测试,把ServerHandler.java改为(粗体那段是我加的):
  1. package org . apache. mina. example. httpserver. codec ;
  2.   

  3.   import org . apache. mina. core. future . IoFutureListener;
  4. import org . apache. mina. core. service. IoHandler;
  5.   import org . apache. mina. core. service. IoHandlerAdapter;
  6. import org . apache. mina. core. session. IdleStatus;
  7. import org . apache. mina. core. session. IoSession;

  8.   
  9.   /**
  10.    * An {@link IoHandler} for HTTP.
  11.    *
  12.    * @author The Apache MINA Project (dev@mina.apache.org)
  13.    * @version $Rev: 588178 $, $Date: 2007-10-25 18:28:40 +0900 (?, 25 10? 2007) $
  14.    */
  15.   public class ServerHandler extends IoHandlerAdapter {
  16.       @Override
  17.       public void sessionOpened( IoSession session) {
  18.           // set idle time to 60 seconds

  19.           session. getConfig( ) . setIdleTime( IdleStatus. BOTH_IDLE, 60) ;
  20.       }
  21.   
  22.       @Override
  23.       public void messageReceived( IoSession session, Object message) {
  24.           // Check that we can service the request context

  25.           HttpResponseMessage response = new HttpResponseMessage( ) ;
  26.           response. setContentType ( "text/plain" ) ;
  27.           response. setResponseCode( HttpResponseMessage. HTTP_STATUS_SUCCESS) ;
  28.           response. appendBody( "CONNECTED" ) ;
  29.   
  30.           // msg.setResponseCode(HttpResponseMessage.HTTP_STATUS_SUCCESS);

  31.           // byte[] b = new byte[ta.buffer.limit()];

  32.           // ta.buffer.rewind().get(b);

  33.           // msg.appendBody(b);

  34.           // System.out.println("####################");

  35.           // System.out.println(" GET_TILE RESPONSE SENT - ATTACHMENT GOOD DIAMOND.SI="+d.si+

  36.           // ", "+new java.text.SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss.SSS").format(new java.util.Date()));

  37.           // System.out.println("#################### - status="+ta.state+", index="+message.getIndex());

  38.   
  39.           // Unknown request

  40. // response = new HttpResponseMessage();

  41. // response.setResponseCode(HttpResponseMessage.HTTP_STATUS_NOT_FOUND);

  42. // response.appendBody(String.format(

  43. // "<html><body><h1>UNKNOWN REQUEST %d</h1></body></html>",

  44. // HttpResponseMessage.HTTP_STATUS_NOT_FOUND));

  45.           
  46.         response = new HttpResponseMessage( ) ;
  47.         response. setResponseCode( HttpResponseMessage. HTTP_STATUS_SUCCESS) ;
  48.         response. appendBody( "<html><body><h1>" + new java . text . SimpleDateFormat ( "EEE, dd MMM yyyy HH:mm:ss.SSS" ) . format ( new java . util . Date ( ) ) + "</h1></body></html>" ) ;
  49.   
  50.           if ( response ! = null ) {
  51.               session. write ( response) . addListener( IoFutureListener. CLOSE ) ;
  52.           }
  53.       }
  54.   
  55.       @Override
  56.       public void sessionIdle( IoSession session, IdleStatus status ) {
  57.           //IoSessionLogger.getLogger(session).info("Disconnecting the idle.");

  58.           session. close ( ) ;
  59.       }
  60.   
  61.       @Override
  62.       public void exceptionCaught( IoSession session, Throwable cause) {
  63.           //IoSessionLogger.getLogger(session).warn(cause);

  64.           session. close ( ) ;
  65.       }
  66.   }
4.打成jar包
先运行一下工程
点击工程右键->export->Runable jar file->选择“server-HelloServer”(若是没有的话先运行一下工程就有了)->finish
5.测试
把jar上传到linux(192.168.13.120)下
执行:
 
在另外一台机器(192.168.13.105)上测试:
1)1个连接,10万次请求
  1. ab -n 100000 http://192.168.13.120:8080/
测试结果:
  1. Concurrency Level: 1
  2. Time taken for tests: 117.718673 seconds
  3. Complete requests: 100000
  4. Failed requests: 0
  5. Write errors: 0
  6. Total transferred: 39000000 bytes
  7. HTML transferred: 6400000 bytes
  8. Requests per second: 849.48 [#/sec] (mean)
  9. Time per request: 1.177 [ms] (mean)
  10. Time per request: 1.177 [ms] (mean, across all concurrent requests)
  11. Transfer rate: 323.53 [Kbytes/sec] received
server的负载
  1. load average: 0.07, 0.02, 0.00
2)100个连接并发.10万次请求
  1. ab -n 100000 -c 100 http://192.168.13.120:8080/
  1. Concurrency Level: 100
  2. Time taken for tests: 9.999371 seconds
  3. Complete requests: 100000
  4. Failed requests: 0
  5. Write errors: 0
  6. Total transferred: 39003900 bytes
  7. HTML transferred: 6400640 bytes
  8. Requests per second: 10000.63 [#/sec] (mean)
  9. Time per request: 9.999 [ms] (mean)
  10. Time per request: 0.100 [ms] (mean, across all concurrent requests)
  11. Transfer rate: 3809.14 [Kbytes/sec] received
server负载
  1. load average: 0.62, 0.19, 0.06
3)1000个连接并发,10万次请求
  1. ab -n 100000 -c 1000 http://192.168.13.120:8080/
结果:
  1. Concurrency Level: 1000
  2. Time taken for tests: 19.697403 seconds
  3. Complete requests: 100000
  4. Failed requests: 0
  5. Write errors: 0
  6. Total transferred: 39000390 bytes
  7. HTML transferred: 6400064 bytes
  8. Requests per second: 5076.81 [#/sec] (mean)
  9. Time per request: 196.974 [ms] (mean)
  10. Time per request: 0.197 [ms] (mean, across all concurrent requests)
  11. Transfer rate: 1933.55 [Kbytes/sec] received
负载:
  1. load average: 1.76, 0.43, 0.14
结论:mina2.0在合理的负载下1000个并发,最高能达到5076.81rps(Requests per second),基本上能满足需求
end

转:http://blog.chinaunix.net/uid-11121450-id-385713.html
分享到:
评论

相关推荐

    mina HTTP协议实例

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,它提供了高度可扩展的、高性能的网络应用程序开发工具。本文将深入探讨如何使用MINA实现HTTP协议,以及相关的源码分析和实用...

    socket mina测试框架

    - 对于mina测试框架,其目的是验证基于Mina构建的应用程序的正确性和性能。测试包括对通道配置、消息编码解码、事件处理等方面的验证,确保在网络通信中的数据传输准确无误,性能达到预期。 5. **mina-test模块**...

    spring+mina实现http接口服务端通信客户端

    6. **测试与优化**:完成以上步骤后,进行单元测试和集成测试,确保HTTP接口和Mina通信的正确性。根据性能需求,可以调整Mina的配置,如缓冲区大小、线程池大小等,以优化通信效率。 通过这种方式,你可以构建一个...

    Mina+Socket通信

    Mina(全称“MINA: Minimalistic Application Networking API”)是Apache软件基金会的一个开源项目,它为开发者提供了一种简单而高效的方式来构建高性能、跨平台的网络应用。Mina的核心优势在于它的事件驱动和异步I...

    apache_mina_maven 客户端测试程序

    Apache MINA 是一个高度可扩展的网络应用框架,主要用于简化开发高性能、高可用性的网络服务器和客户端应用程序。MINA 提供了一种与传输协议无关的抽象层,允许开发者使用相同的 API 来处理 TCP/IP(如 Socket)和 ...

    mina双向通信已测试

    Mina(Minimum Asynchronous Network)是一个高度可扩展的、高性能的Java网络应用框架,常用于构建基于TCP/IP和UDP/IP协议的应用,如HTTP、FTP、SMTP等。本项目提供了一个完整的Mina双向通信示例,允许客户端和...

    springboot 深度整合mina开箱即用

    Spring Boot以其简洁的配置和快速的开发体验,已经成为Java领域中的主流微服务框架,而Mina则是一个强大的网络通信框架,常用于构建高性能、高并发的网络应用。通过整合这两者,我们可以构建出高效、灵活的网络服务...

    apache-mina源码

    - **测试用例**:源码中包含了大量的单元测试,用于验证MINA的功能和性能。 通过阅读和分析`apache-mina-2.0.16`的源码,我们可以深入理解MINA的设计思想,学习如何构建高效的网络服务,并能根据自己的需求定制和...

    mina2.0.3源代码

    Apache MINA是一个强大的开源网络应用框架,主要用于简化网络编程,特别是TCP/IP和UDP...这个版本的MINA经过了广泛的测试和优化,稳定性和性能都有所保障。通过深入研究MINA,开发者可以构建出高效、可维护的网络服务。

    websocket+java服务器(mina)

    Mina(Java Multithreaded Network Application Framework)是一个用Java编写的网络应用框架,它提供了高度可扩展性和性能,适用于多种网络协议,包括TCP和UDP。Mina为开发者提供了一种抽象层,简化了网络编程的复杂...

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

    Apache Mina(Model-View-Controller for Network Applications)是一个高度可扩展和灵活的网络应用程序框架,它简化了TCP/IP和UDP/IP协议的实现,支持多种协议如HTTP、FTP、Telnet等。Mina的核心设计思想是将网络...

    mina源代码学习提供下载

    Apache MINA(Multipurpose Infrastructure for Network Applications)是一个Java框架,专为开发高性能和高度可扩展的网络应用程序而设计。MINA 提供了一种抽象层,允许开发者远离底层的Socket编程,专注于业务逻辑...

    mina 同步客户端,异步客户端

    开发者通常会编写测试代码来验证MINA应用程序的正确性和性能。通过阅读和运行这些测试,我们可以更好地理解MINA的工作原理,以及如何配置同步和异步客户端。 总之,MINA为开发者提供了强大的网络编程工具,无论你是...

    maven_spring mvc_mina dome

    这个项目"maven_spring_mvc_mina dome"很可能是为了演示如何在Spring MVC应用中引入Mina,以便利用Mina的高性能网络通信能力。开发者可能通过Mina创建一个服务器端,Spring MVC处理HTTP请求,而Mina处理非HTTP通信,...

    apache-mina-2.0.7 含官方教程

    "apache-mina-2.0.7-bin.zip"文件则提供了运行和测试这些理论知识的实际环境。开发者可以通过解压此文件,获取到MINA的库文件,然后在自己的项目中引用,进行实践操作。 总的来说,Apache MINA是一个强大的网络通信...

    mina2.0.9jar包下载

    Apache Mina是一个高度可扩展的网络通信框架,广泛应用于Java开发中,尤其在处理高性能、高并发的网络应用时表现出色。Mina 2.0.9是该框架的一个版本,包含了核心库mina-core-2.0.9.jar和集成库mina-integration-...

    apache mina 简单示例

    9. **测试与调试**:在"TestMina"这个文件中,可能包含了服务端和客户端的测试代码,用于验证Mina应用的功能。通过断言和日志输出,你可以检查数据是否正确传输,连接是否成功建立等。 学习Apache Mina时,理解以上...

    mina库文件

    Apache MINA 是一款高度可扩展、高性能的网络应用程序框架,主要设计用于简化开发跨平台的、多协议的网络应用。MINA 提供了一个抽象层,让开发者可以专注于编写业务逻辑,而无需关心底层网络通信的复杂性。这个库在...

    mina 学习资料

    10. **最佳实践**:学习MINA的过程中,了解最佳实践至关重要,例如如何优化性能,如何处理异常,以及如何进行单元测试和集成测试等。 总的来说,这个"mina学习资料"压缩包是深入了解和学习MINA的宝贵资源,无论你是...

    Mina实现长连接和短连接实例

    总的来说,Apache Mina为开发者提供了一套强大的工具,帮助他们轻松地构建高性能、可扩展的网络应用程序。通过学习和实践Mina实现长连接和短连接的例子,我们可以深入了解网络编程的细节,提升我们的技能,为构建...

Global site tag (gtag.js) - Google Analytics