gpt4 book ai didi

Tomcat 在高负载期间未使用所有内核

转载 作者:行者123 更新时间:2023-11-28 22:41:55 25 4
gpt4 key购买 nike

我们的 tomcat 服务器有一个奇怪的行为。初始情况:

  • 具有 50 个网络应用程序的 tomcat 服务器(使用 thymeleaf 模板引擎提供网站的 spring 应用程序)
  • 16 核和 96GB 内存的服务器
  • 用于负载测试的 jmeter针对一个网络应用程序,其他人闲置
    • 120 个线程
    • 重复 10 次
    • 针对一堆 url 的 http 请求

当我们对一个 web 应用程序(其他处于空闲状态)进行负载测试时,我们可以看到 tomcat 没有使用所有可用资源。几秒钟后,CPU 使用率下降到 7% 左右(16 个核心中的 1 个)。然后它上升,但一段时间后它再次下降到 7% 并保持在那里,直到所有请求都被处理。如果我们尝试在 7% 期间在浏览器中打开这些 url,我们的响应时间也会非常慢。我们不知道为什么 tomcat 没有使用其他内核。在系统级别,我们可以看到当时没有其他应用程序正在使用 cpu。

cpu usage with 50 webapps

当我们将 Web 应用程序的数量减少到 35 个或更少时,我们会看到不同的画面。 CPU 使用率现在为 70% 到 100%,直到所有请求都得到处理,然后下降到 0.5% 左右。

cpu usage with 35 webapps

目前我们不知道在哪里可以找到这种行为的原因。在堆转储中,我们可以看到正在处理一些 thymeleaf 表达式,但由于仍在处理“正常”请求,我们认为这不是问题所在。

配置:

<Connector port="8080" protocol="HTTP/1.1" maxThreads="10000" minSpareThreads="200" connectionTimeout="20000" acceptorThreadCount="4" redirectPort="8443" URIEncoding="UTF-8" />

-Djava.rmi.server.hostname=XXX
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.authenticate=true
-Dcom.sun.management.jmxremote.password.file=XXX
-Dcom.sun.management.jmxremote.access.file=XXX
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.port=9090
-Dcom.sun.management.jmxremote.rmi.port=9090
-Djava.awt.headless=true
-XX:PermSize=1024M
-XX:MaxPermSize=4096M
-XX:ReservedCodeCacheSize=512m
-Xdebug
-Xrunjdwp:server=y,transport=dt_socket,address=8081,suspend=n
-verbose:gc
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-Xloggc:/var/log/tomcat7/tomcat-gc.log
-Xms40000M
-Xmx40000M
-Dfile.encoding=UTF-8
-Dcatalina.base=/usr/share/tomcat7
-Dcatalina.home=/usr/share/tomcat7
-Djava.endorsed.dirs=
-Djava.io.tmpdir=/var/cache/tomcat7/temp
-Djava.util.logging.config.file=/usr/share/tomcat7/conf/logging.properties
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

Apache Tomcat/7.0.39 | Java 1.7.0_75-b13

谢谢你的帮助!!

最佳答案

听起来很奇怪,但我们设置了一个 tomcat 启动参数来首选 IPv4,以解决此行为:

-Djava.net.preferIPv4Stack=true

引用:http://www-01.ibm.com/support/docview.wss?uid=nas8N1011363

此外,配置另一个垃圾收集器应该会有所帮助:

-XX:+UseParNewGC
-XX:+UseConcMarkSweepGC

关于Tomcat 在高负载期间未使用所有内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29004244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com