- 浏览: 1922070 次
- 性别:
- 来自: 福建莆田@广州
文章分类
最新评论
-
YuLimin:
关于开发者版本费用等问题请见:Have questions? ...
IBM于2009.06.19推出开发者免费版WebSphere Application Server -
YuLimin:
1、传统WAS : WebSphere Application ...
IBM于2009.06.19推出开发者免费版WebSphere Application Server -
chenlei65368:
咋加啊,总司令
微信JavaEye老炮群的入群标准-2009年之前注册JavaEye的技术人员 -
kkllmey:
怎么进呢。留个群号吧。
微信JavaEye老炮群的入群标准-2009年之前注册JavaEye的技术人员 -
Mr.TianShu:
3792274
微信JavaEye老炮群的入群标准-2009年之前注册JavaEye的技术人员
关于WAS当中FFDC报告java.util.zip.ZipException: error in opening zip file剖析及解决
问题:
WAS下FFDC日志目录中出现如下的错误,打开zip文件错误
那到底是哪个文件在打开时发生错误了呢?一头雾水了吧,汗。。。估计你会。。。
分析:
1、通过对文件的排查,确认排除了应用程序中引用jar文件损坏的可能性以及由于jar文件权限设置导致无法读取的可能性
2、打开跟踪日志级别进行剖析
设置ClassLoaderUtils跟踪级别如下
重新启动后,在trace.log里可以发现如下信息
继续分析:
首先,可以确认的是WARNING所报的是正确的,因为可以通过确认所依赖的log4j.jar log4j-core.jar jakarta-oro.jar struts-legacy.jar之类的文件不存在。
其次,这些不存在的包是由谁依赖并需要加载的,通过日志的层次关系可以知道,commons-logging.jar需要log4j.jar log4j-core.jar,struts.jar需要jakarta-oro.jar struts-legacy.jar
这样唯一的可能就是各自的jar包中META-INF\MANIFEST.MF里声明了这些jar的依赖关系了。
打开commons-logging.jar,发现其中的META-INF\MANIFEST.MF里包含了
Class-Path: log4j.jar log4j-core.jar
打开struts.jar,发现其中的META-INF\MANIFEST.MF里包含了
Class-Path: commons-beanutils.jar commons-collections.jar commons-dig
ester.jar commons-logging.jar commons-validator.jar jakarta-oro.jar s
truts-legacy.jar
于是真相大白了,解决的办法要么增加相应版本所依赖的jar包,要么就是简单地删除Class-Path,根据应用程序的需要进行确认并使用之,[color=red]建议用前者进行解决。要么就升级这些组件包。[/color]
代码解读
不厚道,在Manager.Ffdc.log里把jarFileName也打印出来,就更容易知道是什么问题了。
可见打印出有意义的信息对于分析问题是多少的重要。。。
附带信息:将commons-logging.jar与struts.jar与Spring 2.5.5发布所带的包进行对比分析,发现Spring带的commons-logging.jar包没有带有Class-Path这个条目。
对比
注意实现的版本问题是不同的
struct.jar包的条目内容不同
对比
也要注意实现的版本问题是不同的
问题:
WAS下FFDC日志目录中出现如下的错误,打开zip文件错误
FFDC Exception:java.util.zip.ZipException SourceId:com.ibm.ws.classloader.ClassLoaderUtils.addDependents ProbeId:238 Reporter:java.lang.Class@7c537c91 java.util.zip.ZipException: error in opening zip file at java.util.zip.ZipFile.open(Native Method) at java.util.zip.ZipFile.<init>(ZipFile.java:114) at java.util.jar.JarFile.<init>(JarFile.java:133) at java.util.jar.JarFile.<init>(JarFile.java:70) at com.ibm.ws.classloader.ClassLoaderUtils.addDependents(ClassLoaderUtils.java:96) at com.ibm.ws.classloader.ClassLoaderUtils.addDependents(ClassLoaderUtils.java:143) at com.ibm.ws.classloader.ClassLoaderUtils.addDependentJars(ClassLoaderUtils.java:61) at com.ibm.ws.classloader.ClassGraph.<init>(ClassGraph.java:115) at com.ibm.ws.classloader.ClassLoaderManager.initialize(ClassLoaderManager.java:202) at com.ibm.ws.classloader.ClassLoaderManager.<init>(ClassLoaderManager.java:166) at com.ibm.ws.runtime.component.DeployedApplicationImpl.start(DeployedApplicationImpl.java:891) at com.ibm.ws.runtime.component.ApplicationMgrImpl.startApplication(ApplicationMgrImpl.java:740) at com.ibm.ws.runtime.component.ApplicationMgrImpl.start(ApplicationMgrImpl.java:2092) at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:437) at com.ibm.ws.runtime.component.CompositionUnitImpl.start(CompositionUnitImpl.java:122) at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.start(CompositionUnitMgrImpl.java:380) at com.ibm.ws.runtime.component.CompositionUnitMgrImpl.access$300(CompositionUnitMgrImpl.java:105) at com.ibm.ws.runtime.component.CompositionUnitMgrImpl$CUInitializer.run(CompositionUnitMgrImpl.java:928) at com.ibm.wsspi.runtime.component.WsComponentImpl$_AsynchInitializer.run(WsComponentImpl.java:349) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1527)
那到底是哪个文件在打开时发生错误了呢?一头雾水了吧,汗。。。估计你会。。。
分析:
1、通过对文件的排查,确认排除了应用程序中引用jar文件损坏的可能性以及由于jar文件权限设置导致无法读取的可能性
2、打开跟踪日志级别进行剖析
Application servers > memXXX > Logging and Tracing > Change log detail levels
设置ClassLoaderUtils跟踪级别如下
*=info: com.ibm.ws.classloader.ClassLoaderUtils=finest
重新启动后,在trace.log里可以发现如下信息
0000001e ClassLoaderUt > addDependents Entry /home/xxx/lib/struts/commons-logging.jar 0000001e ClassLoaderUt 3 dependent classpath detected: log4j.jar log4j-core.jar 0000001e ClassLoaderUt 3 adding /home/xxx/lib/struts/log4j.jar 0000001e ClassLoaderUt > addDependents Entry /home/xxx/lib/struts/log4j.jar 0000001e FfdcProvider I com.ibm.ws.ffdc.impl.FfdcProvider logIncident FFDC1003I: FFDC Incident emitted on /usr/IBM/WebSphere/AppServer/profiles/XXX/logs/ffdc/memXXX_f3c3750_08.12.23_16.26.42.85048008.txt com.ibm.ws.classloader.ClassLoaderUtils.addDependents 238 0000001e ClassLoaderUt 3 WARNING: could not open /home/xxx/lib/struts/log4j.jar : error in opening zip file 0000001e ClassLoaderUt < addDependents Exit /home/xxx/lib/struts/log4j.jar 0000001e ClassLoaderUt 3 adding /home/xxx/lib/struts/log4j-core.jar 0000001e ClassLoaderUt > addDependents Entry /home/xxx/lib/struts/log4j-core.jar 0000001e ClassLoaderUt 3 WARNING: could not open /home/xxx/lib/struts/log4j-core.jar : error in opening zip file 0000001e ClassLoaderUt < addDependents Exit /home/xxx/lib/struts/log4j-core.jar 0000001e ClassLoaderUt < addDependents Exit /home/xxx/lib/struts/commons-logging.jar ...... 0000001e ClassLoaderUt > addDependents Entry /home/xxx/lib/struts/struts.jar 0000001e ClassLoaderUt 3 dependent classpath detected: commons-beanutils.jar commons-collections.jar commons-digester.jar commons-logging.jar commons-validator.jar jakarta-oro.jar struts-legacy.jar 0000001e ClassLoaderUt 3 adding /home/xxx/lib/struts/jakarta-oro.jar 0000001e ClassLoaderUt > addDependents Entry /home/xxx/lib/struts/jakarta-oro.jar 0000001e ClassLoaderUt 3 WARNING: could not open /home/xxx/lib/struts/jakarta-oro.jar : error in opening zip file 0000001e ClassLoaderUt < addDependents Exit /home/xxx/lib/struts/jakarta-oro.jar 0000001e ClassLoaderUt 3 adding /home/xxx/lib/struts/struts-legacy.jar 0000001e ClassLoaderUt > addDependents Entry /home/xxx/lib/struts/struts-legacy.jar 0000001e ClassLoaderUt 3 WARNING: could not open /home/xxx/lib/struts/struts-legacy.jar : error in opening zip file 0000001e ClassLoaderUt < addDependents Exit /home/xxx/lib/struts/struts-legacy.jar 0000001e ClassLoaderUt < addDependents Exit ......
继续分析:
首先,可以确认的是WARNING所报的是正确的,因为可以通过确认所依赖的log4j.jar log4j-core.jar jakarta-oro.jar struts-legacy.jar之类的文件不存在。
其次,这些不存在的包是由谁依赖并需要加载的,通过日志的层次关系可以知道,commons-logging.jar需要log4j.jar log4j-core.jar,struts.jar需要jakarta-oro.jar struts-legacy.jar
这样唯一的可能就是各自的jar包中META-INF\MANIFEST.MF里声明了这些jar的依赖关系了。
打开commons-logging.jar,发现其中的META-INF\MANIFEST.MF里包含了
Class-Path: log4j.jar log4j-core.jar
打开struts.jar,发现其中的META-INF\MANIFEST.MF里包含了
Class-Path: commons-beanutils.jar commons-collections.jar commons-dig
ester.jar commons-logging.jar commons-validator.jar jakarta-oro.jar s
truts-legacy.jar
于是真相大白了,解决的办法要么增加相应版本所依赖的jar包,要么就是简单地删除Class-Path,根据应用程序的需要进行确认并使用之,[color=red]建议用前者进行解决。要么就升级这些组件包。[/color]
代码解读
ClassLoaderUtils.java public static String[] addDependentJars(String paths[]) { ArrayList newPaths = new ArrayList(Arrays.asList(paths)); for(int i = 0; i < paths.length; i++) if(paths[i].toLowerCase().endsWith(".jar")) addDependents(paths[i], newPaths); String result[] = new String[newPaths.size()]; result = (String[])(String[])newPaths.toArray(result); return result; } private static void addDependents(String jarFileName, List classpath) { // ...省略。。。 jar = new JarFile(jarFileName);// 错误在这一行 manifest = jar.getManifest(); attrs = manifest.getMainAttributes(); dependents = attrs.getValue(java.util.jar.Attributes.Name.CLASS_PATH);// 获取依赖包路径 StringTokenizer tokens = new StringTokenizer(dependents, " "); do { if(!tokens.hasMoreTokens()) break; String nextDependent = tokens.nextToken(); String nextDependentFullPath = (new StringBuilder()).append(prefix).append(nextDependent). if(PathUtils.listAddNoDup(classpath, nextDependentFullPath)) { addDependents(nextDependentFullPath, classpath); // 迭代加载之 } } while(true); // ...省略。。。 在catch代码块中 catch(ZipException ze) { Manager.Ffdc.log(ze, ClassLoaderUtils.class, "com.ibm.ws.classloader.ClassLoaderUtils.addDependents", "238" + jarFileName); if(debugEnabled) Tr.debug(tc, (new StringBuilder()).append("WARNING: could not open ").append(jarFileName).append(" : ").append(ze.getLocalizedMessage()).toString()); } catch(IOException ioe) { Manager.Ffdc.log(ioe, ClassLoaderUtils.class, "com.ibm.ws.classloader.ClassLoaderUtils.addDependents", "246"); if(debugEnabled) Tr.debug(tc, (new StringBuilder()).append("WARNING: I/O exception ").append(jarFileName).append(" : ").append(ioe.getLocalizedMessage()).toString()); }
不厚道,在Manager.Ffdc.log里把jarFileName也打印出来,就更容易知道是什么问题了。
可见打印出有意义的信息对于分析问题是多少的重要。。。
附带信息:将commons-logging.jar与struts.jar与Spring 2.5.5发布所带的包进行对比分析,发现Spring带的commons-logging.jar包没有带有Class-Path这个条目。
Manifest-Version: 1.0 Created-By: Apache Ant 1.5.1 Extension-Name: org.apache.commons.logging Specification-Vendor: Apache Software Foundation Specification-Version: 1.0 Implementation-Vendor: Apache Software Foundation Implementation-Version: 1.0.3 Class-Path: log4j.jar log4j-core.jar
对比
Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Created-By: Apache Maven Built-By: dlg01 Build-Jdk: 1.4.2_16 Implementation-Title: Commons Logging Implementation-Vendor: Apache Software Foundation Implementation-Vendor-Id: org.apache Implementation-Version: 1.1.1 Specification-Title: Commons Logging Specification-Vendor: Apache Software Foundation Specification-Version: 1.0 X-Compile-Source-JDK: 1.2 X-Compile-Target-JDK: 1.1 Extension-Name: org.apache.commons.logging
注意实现的版本问题是不同的
struct.jar包的条目内容不同
Manifest-Version: 1.0 Created-By: Apache Ant 1.5.1 Extension-Name: Struts Framework Specification-Title: Struts Framework Specification-Vendor: Apache Software Foundation Specification-Version: 1.1 Implementation-Title: Struts Framework Implementation-Vendor: Apache Software Foundation Implementation-Vendor-Id: org.apache Implementation-Version: 1.1 Class-Path: commons-beanutils.jar commons-collections.jar commons-dig ester.jar commons-logging.jar commons-validator.jar jakarta-oro.jar s truts-legacy.jar
对比
Manifest-Version: 1.0 Ant-Version: Apache Ant 1.6.1 Created-By: 1.3.1_04-b02 (Sun Microsystems Inc.) Extension-Name: Struts Framework Specification-Title: Struts Framework Specification-Vendor: The Apache Software Foundation Specification-Version: 1.2.9 Implementation-Title: Struts Framework Implementation-Vendor: The Apache Software Foundation Implementation-Vendor-Id: org.apache Implementation-Version: 1.2.9 Class-Path: commons-beanutils.jar commons-digester.jar commons-fileup load.jar commons-logging.jar commons-validator.jar jakarta-oro.jar
也要注意实现的版本问题是不同的
发表评论
-
如何并行启动WAS应用服务器?而不是按顺序启动?
2022-06-14 16:07 490如何并行启动WAS应用服务器?而不是按顺序启动? 登录ISC ... -
关于图片文件旋转JPEG与EXIF信息
2019-10-30 21:44 1039关于图片文件旋转JPEG与 ... -
通过Liberty存储库下载保存组件,再分发并离线安装之操作步骤
2019-07-05 16:17 1026通过Liberty存储库下载保存组件,再分发并离线安装之操作步 ... -
Effective Java Third Edition中文版勘误列表
2018-10-24 01:03 2247相关资源: Eclipse JDK 9 ... -
Effective Java Third Edition中文翻译术语表讨论专用贴
2018-10-24 00:44 1987在书正式出来之前,把术语表放出来讨论。 翻译时的原则: 1 ... -
工作生活运动都不误!KUNG攻公路自行车2018款Horizon装备之
2018-09-08 18:12 2151感谢贺总,感谢KUNG攻,接下来就是准备开始对飙轻量级自行车与 ... -
WAS 8.5在HP-UX Itanium上无法图形化安装启动IIM之解
2013-11-11 17:20 3012继之前写的“WAS 8.5在AIX上无法启动图形化概要管理工具 ... -
IBM WebSphere Application Liberty Profile苗条瘦身之道初探及剖析
2012-08-12 19:57 34441.1 背景信息 IBM WebSphere Applicat ... -
停止启用了安全性的WAS Server而不手动输入密码之第二种选择
2011-05-07 23:08 4744停止启用了安全性的WAS Server而不手动输入密码之第二种 ... -
IBM WebSphere Application Server V6.1 Fix Pack 37于2011.04.04发布
2011-04-05 14:25 1927IBM WebSphere Application Serve ... -
WAS证书过期替换之独立WAS Server之文字操作版
2010-12-31 20:32 5853WAS证书过期替换之独立WAS Server之文字操作版 一 ... -
WAS证书过期替换之DM + NodeAgent + WAS Server网络拓扑结构之文字操作版
2010-12-31 20:28 3177WAS证书过期替换之DM + No ... -
通过配置文件来修改WAS控制台Session过期时间的方法
2010-06-17 18:21 4761通过配置文件来修改WAS控制台Session过期时间的方法 ... -
Tomcat 7之无需JDK只需JRE与无需web.xm及J2SE 6.0之真实与谎言?
2010-06-14 18:48 4601Tomcat 7之无需JDK只需JRE与无需web.xm及J2 ... -
《程序员 Java天下事,2010.01 低碳时代之Java风云》8卜被退稿
2010-06-12 10:47 2593这一篇《程序员 Jav ... -
IBM WebSphere Application Server V6.1 Fix Pack 29于2010.01.18发布
2010-01-23 21:35 3211IBM WebSphere Application Serve ... -
IBM WebSphere Application Server V7.0 Fix Pack 7于2009.11.13发布
2009-11-18 18:11 1911IBM WebSphere Application Serve ... -
隆重推荐《冒号课堂——编程范式与OOP思想》
2009-10-26 18:37 4044背景信息: 冒号课堂的系列博客质量相当高,有订阅此博客的X ... -
IBM WebSphere Application Server V6.1 Fix Pack 27于2009.09.21发布
2009-10-10 11:50 1754IBM WebSphere Application Serve ... -
停个车真的不是一般的难ReentrantLock.lock之LockSupport.park
2009-07-17 16:41 3397今碰到一问题,原以为代码用上 ReentrantLock.lo ...
相关推荐
当遇到系统问题时,快速有效地收集和分析故障相关数据(即FFDC,全称为"Fault Finding, Diagnosis and Correction")对于定位和解决问题至关重要。本篇文章将详细解释如何使用LXCC(Lenovo XClarity Controller)在...
对于ThinkSystem服务器用户来说,LXCC(Lenovo XClarity Controller)是一个强大的管理工具,能够帮助用户轻松收集FFDC日志,以便于分析和解决可能出现的硬件或系统问题。本文将详细阐述如何使用LXCC进行FFDC日志的...
在IT行业中,FFDC (First Failure Data Capture) 是一种故障诊断技术,用于在系统出现故障时收集关键的日志和诊断信息,以便分析和解决问题。对于SD530 LXCC(一种可能的服务器或网络设备),了解如何有效地收集FFDC...
WAS 启动错误诊断需要了解 WAS 的启动过程和配置文件,同时需要具备基本的诊断技术,如日志文件分析、堆栈跟踪分析等。只有通过这些技术和方法,才能快速定位和解决 WAS 启动错误。 知识点: * WAS 启动过程解析 *...
### IMM2和FFDC日志收集方法 #### IMM2日志收集方法 ##### 1. 通过服务器板载管理口收集日志 - **设备准备**:首先需要准备一根直连线,用于连接服务器的板载管理口(Systems-management(Ethernet),即IMM2端口)...
FFDC 这是一个模板(不是 leiningen),结合了几个开始使用的项目。 包括: 与朋友的朋友 datomic pro(应该很容易被 datomic 免费版替换) 栗子模板与所有不错的重新加载的东西 freactive 而不是 om cljs路由...
通过查询官方文档中的错误码列表,可以获取关于该错误的详细解释及可能的解决方案。 4. **使用db2dart进行诊断**:如果db2diag.log中的信息不足以解决问题,可以尝试使用`db2dart`命令来进行更深入的诊断。例如,...
"ffdc-vue-app-v2" 是一个基于 Vue.js 框架的前端应用程序的第二个版本。Vue.js 是一个轻量级、高性能的渐进式JavaScript框架,它用于构建用户界面,尤其适合单页应用(SPA)开发。Vue 的核心库专注于视图层,易于...
关于扩展性在消息处理过程中采用了管道模式的设计,借鉴了Open Web Interface的思想和一些规范来打造整个消息处理的模型,使消息处理变得更加轻便。同时SDK内部内置了一个简单的依赖注入实现 IDependencyResolver,...
要运行该示例,请转至子项目目录-ffdc-authorization-code和ffdc-client-credentials ,并按照README.md文件中的步骤进行操作,以获取更多详细信息。 这些示例客户端应用程序是根据MIT许可证发布的。 有关详细信息...
该设备被标识为ID 15c2:ffdc SoundGraph Inc.。iMON PAD遥控器。 但是,LCD面板与我在互联网上看到的其他面板不同。 它具有:-用于消息和时钟的12个文本字符; -3个风扇指示灯(自动更新); -温度指示器(自动...
如果在分析 NSD 文件后仍无法解决问题,可以通过以下方式联系 IBM 支持服务寻求进一步的帮助: 1. **访问 IBM 支持网站**:登录 IBM 的官方网站,查找相关的技术支持文档和解决方案。 2. **提交技术支持案例**:在 ...
要运行该示例,请转至子项目目录ffdc-authorization-code和ffdc-client-credentials ,并按照README.md文件中的步骤进行操作,以了解更多详细信息。 这些示例客户端应用程序是根据MIT许可证发布的。 有关详细信息,...
日志信息采集是指在 IBM 服务器报错时,通过特定的方法采集错误日志,以便快速定位和解决问题。这种方法可以省去许多时间和烦恼,提高服务器的可用性和稳定性。 在日志信息采集中,需要按照特定的步骤进行操作。...
8. **Dynamic tracing和Software FFDC**:这些功能提高了问题诊断的效率,使得系统管理员能够更快地定位并解决系统故障,保障了系统的稳定运行。 #### PowerHA Overview 除了AIX 7本身的功能增强外,PowerHA 7.1...
接着,数据分析阶段包括使用NSD工具的基本概念,定位宕机时的任务及堆栈,识别相关的数据库,以及其他相关信息。NSD是Lotus Domino产品中一个非常重要的故障诊断工具,它能帮助用户定位问题和收集故障发生时的第一手...
1. **电赛论文(1).docx**:这很可能是一份关于这个项目的详细报告或论文,包含了项目的背景、设计思路、实现方法、实验结果以及可能的改进方案等。通过阅读这份文档,我们可以深入了解手势识别的具体实现细节和其在...
p5服务器主要使用了三大技术来隔离系统错误:Platform IPL、FFDC和操作系统自带的错误报告机制和诊断工具。Platform IPL是系统初始化时,会运行自检程序,能够检测到部件错误;FFDC承担系统监控的任务;操作系统自带...
尺寸:长54mmX宽26mmX高24mm 主要芯片: HK14FD-DC12V-SHG 双路常开常闭继电器 工作电压:12V(工作电压等于继电器额定工作电压) 特点:1、双路输出具有工作指示灯。 2、板子功耗小于1W 3、额定切换电流5A以内 ...