weblogic92 性能调优

luoluofei

贡献于2012-06-14

字数:4673 关键词: 应用服务器 WebLogic

 weblogic92 性能调优 1 安装时的注意要点 l Weblogic的日志应调整为“info”,以提供更多信息 l Weblogic的线程数及Weblogic的connection pool数 n Weblogic线程数通常为:单CPU线程数为15,双CPU为20-25 n Weblogic 数据库连接数可设为线程数+5 注意:线程数与数据库连接数不是越大越好,设得过大容易导致系统挂死或低效率 2 weblogic.xml 部署配置文件说明 l pageCheckSeconds 在weblogic中的默认设置是1, 表示WebLogic每一秒钟都针对每个JSP页面进行检查,看是否有新的版本。这在开发时是一个很好的设置,但是在生产中,如果系统有大量的JSP页面,这将会造成巨大的开销。 对于业务系统,需要把这个参数设置成“-1”。 在weblogic.xml 配置如下: pageCheckSeconds -1 l servlet-reload-check-secs 在weblogic中的默认设置是1, 表示WebLogic每一秒钟都针对每个Servlet进行检查,看是否有新的版本。这在开发时是一个很好的设置,但是在生产中,如果系统有大量的servlet,这将会造成巨大的开销。 对于业务系统,需要把这个参数设置成“-1”。 在weblogic.xml 配置如下: -1 weblogic92 性能调优 其它相关参数说明请参考“weblogic.xml 部署描述符元素.doc” 3 参数更改 由于java虚拟机最大支持大约1.7G内存,一般来将,weblogic的内存分配不要超过1152MB。典型的参数(BEA资深技术支持推荐的): PRODUCTION_MODE=true JAVA_VM="-server" MEM_ARGS="-Xms1152m -Xmx1152m -XX:NewSize=384M -XX:MaxNewSize=384M -XX:SurvivorRatio=6 -XX:PermSize=64M -XX:MaxPermSize=128M" 前一个项目我们使用的参数如下,性能也很棒: MEM_ARGS="-D7802 -XX:NewSize=256M -XX:MaxNewSize=256M -Xms1024m -Xmx1024m -XX:PermSize=192m -XX:MaxPermSize=192m -XX:CodeCacheMinimu mFreeSpace=8m -XX:+PrintGCDetails -verbose:gc" WebLogic Server 的 Java 参数需要在脚本中修改某些默认 Java 值才能满足您的环境和应用程序的需要。 3.1 更改 JAVA_HOME 变量的值。 指定要使用的 SDK 的顶级目录的绝对路径名。例如,c:\bea\jrockit90。 在 Windows 或 Linux 平台上,BEA Systems 建议使用下列 JVM: · 对于开发模式,使用带有 HotSpot Client JVM 的 Sun SDK。 · 对于生产模式,使用 BEA JRockit® SDK。该 SDK 提供最优运行性能,与其他 SDK 相比,其初次启动周期可能需要较长时间。 weblogic92 性能调优 3.2 更改 JAVA_VENDOR 变量的值。 · BEA 表明您使用的是 JRockit SDK。它仅在支持 Jrockit 的平台上有效。 · Sun 表明您使用的是 Sun SDK。 · HP 和 IBM 表明您使用的是 Hewlett Packard 或 IBM 提供的 SDK。这些值仅在支持 HP 或 IBM SDK 的平台上有效。 3.3 如果堆空间不足,则可能会出现以下 Java 错误: java.lang.OutOfMemoryError <> java.lang.OutOfMemoryError <> Exception in thread "main" 此时需要修改堆空间值,堆大小调整提示 ,以下部分提供了调整 VM 堆大小的一般准则: · 堆大小应设置为一个适当的值,从而使 VM 使用的最大内存量不超过可用物理 RAM 量。如果超过该值,则 OS 会开始分页,性能也会显著降低。VM 使用的内存始终多于堆大小。除了堆大小设置,还要分配内部 VM 功能、VM 之外的本地库和永久代内存(仅适用于 Sun VM:存储类和方法所需的内存)所需的内存。 · 使用分代式垃圾收集方案时,温床大小不应超过 Java 堆总大小的一半。通常情况下,堆大小的 25% 到 40% 就已足够。 · 在生产环境中,将最小堆大小和最大堆大小设置为同一值,可以避免浪费用于时常调整堆大小所需的 VM 资源。这也适用于新一代堆大小 (Sun) 或温床大小 (BEA Jrockit)。 4 参数解释 4.1  BEA JRockit JVM 堆大小选项 weblogic92 性能调优 任务 选项 注释 设置温床 -Xns 最好尝试将温床设置得尽可能大,同时还要使垃圾收集暂停时间缩短至可以接受的程度。应用程序创建大量临时对象时,这尤其重要。 温床的最大大小不能超过最大堆大小的 95%。 设置最小堆大小 -Xms BEA 建议将最小堆大小 (-Xms) 与最大堆大小 (-Xmx) 设置为相同的值,以便将垃圾收集的消耗降至最低。 设置最大堆大小 -Xmx 如果与活动数据量相比,最大堆大小值设置得较低,则会因强制进行频繁垃圾收集而降低性能。 设置垃圾收集 -Xgc: parallel 尽早在运行 Java 应用程序时执行自适应优化 -XXaggressive:memory 这样,瓶颈检测器会在开始时以较高的频率运行,然后逐渐降低频率。此选项还可以指示 BEA JRockit 主动使用可用内存。 例如,从 java 命令行启动 WebLogic Server 实例时,可使用以下命令指定 BEA JRockit VM 堆大小值:$ java -Xns10m -Xms512m -Xmx512m 这些值的默认大小的度量单位是字节。该值后附加字母“k”或“K”表示 KB;附加“m”或“M”表示 MB;附加“g”或“G”表示 GB。上例将 10 MB 内存分配给温床堆大小,将 512 MB 内存分配给运行在 JVM 中的 WebLogic Server 实例的最小和最大堆大小。 4.2 Java HotSpot VM 堆大小选项 任务 选项 注释 设置新一代堆大小 -XX:NewSize 将 -XX:NewSize 的大小设置为堆大小的四分之一,这是一条通用规则。如果存在大量短期对象,则增大此选项的值。 在增加处理器的同时,一定要增加新一代堆大小。内存分配可以并行进行,但垃圾收集不可并行进行。 weblogic92 性能调优 任务 选项 注释 设置最大新一代堆大小 -XX:MaxNewSize 设置新一代堆大小的上限。 设置新堆大小比率 -XX:SurvivorRatio 新一代区域分为三个子区:Eden 和两个大小相等的生存空间。 配置 Eden/生存空间大小的比率。尝试将此值设置为 8,然后监视垃圾收集情况。 设置最小堆大小 -Xms 将最小堆大小 (-Xms) 与最大堆大小 (-Xmx) 设置为相同的值,以便将垃圾收集的消耗降至最低,这是一条通用规则。 设置最大堆大小 -Xmx 设置堆大小的上限。 设置大堆和私有共享内存 -XX:+UseISM -XX:+AggressiveHeap 请参阅 http://java.sun.com/docs/hotspot/ism.html 设置JVM的启动时Perm的内存 PermSize 定义Perm段的尺寸,PermSize为JVM启动时Perm的内存大小 设置最大可占用的Perm内存大小 MaxPermSize 最大可占用的Perm内存大小。在用户生产环境上一般将这两个值设为相同,以减少运行期间系统在内存申请上所花的开销。 例如,从 java 命令行启动 WebLogic Server 实例时,可使用以下命令指定 HotSpot VM 堆大小值: $ java -Xms512m -Xmx512m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=128m -XX:MaxPermSize=128m -XX:SurvivorRatio=6 这些值的默认大小的度量单位是字节。该值后附加字母“k”或“K”表示 KB;附加“m”或“M”表示 MB;附加“g”或“G”表示 GB。上例将 128 MB 内存分配给新一代堆大小和最大新一代堆大小,将 512 MB 内存分配给运行在 JVM 中的 WebLogic Server 实例的最小和最大堆大小。 5 系统缓慢问题诊断方法 有以下几种可能: weblogic92 性能调优 1) 应用服务器负载轻,每个线程处理的任务不规律,或者没有访问特别频繁的URL可能是整个数据库的效率低下所导致,或者数据库有锁产生,检查数据库连接池,非weblogic的服务器可查看”kill -3 pid”的结果中是否有大量的JDBC锁;若连接池的使用率很高或存在大量的JDBC锁,则直接查看数据库是否有严重的性能问题或是否存在大量的锁(非专业人士可通过OEM查看)。 2) 应用服务器负载轻每个线程处理的任务很有规律性可能是某些程序数据库访问效率低下所导致,检查数据库连接池,非weblogic的服务器可查看”kill -3 pid”的结果中是否有大量的JDBC锁;若连接池的使用率很高或存在大量的JDBC锁,则直接将相关URL提交PM或程序员解决。 3) 应用服务器负载较重 此种情况下,如果数据库连接池使用率高,则仍然重点查看数据库效率。否则:通过”kill -3 pid” 来做thread dump(此时可能console已经访问不了或很慢),对thread dump中”default”相关队列的线程做汇总分析,找到存在问题的程序访问,Demo程序即是问题的源头,可能是处理字符串、影像、PDF等类型的程序。 4) 内存溢出的可能性 1. OLD段溢出 这种内存溢出是最常见的情况之一,产生的原因可能是: 1) 设置的内存参数过小(ms/mx, NewSize/MaxNewSize) 2) 程序问题 单个程序持续进行消耗内存的处理,如循环几千次的字符串处理,对字符串处理应建议使用StringBuffer。此时不会报内存溢出错,却会使系统持续垃圾收集,无法处理其它请求,相关问题程序可通过Thread Dump获取(见系统问题诊断一章) 单个程序所申请内存过大,有的程序会申请几十乃至几百兆内存,此时JVM也会因无法申请到资源而出现内存溢出,对此首先要找到相关功能,然后交予程序员修改,要找到相关程序,必须在Apache日志中寻找。 weblogic92 性能调优 当Java对象使用完毕后,其所引用的对象却没有销毁,使得JVM认为他还是活跃的对象而不进行回收,这样累计占用了大量内存而无法释放。由于目前市面上还没有对系统影响小的内存分析工具,故此时只能和程序员一起定位。 2. Perm段溢出 通常由于Perm段装载了大量的Servlet类而导致溢出,目前的解决办法: 1) 将PermSize扩大,一般256M能够满足要求 2) 若别无选择,则只能将servlet的路径加到CLASSPATH中,但一般不建议这么处理 3. C Heap溢出 系统对C Heap没有限制,故C Heap发生问题时,Java进程所占内存会持续增长,直到占用所有可用系统内存。 症状:Java进程所占内存不断增长,直到使用完系统所有内存而崩溃。

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 3 金币 [ 分享文档获得金币 ]
0 人已下载

下载文档

相关文档