Spring Boot中嵌入式Servlet容器指南_第1页
Spring Boot中嵌入式Servlet容器指南_第2页
Spring Boot中嵌入式Servlet容器指南_第3页
Spring Boot中嵌入式Servlet容器指南_第4页
Spring Boot中嵌入式Servlet容器指南_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 PAGE 1Spring Boot中嵌入式Servlet容器指南 PAGE 6Spring Boot中嵌入式Servlet容器的比较介绍随着云原生应用和微服务的流行也催生了对嵌入式Servlet容器需求的增长。为更加简单的构建应用和服务,Spring Boot为开发者提供了三种成熟的容器:Tomcat,Undertow和Jetty。在本文中,我们会演示了一种方法:测量启动和增加负载时获取的指标来快速的比较不同容器实现的性能差异。依赖首先我们在pom.xml中指定了spring-boot-starter-web 这个依赖,这是我们为我们每一个容器实现进行测量前所必须的具备。通常的,我们会指定使

2、用 spring-boot-starter-parent 作为我们的父依赖,然后接着加入我们需要的starter:org.springframework.bootspring-boot-starter-parent2.0.3.RELEASEorg.springframework.bootspring-boot-starterorg.springframework.bootspring-boot-starter-webTomcat因为在我们spring-boot-starter-web在我们的依赖中,默认采用的是Tomcat容器,因此我们不需要再做 更多的配置。Jettyorg.springfr

3、amework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-tomcatorg.springframework.bootspring-boot-starter-jetty为了使用Jetty,我们首先需要从spring-boot-starter-web中去掉spring-boot-starter-tomcat 这个依赖。然后,我们只需要简单引入spring-boot-starter-jetty的依赖:Undertow设置Undertow的方式和Jetty类似,不过去除依赖后,我们会使用spring-

4、boot-starter-undertow 作为我们的依赖:org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-tomcatorg.springframework.bootspring-boot-starter-undertowActuator我们使用Spring Boot的Actuator组件来对系统进行压力测试和查询应用指标。你可以通过阅读 HYPERLINK /spring-boot-actuators 这篇文章来更加详细的了解Actuator。本文中,我们只

5、需要在pom中添加这个依赖:org.springframework.bootspring-boot-starter-actuatorApache Beach HYPERLINK /docs/2.2/programs/ab.html Apache Bench是一个开源的负载测试工具,但它通常会和Apache Web 服务器捆绑在一起。Windows用户可以 HYPERLINK /docs/current/platform/windows.html l down 点击此处进行下载。如果你的Windows电脑上已经有了这个工具,你应该可以在你的apache/bin 目录下找到ab.exe 。如果你是

6、Linux的用户,你可以通过apt-get命令来安装ab$ apt-get install apache2-utils启动指标搜集Componentpublic class StartupEventHandler / logger, constructor private String METRICS = jvm.memory.used, jvm.classes.loaded, jvm.threads.live;private String METRIC_MSG_FORMAT = Startup Metric =; private MeterRegistry meterRegistry;Eve

7、ntListenerpublic void getAndLogStartupMetrics( ApplicationReadyEvent event) Arrays.asList(METRICS).forEach(this:getAndLogActuatorMetric);private void processMetric(String metric) Meter meter = meterRegistry.find(metric).meter(); Map stats = getSamples(meter);(METRIC_MSG_FORMAT, metric, stats.get(Sta

8、tistic.VALUE).longValue();/ other methods为了搜集我们的启动指标,我们会在Spring Boot的ApplicationReadyEvent 注册我们关注的指标。我们直接使用Actuator组件提供的MeterRegistry工具,通过编程的方式来直接获取我们所关注的指标:为了避免人为的通过Actuator的REST端点进行性能指标的查询,我们启动一个独立的JMX进程来记录 应用启动应用时我们所关注的指标数据。选择Actuator可以为我们提供了大量的指标数据。在应用启动后,我们选择了三个具有代表性的指标,他们可以展现系统运行时的关键点的概况。jvm.m

9、emory.used JVM在启动后总共使用的内存量jvm.classes.loaded JVM中总共加载的class文件的数量jvm.threads.live JVM中存活的线程数量。在我们的测试中,这个值可以展现为处于休息状态的线程的数量。运行时指标搜集除了提供启动指标, 当我们启动Apache Bench后,使用Actuator组件提供的/metrics端点作为目标url进行请求,以使我们的应用处于负载阶段。ab -n 10000 -c 10 http:/localhost:8080/actuator/metrics为了测试一个真实的处于负载的应用,我们可能更需要使用我们的应用系统所提供

10、的端点进行测试。一旦我们的应用启动完成,我们使用以下命令来启动并执行的ab:选择Apache Bench能够快速的给予我们一些有用的信息:包括连接时间,在某一段时间的请求的占比等。为了我们的目的,我们通常更加关注每秒请求个数和每个请求的处理时间的均值。结果在启动阶段,我们通过对Tomcat,Jetty和Undertow所占用内存的比较,我们发现Jetty占用的内存最 小,Undertow次之,Tomcat最多。在我们的测量中,我么还能发现Tomcat,Jetty和Undertow的性能比较:我们可以清楚的看到Undertow 很明显是最快的,而Jetty则相对于慢一些。MetricTomcat

11、JettyUndertowjvm.memory.used (MB)168155164jvm.classes.loaded986997849787jvm.threads.live251719Requests per second154216271650Average time per request (ms)6.4836.1486.059请注意,我们的这些指标都是在裸项目(没有添加任何业务代码的项目)下进行的测量。如果是自己的项目,那么测量指标大概率会有不同。基准测试讨论开发适当的基准测试以充分测试容器实现的性能可能是相当复杂的。为了提取其中最关键的信息,能够清晰认识到要针对每个具体问题所编写出

12、正确的测试案例是非常重要的。值得注意的是,示例中使用了Actutor的HTTP GET请求作为负载,以此来收集的所需要指标的测量值。可预见的是,不同的工作负载会导致对容器实现的进行不同指标的测量和搜集。如果需要更加健壮和精确的测量,建立一个更接近生产用例的测试计划是一个非常好的办法。此外,更复杂的基准测试解决方案(如JMeter或Gatling)可能会得到更有价值的测试结论。选择容器选择一个合适的容器实现应当要基于多方面的考量,而不能仅仅是基于一些硬性指标的概况就做出仓促的选择。适用性,特性,可配置性和策略通常也起到相当大的考量。结论在本文中,我们看了Tomcat,Jetty和Undertow的嵌入式的Servlet容器的实现。我们通过Actuator暴露 的metrics端点来测试了每一个Servl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论