JSF应用程序负载平均值升级

时间:2012-12-17 19:30:25

标签: java performance jsf jsf-2

我们使用在jBoss EAP 6.0上运行的JSF 2开发了一个站点,我们在生产环境中遇到问题,基本上经过一段时间(当前用户水平大约24小时),应用程序使服务器负载平均值上升到100和服务器类型停止响应(它实际上不会停止响应它只需要太长时间来响应所以在实际术语中它是相同的)

现在如果我们再次停止并再次启动jBoss,应用程序运行正常(因此这不是负载问题,但随着时间的推移会发生更多的事情,负载越多,发生的速度越快)

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

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

我注意到的另一件事是,如果我开始使用新的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

CPU enter image description here

内存 enter image description here

1 个答案:

答案 0 :(得分:1)

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