WEB开发网
开发学院操作系统Linux/Unix IBM WebSphere Application Server诊断和调优(一... 阅读

IBM WebSphere Application Server诊断和调优(一)

 2010-09-27 08:17:57 来源:WEB开发网   
核心提示: 自定义ClassLoader我们前面说过,自定义ClassLoader的缺省父ClassLoader是Application ClassLoader,IBM WebSphere Application Server诊断和调优(一)(6),一般的应用开发用不到它,但我们最好理解,要理解深刻,我建议

自定义ClassLoader

我们前面说过,自定义ClassLoader的缺省父ClassLoader是Application ClassLoader。一般的应用开发用不到它,但我们最好理解。因为在内存泄漏查找、应用程序部署出问题时,很多都和它有关。

譬如,内存泄漏是怎么产生的?这就涉及到ClassLoader和Class的生命周期。我曾经碰到这样一个问题:我们的程序用到了Webwork和Spring框架,当部署到Tomcat下时没有任何问题,但部署到WAS下,报告找不到Webwork的xml的DTD文件,而且Spring的日志也总是失效。Why?因为解析xml dtd时,用的是IBM的Xerces,不是我们的。而Spring日志问题是因为应用程序用的是WAS的Common-log.jar,而不是我们的。将应用的ClassLoader从默认的Parent-First,改成Parent-Last就可以解决,不过我们项目中用到其它库,又发生了其它问题。

一般来说,用到自定义ClassLoader有三种情况:

1、应用框架可以自己控制Classes的目录,并且自动部署。

我读过Jive公司的Wildfire(著名的即时通讯服务器),它自己有一套应用框架,非常灵活,遵循该框架插件规范的的第三方的plug-in放置在指定目录可以自动部署,实现某些扩展功能,如文件传输、语音聊天。

2、区分用户代码

这被广泛应用在Servlet容器和类似容器,譬如EJB Container设计中,大家看到Tomcat下有common、server、share三个目录吧(ClassLoader顺序从左到有),另外也有用户应用的WEB-INF目录,它是我们自己开发的。

3、允许Classes卸载

如果没有自定义的ClassLoader,那么我们自己应用中的classes永远都不能被卸载,因为这些类被Application ClassLoader加载后cache起来了,我们的classes一直对该ClassLoader有引用,而该系统级的ClassLoader永远都不会被卸载,除非JVM shutdown了。JSP和Servlet的动态部署就用到这个特性。

待续.......

Note: 还有JVM运行时(Runtime)架构,ClassLoader加载class过程没有总结,这两部分我觉得太重要了,但内容太多,写不完啊。

这部分内容,《Inside Java Virtual Machine》讲解非常清楚,BEA的官方网站这部分也非常不错,要理解深刻,我建议结合JProfiler工具,非常直观。

待续.......

编缉推荐阅读以下文章

  • 设置并置 WebSphere Application Server 负载均衡器和内容主机
  • 利用 WebSphere Application Server 6.1 构建 SIP 集群应用环境及其性能调优
  • 如何实现WebSphere Application Server 6集群环境下的定时服务
  • WebSphere Application Server对SIP的支持
  • IBM WebSphere Application Server诊断和调优(二)
  • WebSphere Application Server Web 2.0 功能部件包入门

上一页  1 2 3 4 5 6 

Tags:IBM WebSphere Application

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接