Weblogic classloader分析-阿里云开发者社区

开发者社区> 科技小能手> 正文

Weblogic classloader分析

简介: 最近工作特别忙,现在才稍有点时间,准备探测一下weblogic的classloader。classloader的原理google上铺天盖地,这里就不再提及了。 首先采用两个用例测试一下基本的web应与EJB应用的classloader层次结构。
+关注继续查看

最近工作特别忙,现在才稍有点时间,准备探测一下weblogic的classloader。classloader的原理google上铺天盖地,这里就不再提及了。

首先采用两个用例测试一下基本的web应与EJB应用的classloader层次结构。测试的源代码提供在附件中了:

1. web应用,包括两个同内容不同名的JSP和两个同内容不同名的Servlet. JspLoader.jsp, jspLoader2.jsp, ServletLoader, ServletLoader2.

2. EJB应用   包括一个简单的EJB3.0 bean, LoaderBean和客户端EjbClient.

测试结果:

JSPLoader.Jsp:
Level1: sun.misc.Launcher$ExtClassLoader@18991b
Level2: sun.misc.Launcher$AppClassLoader@18ad61
Level3: weblogic.utils.classloaders.GenericClassLoader@a175d5 finder: weblogic.utils.classloaders.CodeGenClassFinder@27c1685 annotation:
Level4: weblogic.utils.classloaders.FilteringClassLoader@6c10df finder: weblogic.utils.classloaders.CodeGenClassFinder@6c1153 annotation:
Level5: weblogic.utils.classloaders.GenericClassLoader@6c1169 finder: weblogic.utils.classloaders.CodeGenClassFinder@6c11e2 annotation: TestClassLoader@
Level6: weblogic.utils.classloaders.ChangeAwareClassLoader@7f4e75 finder: weblogic.utils.classloaders.CodeGenClassFinder@7f4eea annotation: TestClassLoader@TestClassLoader.war
Level7: weblogic.servlet.jsp.TagFileClassLoader@816eac finder: weblogic.utils.classloaders.CodeGenClassFinder@816f22 annotation:
Level8: weblogic.servlet.jsp.JspClassLoader@1150af3 finder: weblogic.utils.classloaders.CodeGenClassFinder@1150b67 annotation:
SystemClassLoader: sun.misc.Launcher$AppClassLoader@18ad61

JSPLoader2.Jsp:
Level1: sun.misc.Launcher$ExtClassLoader@18991b
Level2: sun.misc.Launcher$AppClassLoader@18ad61
Level3: weblogic.utils.classloaders.GenericClassLoader@a175d5 finder: weblogic.utils.classloaders.CodeGenClassFinder@27c1685 annotation:
Level4: weblogic.utils.classloaders.FilteringClassLoader@6c10df finder: weblogic.utils.classloaders.CodeGenClassFinder@6c1153 annotation:
Level5: weblogic.utils.classloaders.GenericClassLoader@6c1169 finder: weblogic.utils.classloaders.CodeGenClassFinder@6c11e2 annotation: TestClassLoader@
Level6: weblogic.utils.classloaders.ChangeAwareClassLoader@7f4e75 finder: weblogic.utils.classloaders.CodeGenClassFinder@7f4eea annotation: TestClassLoader@TestClassLoader.war
Level7: weblogic.servlet.jsp.TagFileClassLoader@816eac finder: weblogic.utils.classloaders.CodeGenClassFinder@816f22 annotation:
Level8: weblogic.servlet.jsp.JspClassLoader@1150af3 finder: weblogic.utils.classloaders.CodeGenClassFinder@1150b67 annotation:
SystemClassLoader: sun.misc.Launcher$AppClassLoader@18ad61 

ServletLoader:
Level1: sun.misc.Launcher$ExtClassLoader@18991b
Level2: sun.misc.Launcher$AppClassLoader@18ad61
Level3: weblogic.utils.classloaders.GenericClassLoader@a175d5 finder: weblogic.utils.classloaders.CodeGenClassFinder@27c1685 annotation: 
Level4: weblogic.utils.classloaders.FilteringClassLoader@6c10df finder: weblogic.utils.classloaders.CodeGenClassFinder@6c1153 annotation: 
Level5: weblogic.utils.classloaders.GenericClassLoader@6c1169 finder: weblogic.utils.classloaders.CodeGenClassFinder@6c11e2 annotation: TestClassLoader@
Level6: weblogic.utils.classloaders.ChangeAwareClassLoader@7f4e75 finder: weblogic.utils.classloaders.CodeGenClassFinder@7f4eea annotation: TestClassLoader@TestClassLoader.war

SystemClassLoader: sun.misc.Launcher$AppClassLoader@18ad61

ServletLoader2:

Level1: sun.misc.Launcher$ExtClassLoader@18991b
Level2: sun.misc.Launcher$AppClassLoader@18ad61
Level3: weblogic.utils.classloaders.GenericClassLoader@a175d5 finder: weblogic.utils.classloaders.CodeGenClassFinder@27c1685 annotation: 
Level4: weblogic.utils.classloaders.FilteringClassLoader@6c10df finder: weblogic.utils.classloaders.CodeGenClassFinder@6c1153 annotation: 
Level5: weblogic.utils.classloaders.GenericClassLoader@6c1169 finder: weblogic.utils.classloaders.CodeGenClassFinder@6c11e2 annotation: TestClassLoader@
Level6: weblogic.utils.classloaders.ChangeAwareClassLoader@7f4e75 finder: weblogic.utils.classloaders.CodeGenClassFinder@7f4eea annotation: TestClassLoader@TestClassLoader.war

