托管REST API的嵌入式Jetty容器中的性能瓶颈

时间:2019-04-05 11:31:12

标签: spring-boot java-8 embedded-jetty jetty-9

在基于开放JDK 1.8,春季启动1.5.9 REST API托管的嵌入式Jetty 9.4.15容器的模拟器服务中寻求解决吞吐量问题的建议。该服务通过HTTP GET方法公开单个端点,并在调用时返回符合VAST模式的XML。相同的端点可以通过查询参数生成两种类型的XML消息格式控制器。第一条XML消息的大小约为700个字节,第二个XML消息的大小约为30KB。

类型2消息的性能要求约为30000 HTTP请求/秒,响应时间为20 – 25毫秒。

用于此基准测试的硬件是Gen32 DL360,该芯片具有32核(启用超线程)和128 GB RAM。该计算机包含使用hypervisor vmware创建的两个VM.16核心和40GB分配给一个VM,6核心和18GB RAM分配给另一个VM。基准的码头实例正在第一个VM中运行。

用于启动服务的JVM参数是, / usr / bin / java -Dsun.misc.URLClassPath.disableJarChecking = true-服务器-Xmx24G -Xms2G -XX:+ UseParallelGC -XX:+ UseParallelOldGC -XX:+ AggressiveOpts -XX:SurvivorRatio = 4 -XX:TargetSurvivorRatio = 90- XX:MaxGCPauseMillis = 200 -XX:ParallelGCThreads = 20 -XX:ConcGCThreads = 5 -XX:InitiatingHeapOccupancyPercent = 70 -jar /usr/local/test/simulator/simulator-service/simulator-service-2.1-SNAPSHOT.jar

ab工具命令行:ab -t 120 -n 1000000 -c 300 -k http://10.93.243.87:8100/simulator/vast?id=1

Jetty调优使用50分钟的qtp线程和200个最大的qtp线程,队列大小为25000。此外,在测试之前还要进行以下内核级别设置。

  • 硬nofile 40000
  • 软件nofile 40000

sysctl -w net.ipv4.tcp_tw_recycle = 1 sysctl -w net.ipv4.tcp_tw_reuse = 1

观察:在ab工具运行期间,在16个内核中被广泛观察到,其中VM几乎使用了9个内核。

是否由于XML消息大小过大而导致性能下降?通过其他方式,我可以在单个Jetty实例中实现每秒30000 HTTP请求的目标性能指标。

0 个答案:

没有答案