Oracle WebLogic 10 性能优化 实际案例

         最近应朋友邀请参与一个生产环境下WebLogic 性能诊断工作,特将初步的诊断和分析过程记录下来,与大家分享。
          环境是 HPUX 64bit OS, WebLogic 10. 问题是在业务高峰期间可能会无响应。(不知到 weblogic具体是什么状态,从进程看还是活着的,既没有挂,也没有崩). 怎么优化?
          要想优化,先要明确问题在哪里,然后选择优化哪个部分会比较可行。
         到这里先整点方法论的东西,简单的说,总结为“三板斧”,
          板斧1:明确先“砍”谁,是负责开发的弟兄,还是负责weblogic管理的同仁,这个需要调动诸位的情商了。
          板斧2:确定了目标,就要开始搜集证据,记住,一切凭事实说话。选择业务高峰时,每1-5钟采集一次,包括 CPU, Network,JVM,JDBC(如果用到数据库),JMS(如果用到),线程池,响应时间长的请求等等。
          板斧3:证明就是那个“谁谁谁”的问题。诸位一定要有理有利有节,做技术的在这里不得罪人太难了,各位看官,自己多发挥智商和情商。
           本案中,由于形势不明,只能先各打50大板,看看情况再说。
          搜集证据,可以使用  HPUX 的glancer 或 top,采集操作系统数据,以及使用weblogic的管理监控界面,采集数据,这么做,操作太多,直接导致心情烦躁。本案采用了一个高级工具Foglight 采集的数据“相当”详细,丰富,推荐大家试试(如果真想用,请拨电话01062139280)。还有一个建议,采用开源的Hyperic HQ 也能用,如需帮助,这个网址不错 http://hq.innovatedigital.com
          数据采集后,先看看无响应的问题,有工具就是好,Foglight 提示出几个可疑之处:有那么几个请求变慢了,线程持使用率高近100%,等待请求数量增加了几百个。业务高峰后,恢复了正常。

          java 性能优化, 可以从两个方向着手,一个是代码(包括java代码,SQL等),另外一方面就是资源分配和使用情况。本案中,线程池在业务高峰时满负荷,可以加大线程池。线程池的大小上限直接与操作系统和CPU数量和负载相关,然后可以看看CPU的使用率,发现不到30%,JVM的使用率低于50%。看来该机器有很多富余的计算能力。

         如果加快那几个请求的处理速度,也是可以缓解问题的发生。这就需要从代码实现分析,慢在哪个方法或服务上,Folgiht可以采集请求的执行路径一直到方法级,和sql 语句。从Foglight采集的数据可以看到是某几个SQL语句,和几个方法的执行时间占用较多,到这里,可以给开发人员提点建议了。
        证明到此,如何解决,给出怎样线程池数量合适,如何修改代码性能会很大提升? 这是后话,有机会再分享。
        欢迎关注 Hyperic HQ    免费,开源。
         www.InnovateDigital.com