SystemClassLoader: sun.misc.Launcher$AppClassLoader@18ad61

EJB:
Level1: sun.misc.Launcher$ExtClassLoader@18991b
Level2: sun.misc.Launcher$AppClassLoader@18ad61
Level3: weblogic.utils.classloaders.GenericClassLoader@a175d5 finder: weblogic.utils.classloaders.CodeGenClassFinder@27c1685 annotation: 
Level4: weblogic.utils.classloaders.FilteringClassLoader@1e8de86 finder: weblogic.utils.classloaders.CodeGenClassFinder@1e8defa annotation: 
Level5: weblogic.utils.classloaders.GenericClassLoader@1e8df10 finder: weblogic.utils.classloaders.CodeGenClassFinder@1e8df89 annotation: TestEJB3Loader@

SystemClassLoader: sun.misc.Launcher$AppClassLoader@18ad61
从上面的结果首先以下结论:

同一Web应用的JSP或Servlet,其classloader的前六层是一样的(严格的说是7层,因为bootstrapClassLoader没输出,原因这里也不提了)。

对于JSP页面多了两层Classloader,TagFileClassLoader 和JspClassLoader,从上面结果可以看每个JSP文件对应一个JspClassLoader,而整个web应用的JSP页面共用一个TagFileClassLoader。

再看EJB,classloader的前三层与web应用的前三层是一样的,基本以为GenericClassLoader是用来加载weblogic的产品内部的相关类,前两层用来加载JDK的类,具体情况以后再做论述。

weblogic11g p3也是就10.3.4(oracle把weblogic的这个版本号搞得人晕头转向,后附一个版本对照表)添加了一个类分析工具Classloader Analysis Tool,以web应用的方式法提供。

在开发模式下可以用http://host:port/wls-cat来访问。可以帮助解决类冲突或研究weblogic的classloader结构,这里有两个文章可以参考。

http://blog.eisele.net/2011/01/using-new-weblogic-classloader-analysis.html https://blogs.oracle.com/jeffwest/entry/weblogic_1034_classloader_analysis_tool

                                         版本对照表

Release                              GA Date       Pre_Sup_Ends   Ext_Sup_Ends    Sus_Sup_Ends
WebLogic Server 12.1.x (12c)       - Dec 2011       Dec 2016       Dec 2019         Indefinite
WebLogic Server 11gR1 PS3 (10.3.4) - 15 Jan 2011    Jun 2014       Jun 2017         Indefinite    
WebLogic Server 11gR1 PS2 (10.3.3) - April 2010     Jun 2014       Jun 2017         Indefinite
WebLogic Server 11gR1 PS1 (10.3.2) - Nov 2009       Jun 2014       Jun 2017         Indefinite
WebLogic Server 11g (10.3.1)       - Jul 2009       Mar 2013       Mar 2015         Indefinite
WebLogic Server 10.3               - Aug 2008       Jan 2014       Jan 2017         Indefinite
WebLogic Server 10.0               - Mar 2007       Mar 2013       Mar 2015         Indefinite
WebLogic Server 9.x                - Nov 2006       Nov 2011       Nov 2013         Indefinite


本文转自 anranran 51CTO博客,原文链接:http://blog.51cto.com/guojuanjun/1024159


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
深度分析Java的ClassLoader机制(源码级别)
深度分析Java的ClassLoader机制(源码级别) 写在前面:Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取到内存中,JVM在加载类的时候,都是通过ClassLoader的loadClass()方法来加载class的,loadClass使用双亲委派模式。
1302 0
loadrunner常用计数器分析
内存是第一个监视对象,确定系统瓶颈的第一个步骤就是排除内存问题。内存短缺的问题可能会引起各种各样的问题。 Object(对象) Counters Description(描述) 参考值 Memory Available MBytes 物理内存的可用数(单位 Mbytes)。
917 0
关于奇怪的并行进程分析(二)
前几天的并行问题自己分析了下,也算有了一些进展,但是目前还没有找到让人信服的理由,有些读者也比较关心这个问题,所以第二篇中会把自己的分析过程写出来,第三篇中应该会对这个问题做一个了结。
769 0
理解和使用Oracle分析工具LogMiner
用LogMiner             理解和使用Oracle   8i分析工具LogMiner                 Oracle   LogMiner   是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle   重作日志文件(归档日志文件)中的具体内容,特别是,该工具可以分析出所有对于数据库操作的DML(insert、update、delete等)语句,另外还可分析得到一些必要的回滚SQL语句。
1169 0
windows管理员利器之用Log Parser Studio分析IIS日志(附逐浪CMS官方命令集)
原文:windows管理员利器之用Log Parser Studio分析IIS日志(附逐浪CMS官方命令集) Log Parser Studio是一个强大的IIS图形分析工具,值得推荐。
1520 0
用WinDbg分析Debug Diagnostic Tool生成的Userdump文件
1、下载WinDbg(Debugging Tools for Windows):http://www.microsoft.com/whdc/devtools/debugging/default.mspx 2、安装WinDbg 3、运行WinDbg 4、配置Symbol文件路径: File>Symbol File Path,输入:SRV*c:\websymbols*http://msdl.
869 0
23706
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《Nacos架构&原理》
立即下载
《看见新力量:二》电子书
立即下载
云上自动化运维(CloudOps)白皮书
立即下载