`
FeiXing2008
  • 浏览: 54128 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于jetty与tomcat一些性能的研究

阅读更多
现在我有一个servlet的url为/servlet/TestRuning
其中关键代码是
PrintWriter out = response.getWriter();
		String aStr = request.getParameter("a");
		String bStr = request.getParameter("b");
		
		int a = 100;
		int b = 100;
		
		try{
			a = Integer.parseInt(aStr);
			b = Integer.parseInt(bStr);
		}catch(Exception excep){
			System.err.println("err:" + excep.getMessage());
		}
		int sum = 0;
		long s = System.currentTimeMillis();
		for(int i = 0; i < a; ++i){
			for(int ii = 0; ii < b; ++ii){
				sum = a / b;
			}
		}
		long e = System.currentTimeMillis();
		long d = e - s;
		out.println( d );
		
		
		out.flush();
		out.close();

这个代码只是两个循环,其中只是作一些除法运算操作。
然后计算时间,并输出给客户端。
此时我将这个应用布署在jetty与tomcat两个服务器中
这两个服务程序都是使用了默认的配置。

在启动程序时,我先使用两个相同的jre。
wapproxy@ubuntu:~$ ps -ef | grep java
wapproxy  2076     1  1 11:28 ?        00:00:03 /usr/lib/jvm/java-6-openjdk/jre/bin/java -Djetty.home=/home/wapproxy/jetty -Djava.io.tmpdir=/tmp -jar /home/wapproxy/jetty/start.jar /home/wapproxy/jetty/etc/jetty-logging.xml /home/wapproxy/jetty/etc/jetty.xml
wapproxy  2185  1398  8 11:30 pts/0    00:00:02 /usr/lib/jvm/java-6-openjdk/jre/bin/java -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/home/wapproxy/Tomcat/conf/logging.properties -Djava.endorsed.dirs=/home/wapproxy/Tomcat/endorsed -classpath :/home/wapproxy/Tomcat/bin/bootstrap.jar -Dcatalina.base=/home/wapproxy/Tomcat -Dcatalina.home=/home/wapproxy/Tomcat -Djava.io.tmpdir=/home/wapproxy/Tomcat/temp org.apache.catalina.startup.Bootstrap start
wapproxy  2329  2309  0 11:31 pts/1    00:00:00 grep --color=auto java

确认一次,在这两个应用中我是布署了相同的应用程序,应用名为jt_jt。
其中tomcat的端口为8888
jetty的端口为8080

我使用ab进行压力测试
Server Software:        Jetty(6.1.22)
Server Hostname:        172.31.36.158
Server Port:            8080

Document Path:          /jt_jt/servlet/TestRuning?a=100000&b=100000
Document Length:        2 bytes

Concurrency Level:      1
Time taken for tests:   8.715 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Total transferred:      445000 bytes
HTML transferred:       10000 bytes
Requests per second:    573.72 [#/sec] (mean)
Time per request:       1.743 [ms] (mean)
Time per request:       1.743 [ms] (mean, across all concurrent requests)
Transfer rate:          49.86 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   1.1      0       5
Processing:     0    1   7.1      0      50
Waiting:        0    1   7.1      0      50
Total:          0    2   7.2      0      50

Percentage of the requests served within a certain time (ms)
  50%      0
  66%      0
  75%      0
  80%      0
  90%      5
  95%      5
  98%     45
  99%     50
 100%     50 (longest request)

以上是jetty的,下边是tomcat的
Server Software:        Apache-Coyote/1.1
Server Hostname:        172.31.36.158
Server Port:            8888

Document Path:          /jt_jt/servlet/TestRuning?a=100000&b=100000
Document Length:        3 bytes

Concurrency Level:      1
Time taken for tests:   4.070 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Total transferred:      650000 bytes
HTML transferred:       15000 bytes
Requests per second:    1228.50 [#/sec] (mean)
Time per request:       0.814 [ms] (mean)
Time per request:       0.814 [ms] (mean, across all concurrent requests)
Transfer rate:          155.96 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   1.2      0       5
Processing:     0    0   1.7      0      45
Waiting:        0    0   1.7      0      45
Total:          0    1   2.1      0      45

Percentage of the requests served within a certain time (ms)
  50%      0
  66%      0
  75%      0
  80%      0
  90%      5
  95%      5
  98%      5
  99%      5
 100%     45 (longest request)

两次测试的并发量我设成了1,也就是线程池的模式对测试结果影响不大。
关键数据如下
jetty 8080 Requests per second:    573.72 [#/sec] (mean)
tomcat 8888  Requests per second:    1228.50 [#/sec] (mean)
基本相差一倍之多。
为什么会有这个问题呢?

也许你想看看输入内容是多少
用浏览器输入单次请求http://172.31.36.158:8888/jt_jt/servlet/TestRuning?a=10000000&b=100000000
返回结果为零。

这样是不是可以证明jetty比tomcat是慢一倍呢?
如果可以证明,为什么jetty是慢过tomcat那么多呢?
分享到:
评论
2 楼 xiaoych 2010-04-06  
这是....?  未完待续?
1 楼 FeiXing2008 2010-04-06  
现在改成输出一定量的字节数进行测试
新的servlet servlet/MkLen?len=字节数
关键代码
String lenStr = request.getParameter("len");
		int len = 100;
		try{
			len = Integer.parseInt(lenStr);
		}catch(Exception excep){
			System.err.println("err:" + excep.getMessage());
		}
		for(int i = 0; i < len; ++i){
			out.print("_");
		}

然后是我的压力测试输出,当然两个jre是一样的。
jetty测试结果如下
Server Software:        Jetty(6.1.22)
Server Hostname:        172.31.36.158
Server Port:            8080

Document Path:          /jt_jt/servlet/MkLen?len=1000
Document Length:        1000 bytes

Concurrency Level:      1
Time taken for tests:   9.200 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Total transferred:      5435000 bytes
HTML transferred:       5000000 bytes
Requests per second:    543.48 [#/sec] (mean)
Time per request:       1.840 [ms] (mean)
Time per request:       1.840 [ms] (mean, across all concurrent requests)
Transfer rate:          576.91 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   1.2      0       5
Processing:     0    1   5.8      0      50
Waiting:        0    1   5.8      0      50
Total:          0    2   5.9      0      55

Percentage of the requests served within a certain time (ms)
  50%      0
  66%      0
  75%      0
  80%      5
  90%      5
  95%      5
  98%      5
  99%     50
 100%     55 (longest request)

tomcat服务测试结果如下
Server Software:        Apache-Coyote/1.1
Server Hostname:        172.31.36.158
Server Port:            8888

Document Path:          /jt_jt/servlet/MkLen?len=1000
Document Length:        1000 bytes

Concurrency Level:      1
Time taken for tests:   5.860 seconds
Complete requests:      5000
Failed requests:        0
Write errors:           0
Total transferred:      5635000 bytes
HTML transferred:       5000000 bytes
Requests per second:    853.24 [#/sec] (mean)
Time per request:       1.172 [ms] (mean)
Time per request:       1.172 [ms] (mean, across all concurrent requests)
Transfer rate:          939.07 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   1.3      0       5
Processing:     0    1   2.0      0      25
Waiting:        0    1   1.9      0      25
Total:          0    1   2.2      0      25

Percentage of the requests served within a certain time (ms)
  50%      0
  66%      0
  75%      0
  80%      5
  90%      5
  95%      5
  98%      5
  99%      5

关键结果:
jetty
Total transferred:      5435000 bytes
HTML transferred:       5000000 bytes
Requests per second:    543.48 [#/sec] (mean)

tomcat
Total transferred:      5635000 bytes
HTML transferred:       5000000 bytes
Requests per second:    853.24 [#/sec] (mean)


依然是tomcat性能占优。

相关推荐

    how tomcat works和jetty-src和tomcat7-src

    【标题】"how tomcat works和jetty-src和tomcat7-src" 提及了三个关键概念:Tomcat的工作原理、Jetty源代码以及Tomcat 7的源代码。这些是Java Web服务器领域的核心元素,主要涉及到如何处理HTTP请求、部署Web应用...

    tomcat 学习与分析总结资料

    6. **Tomcat性能优化** 优化Tomcat涉及多个方面,如调整JVM参数、减少上下文切换、优化连接池设置、压缩响应内容、启用Keep-Alive等。深入理解这些优化策略并根据实际情况进行调整,能够显著提升服务器性能。 7. *...

    jetty入门

    与其他重量级的Web服务器(如Apache Tomcat)相比,Jetty没有繁重的依赖,这使得它启动快速,占用资源少。Jetty还支持嵌入式模式,可以直接将服务器与应用程序打包在一起,提供更简洁的部署方案。 其次,Jetty对...

    JAVA里使用Jetty作为轻量级嵌入式的Web容器

    - 与Tomcat等其他服务器相比,Jetty具有更小的内存占用、更快的启动速度和更低的资源消耗。 - 它支持最新的HTTP协议(包括HTTP/2)和Servlet规范,提供了一种灵活的API来处理HTTP请求和响应。 2. **Jetty的特性**...

    jetty-6.1.22

    Jetty是一款轻量级、高性能且易于使用的Web服务器和Servlet容器,因其小巧的体积和出色的稳定性而备受开发者喜爱...而对于有经验的开发者,深入研究Jetty的源码和模块化设计,可以帮助优化性能,实现更高效的应用服务。

    &lt;&lt;How tomcat works&gt;&gt; 英文版 中文版 源码

    8. **性能优化**:提到了一些提升Tomcat性能的方法,比如调整线程池大小、缓存策略和内存设置等。 9. **源码分析**:通过阅读源码,我们可以了解Tomcat内部的类加载、线程模型、请求处理等关键部分的设计和实现。 ...

    tomcat源码,servlet-api源码

    《深入理解Tomcat源码与Servlet-API》 ...综上所述,深入研究Tomcat源码和Servlet-API不仅能提升我们的开发技能,还能帮助我们更好地理解和优化Java Web应用的性能,从而在实际工作中发挥更大的价值。

    apache-tomcat-7.0.16

    6. **扩展与集成**:Tomcat可以与其他Java应用服务器如Jetty、GlassFish等一起工作,也可以与Spring Boot、Struts、Hibernate等框架集成,构建复杂的企业级应用。 总的来说,Apache Tomcat 7.0.16是一个强大且灵活...

    jetty-6.1.3-src.zip

    Jetty是一个开源的Java Web服务器和HTTP协议栈,它的设计目标是轻量、高效和易于嵌入。...如果你正在进行Java Web开发,或者对服务器性能有较高要求,那么研究Jetty绝对是一个值得投入的时间和精力的课题。

    J2EE开发值得研究的开源项目

    Tomcat提供了良好的性能和稳定性,是许多小型到中型企业应用的首选。 2. **Jetty**:Jetty是一个轻量级的HTTP服务器和Servlet容器,源码相对较小,易于理解和学习。它适合那些想要快速上手并了解Servlet容器内部...

    信创-达梦数据库性能测试代码

    深入研究这个压缩包的内容,我们可以获得更详细的性能数据,为优化Web应用与数据库的集成提供依据。 总结,通过对达梦数据库与不同Web中间件的性能测试,我们可以了解它们在信创环境下的实际效能,为系统设计和选型...

    Spring 5 MVC演示应用程序,具有嵌入式Tomcat和Jaeger Tracing(不带Spring Boot).zip

    Spring 5支持多种嵌入式Servlet容器,如Tomcat、Jetty等。 **Jaeger Tracing** Jaeger是Uber开源的分布式追踪系统,用于监控和分析微服务架构中的请求流。在大型复杂系统中,它可以帮助开发者理解请求如何在不同...

    基于J2EE平台的B/S系统性能优化设计研究.pdf

    6. **Web容器优化**:Tomcat、Jetty等Web容器的配置也是性能优化的一部分。调整连接器参数,如最大连接数、超时时间等,可以提高并发处理能力。 7. **异步处理与多线程**:对于耗时的操作,可以采用异步处理,通过...

    J2EE学习中一些值得研究的开源项目

    本文将对一些值得关注的开源项目进行详细介绍,并分析它们的特点与应用场景。 #### 一、Web容器 ##### 1. Jakarta Tomcat - **简介**:由Apache基金会提供的一款免费开源的Web服务器软件,支持最新的Servlet、JSP...

    开发技术-Java基于CORBAJava对象负载均衡的研究.zip

    在Java中,可以使用多种方式实现负载均衡,例如使用软件负载均衡器如Nginx或HAProxy,或者使用专门的Java框架如Jetty或Tomcat的集群功能。此外,还可以通过编程的方式实现,例如在CORBA环境中,ORB可以配置为根据...

    http服务器的实现.rar

    而Jetty和Tomcat则功能强大,支持多线程、WebSocket等高级特性,适用于大型Web应用。 毕业设计和论文撰写时,你可以选择其中一种语言,深入研究其实现HTTP服务器的过程。这包括但不限于以下步骤: - 分析HTTP协议的...

    Java WEB服务器

    通过研究这些代码,你可以深入了解Web服务器的内部工作流程,包括如何解析HTTP请求、如何处理请求并生成响应,以及如何优化性能等。此外,这也是一种实践Java多线程、网络编程和并发处理的好机会。 总的来说,构建...

    基于java数据库连接池的研究毕业论文.doc

    其次,当前主流的Web服务器,如Tomcat、Jetty等,都内置了多种数据库连接池实现,如Apache的DBCP、C3P0以及HikariCP等。这些连接池组件提供了丰富的配置选项,可以根据具体的应用场景调整连接的最大最小数量、超时...

    elastic-job-lite-console-2.1.6-SNAPSHOT.tar

    《Elastic-Job Lite Console 2.1.6-SNAPSHOT 源码解析与应用探索》 Elastic-Job Lite Console 是一个基于Elastic-Job框架开发的定时任务控制台,由当当网推出,旨在为企业级分布式系统提供简单易用、功能强大的定时...

Global site tag (gtag.js) - Google Analytics