问题现象
WAS加载代码时,模块开发怀疑是WebSphere本身加载某个类的代码出现了问题。但不知道怎么排查。故寻求帮助。
问题分析
WebSphere本身是提供相关类加载跟踪的方法的。
解决方案
经过排查资料。如果实际诊断中,能够明确断定是某个类的加载出了问题,在WebSphere的控制台开启【详细类装入】功能:选择“服务器类型/具体server/进程定义/Java虚拟机”,选择“详细类装入”
重启WAS之后,在native_stderr.log中,可以看到类的加载信息,例如:
class load: org.apache.taglibs.standard.tlv.JstlBaseTLV
from: file:/D:/IBM.profiles/XXX/installedApps/wdanNode02Cell/myfaces-example-simple-1_1_9_war.ear/myfaces-example-simple-1.1.9.war/WEB-INF/lib/jstl-1.2.jar
如果还需要类加载的更详细信息,可以在诊断跟踪中设置
*=info: com.ibm.ws.classloader.*=all
登陆管理控制台,左边导航树选择“故障诊断/日志和跟踪”,然后在右面区域选择进程名(/诊断跟踪。
选择“更改日志详细信息级别
设置*=info: com.ibm.ws.classloader.*=all,保存。
重启WAS。在$profile/logs/server1/trace.log中,就可以看到类加载的详细信息。例如:
> loadClass name=com.ibm.isclite.container.collaborator.PortletServletCollaborator
…
com.ibm.ws.classloader.CompoundClassLoader@3f603f6
Local ClassPath: D:\XXX\XXX\XXX\XXX\isclite.ear\struts.jar;
…
Delegation Mode: PARENT_FIRST
[23-12-31 12:49:38:371 CST] 0000000a CompoundClass < loadClass Exit