我们使用运行在 jBoss EAP 6.0 上的 JSF 2 开发了一个站点,我们在生产环境中遇到问题,基本上在一段时间后(当前用户级别约为 24 小时),应用程序使服务器负载平均上升到 100 并且服务器停止响应(它实际上并没有停止响应,只是响应时间太长,所以实际上是一样的)
现在,如果我们只是停止并再次启动 jBoss,应用程序就可以正常工作(所以这不是负载问题,而是随着时间的推移发生的事情越多,负载越多,发生的速度越快)
为了测试这一点,我们创建了一个简单的应用程序(只是一个战争),它基本上有一个登录页面,以及一个非常简单的页面,它通过一个按钮和一个简单的弹出窗口呈现一些文本,也只是呈现一些文本。
我们正在使用 jMeter(在另一台机器上运行)来强调这个简单的应用程序使用 100 个并发线程(或者无论如何 jMeter 允许的并发)来处理它。在具有 i5 和 8gb ram(服务器使用 4gb)的 Mac 上运行的 jBoss EAP 持续大约 20 分钟,然后将平均负载升级到 50 并继续攀升,如果我使用 200 个线程而不是 100 个线程
我注意到的另一件事是,如果我开始使用新的 jBoss 实例进行测试,则平均负载需要 X 时间才能升级,现在,如果我开始测试,将平均负载提高到 50,然后停止该测试并在不重新启动 jBoss 的情况下开始新的测试,平均负载在几秒钟内再次飙升至 50。
我们可以使用 Restful 服务对我们的服务施加压力而不会出现问题(并且没有负载平均峰值),因此我们猜测这不是一般的 jBoss 问题,而更多的是 JSF 问题。
我正在上传一些 Visual VM 的图像作为参考(您可以在其中看到 GC 定期完成并且看起来很好,并且 CPU 和负载平均升级的遏制)以及库版本的 pom.xml 的内容。
所以我的问题基本上是有人遇到过这个问题吗?这是正常行为吗?谁能想到发生这种情况的原因?(我们还通过 RedHat 支持创建了一张票,但我们希望社区中的某个人已经遇到过这个问题,或者可以帮助我们找出一种方法来找出正在发生的事情)
如果有人感兴趣,我可以提供示例应用程序的代码和 jMeter 测试脚本
蒂亚!
100 个线程的平均负载:
具有 100 个线程的 CPU:
100个线程的内存:
配置:
在不停止 jBoss 的情况下再次加载平均开始测试:
最后 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 支持案例
平均负载
中央处理器
记忆