Weblogic到tomcat迁移性能问题

时间:2013-02-14 06:20:14

标签: java performance tomcat

我们成功地将Web应用程序从Weblogic迁移到了tomcat 7。 Web应用程序使用。

构建
  1. 弹簧
  2. JS​​P
  3. 使用weblogic Datasources
  4. 当我们迁移到Tomcat时,我们开始使用DBCP。但是考虑改为Tomcat JDBC Connection池。请建议这会有所帮助。

    应用程序必须在服务器端执行一些繁重的事务。

    但是tomcat无法提供我们在weblogic中获得的性能和稳定性。

    在tomcat上运行的GC线程太多,这会导致应用程序挂起。几乎全部时间的2/7用于GC。

    这是JVM初始化字符串

    JAVA_OPTS="$JAVA_OPTS -server -Xms120G -Xmx120G -Xmn60G -XX:PermSize=512m -XX:MaxPermSize=512m -XX:MaxNewSize=40G -XX:NewSize=40G -Xloggc:$CATALINA_HOME/logs/gc.log -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+DisableExplicitGC -XX:+CMSClassUnloadingEnabled -XX:+UseLargePages -XX:LargePageSizeInBytes=1200m"
    

    请帮我调整tomcat以获得更好的性能和稳定性。

1 个答案:

答案 0 :(得分:3)

一些问题立即跳出来:

  • 您做了什么样的分析和分析,让您相信这一点 你需要120 GiB的堆空间?
  • 您是否了解GC的影响 一堆非常大的?
  • 你有足够的物理记忆吗? 整个Java进程,而不仅仅是堆?
  • 你为什么要明确 将年轻一代的最大尺寸设定为60 GiB,将新尺寸设定为40 GiB?

如果我们看一下您指定的选项:

-server 
-Xms120G 
-Xmx120G 
-Xmn60G 
-XX:PermSize=512m 
-XX:MaxPermSize=512m 
-XX:MaxNewSize=40G 
-XX:NewSize=40G 
-XX:+PrintGCDetails 
-XX:+PrintGCTimeStamps 
-XX:+UseConcMarkSweepGC 
-XX:+CMSIncrementalMode 
-XX:+DisableExplicitGC 
-XX:+CMSClassUnloadingEnabled 
-XX:+UseLargePages 
-XX:LargePageSizeInBytes=1200m

它读起来就像一个读过太多“Java性能”博客的人。如果你无法解释每个选项的作用以及为什么你把它作为参数添加,请删除选项。

通常情况下,JVM可以很好地处理自己 - 通常可以做出更好的决定,例如它需要多少伊甸园空间等。如果你要设置比堆和perm gen大小更多的东西(甚至那么......)你真的需要知道你在做什么......

不幸的是,没有神奇的设置,如果您的应用程序特别繁重,尤其如此。

从一组实际的基本设置开始,使用JVisualVM,JMeter,MAT等工具。查看应用程序行为的概述。记录性能,堆使用情况,并发线程,吞吐量(峰值和平均值),执行垃圾收集所花费的时间以及应用程序稳定性的指标。每次进行更改时,记录相同的指标并记录结果。最终,您将正确调整应用程序,并了解每个设置是否确实对性能产生了积极影响。