3

我们使用运行在 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 个线程的平均负载

具有 100 个线程的 CPU: 具有 100 个线程的 CPU - 注意它永远不会停止增长

100个线程的内存: 具有 100 个线程的内存 - GC 似乎正确地做到了

配置: 配置

在不停止 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 支持案例

平均负载 平均负载

中央处理器 在此处输入图像描述

记忆 在此处输入图像描述

4

1 回答 1

1

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

于 2013-05-13T09:27:24.623 回答