现在我有一个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那么多呢?
分享到:
相关推荐
【标题】"how tomcat works和jetty-src和tomcat7-src" 提及了三个关键概念:Tomcat的工作原理、Jetty源代码以及Tomcat 7的源代码。这些是Java Web服务器领域的核心元素,主要涉及到如何处理HTTP请求、部署Web应用...
6. **Tomcat性能优化** 优化Tomcat涉及多个方面,如调整JVM参数、减少上下文切换、优化连接池设置、压缩响应内容、启用Keep-Alive等。深入理解这些优化策略并根据实际情况进行调整,能够显著提升服务器性能。 7. *...
与其他重量级的Web服务器(如Apache Tomcat)相比,Jetty没有繁重的依赖,这使得它启动快速,占用资源少。Jetty还支持嵌入式模式,可以直接将服务器与应用程序打包在一起,提供更简洁的部署方案。 其次,Jetty对...
- 与Tomcat等其他服务器相比,Jetty具有更小的内存占用、更快的启动速度和更低的资源消耗。 - 它支持最新的HTTP协议(包括HTTP/2)和Servlet规范,提供了一种灵活的API来处理HTTP请求和响应。 2. **Jetty的特性**...
Jetty是一款轻量级、高性能且易于使用的Web服务器和Servlet容器,因其小巧的体积和出色的稳定性而备受开发者喜爱...而对于有经验的开发者,深入研究Jetty的源码和模块化设计,可以帮助优化性能,实现更高效的应用服务。
8. **性能优化**:提到了一些提升Tomcat性能的方法,比如调整线程池大小、缓存策略和内存设置等。 9. **源码分析**:通过阅读源码,我们可以了解Tomcat内部的类加载、线程模型、请求处理等关键部分的设计和实现。 ...
《深入理解Tomcat源码与Servlet-API》 ...综上所述,深入研究Tomcat源码和Servlet-API不仅能提升我们的开发技能,还能帮助我们更好地理解和优化Java Web应用的性能,从而在实际工作中发挥更大的价值。
6. **扩展与集成**:Tomcat可以与其他Java应用服务器如Jetty、GlassFish等一起工作,也可以与Spring Boot、Struts、Hibernate等框架集成,构建复杂的企业级应用。 总的来说,Apache Tomcat 7.0.16是一个强大且灵活...
Jetty是一个开源的Java Web服务器和HTTP协议栈,它的设计目标是轻量、高效和易于嵌入。...如果你正在进行Java Web开发,或者对服务器性能有较高要求,那么研究Jetty绝对是一个值得投入的时间和精力的课题。
深入研究这个压缩包的内容,我们可以获得更详细的性能数据,为优化Web应用与数据库的集成提供依据。 总结,通过对达梦数据库与不同Web中间件的性能测试,我们可以了解它们在信创环境下的实际效能,为系统设计和选型...
Spring 5支持多种嵌入式Servlet容器,如Tomcat、Jetty等。 **Jaeger Tracing** Jaeger是Uber开源的分布式追踪系统,用于监控和分析微服务架构中的请求流。在大型复杂系统中,它可以帮助开发者理解请求如何在不同...
6. **Web容器优化**:Tomcat、Jetty等Web容器的配置也是性能优化的一部分。调整连接器参数,如最大连接数、超时时间等,可以提高并发处理能力。 7. **异步处理与多线程**:对于耗时的操作,可以采用异步处理,通过...
本文将对一些值得关注的开源项目进行详细介绍,并分析它们的特点与应用场景。 #### 一、Web容器 ##### 1. Jakarta Tomcat - **简介**:由Apache基金会提供的一款免费开源的Web服务器软件,支持最新的Servlet、JSP...
在Java中,可以使用多种方式实现负载均衡,例如使用软件负载均衡器如Nginx或HAProxy,或者使用专门的Java框架如Jetty或Tomcat的集群功能。此外,还可以通过编程的方式实现,例如在CORBA环境中,ORB可以配置为根据...
而Jetty和Tomcat则功能强大,支持多线程、WebSocket等高级特性,适用于大型Web应用。 毕业设计和论文撰写时,你可以选择其中一种语言,深入研究其实现HTTP服务器的过程。这包括但不限于以下步骤: - 分析HTTP协议的...
通过研究这些代码,你可以深入了解Web服务器的内部工作流程,包括如何解析HTTP请求、如何处理请求并生成响应,以及如何优化性能等。此外,这也是一种实践Java多线程、网络编程和并发处理的好机会。 总的来说,构建...
其次,当前主流的Web服务器,如Tomcat、Jetty等,都内置了多种数据库连接池实现,如Apache的DBCP、C3P0以及HikariCP等。这些连接池组件提供了丰富的配置选项,可以根据具体的应用场景调整连接的最大最小数量、超时...
《Elastic-Job Lite Console 2.1.6-SNAPSHOT 源码解析与应用探索》 Elastic-Job Lite Console 是一个基于Elastic-Job框架开发的定时任务控制台,由当当网推出,旨在为企业级分布式系统提供简单易用、功能强大的定时...