gpt4 book ai didi

java - JSF 应用程序平均负载上升

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:10:50 25 4
gpt4 key购买 nike

我们使用在 jBoss EAP 6.0 上运行的 JSF 2 开发了一个站点,我们的生产环境遇到了问题,基本上在一段时间后(当前用户水平约为 24 小时)应用程序使服务器平均负载上升到 100 并且服务器有点停止响应(它实际上并没有停止响应只是响应时间太长所以实际上是一样的)

现在,如果我们只是停止并再次启动 jBoss,应用程序就可以正常工作(所以这不是负载问题,而是随着时间的推移会发生更多的事情,负载越多,它发生的速度就越快)

为了测试这一点,我们创建了一个简单的应用程序(只是一场 war ),它基本上有一个登录页面,以及一个非常简单的页面,该页面呈现一些带有按钮的文本和一个简单的弹出窗口,也只呈现一些文本。

我们正在使用 jMeter(在另一台机器上运行)来强调这个简单的应用程序有 100 个并发线程(或者 jMeter 允许的并发线程)。在具有 i5 和 8gb ram(服务器使用 4gb)的 Mac 上运行的 jBoss EAP 在将平均负载升级到 50 并继续攀升之前持续大约 20 分钟,如果我使用 200 个线程而不是 100 个线程

我注意到的另一件事是,如果我开始使用新的 jBoss 实例进行测试,平均负载需要 X 时间才能升级,现在,如果我开始测试,让平均负载达到 50,然后停止该测试并开始新测试而不重新启动 jBoss,负载平均数在几秒内再次飙升至 50。

我们可以使用 Restful 服务对我们的服务施加压力而不会出现问题(并且没有平均负载峰值),因此我们猜测这不是一般的 jBoss 问题,而是更多的 JSF 问题。

我正在上传一些 Visual VM 的图像作为引用(您可以在其中看到 GC 定期完成并且看起来很好,并且 CPU 和负载平均升级得到抑制)和库版本的 pom.xml 的内容.

所以我的问题基本上是有人遇到过这个问题吗?这是正常行为吗?谁能想到发生这种情况的原因? (我们还创建了一个支持 RedHat 的票证,但我们希望社区中的某个人已经遇到过这个问题,或者可以帮助我们找到一种方法来找出发生了什么)

如果有人感兴趣,我可以提供示例应用程序的代码和jMeter测试脚本

TIA!

100 个线程的平均负载:

Load average with 100 threads

100 个线程的 CPU: CPU with 100 threads - Notice it never stops growing

100 个线程的内存: Memory with 100 threads - GC Seems to do it's gob correctly

配置: Configuration

在不停止 jBoss 的情况下再次加载平均开始测试:

enter image description here

最后是pom.xml依赖:

 <properties>
<project.version>1.0</project.version>
<codi.version>1.0.5</codi.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.build.timestamp.format>yyyyMMdd'T'HHmmss</maven.build.timestamp.format>
<jboss.home>${env.JBOSS_HOME}</jboss.home>
<jboss.domain>default</jboss.domain>
<arquillian.version>1.0.0.CR7</arquillian.version>
<slf4j.version>1.6.1</slf4j.version>
<weld.version>1.1.8.Final</weld.version>
<seam.version>3.1.0.Final</seam.version>
<rest.version>2.3.3.Final</rest.version>
<version.arquillian_core>1.0.0.CR7</version.arquillian_core>
<version.jbossas_7>7.1.0.Final</version.jbossas_7>
<jboss-javaee6-spec.version>1.0.0.Final</jboss-javaee6-spec.version>
<org.richfaces.bom.version>4.0.0.Final</org.richfaces.bom.version>
</properties>

<modelVersion>4.0.0</modelVersion>
<build>
<finalName>foo</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<!-- PRoject Dependencies -->
<dependency>
<groupId>ar.com.easytech</groupId>
<artifactId>easyFaces-core</artifactId>
<version>1.1</version>
</dependency>

<!-- Web Dependencies -->
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<scope>compile</scope>
<version>1.6.2</version>
</dependency>
<!-- Seam -->
<dependency>
<groupId>org.jboss.seam.security</groupId>
<artifactId>seam-security</artifactId>
<scope>compile</scope>
<version>${seam.version}</version>
</dependency>
<dependency>
<groupId>org.apache.myfaces.extensions.cdi.bundles</groupId>
<artifactId>myfaces-extcdi-bundle-jsf20</artifactId>
<version>${codi.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.ocpsoft</groupId>
<artifactId>prettyfaces-jsf2</artifactId>
<scope>compile</scope>
<version>3.3.2</version>
</dependency>
<!-- PDF -->
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>fop</artifactId>
<version>1.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.xmlgraphics</groupId>
<artifactId>xmlgraphics-commons</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>avalon-framework</groupId>
<artifactId>avalon-framework</artifactId>
<version>4.1.5</version>
</dependency>
<dependency>
<groupId>org.apache.commons.io</groupId>
<artifactId>commons.io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>batik</groupId>
<artifactId>batik-bridge</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>batik</groupId>
<artifactId>batik-css</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>batik</groupId>
<artifactId>batik-util</artifactId>
<version>1.6</version>
</dependency>
<dependency>
<groupId>apache-xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.2.5</version>
<scope>provided</scope>
</dependency>
</dependencies>

编辑

正如 maple_shaft 建议的那样,我在 glassfish 上进行了测试,得到了完全不同的结果,我配置了一个基本的 glassfish 服务器,只是更改了 Xmx Xms 和 NewSize 并使用 200 个线程运行了测试,平均负载从未超过 6(实际上它保持在5 我猜是负载的舒适区)

我正在添加结果图像并将相应地更新 RH 支持案例

平均负载 Load Average

中央处理器 enter image description here

内存 enter image description here

最佳答案

您能否将 mojara 实现更改为 myfaces,因为使用 2.1.21 版 Mojarra 的应用程序存在一些性能问题。欲了解更多信息,请阅读 http://blog.oio.de/2013/05/06/jsf-performance-tuning/

关于java - JSF 应用程序平均负载上升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13920823/

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