WebSphere Application Server 是一个基于 Java 的 Web 应用程序服务器,它构建在开放标准的基础之上,能帮助您部署与管理从简单的 Web 站点到强大的电子商务解决方案的诸多应用程序。它遵循 J2EE 并为 Java 组件、XML 和 Web 服务提供了一个可移植的 Web 部署平台,这个平台能够与数据库交互并提供动态 Web 内容。
随着WebSphere Application Server产品在中间市场的份额不断增加,使用WebSphere Application Server作为IT基础产品的企业越来越多,作为我们企业的IT部门,很重要的一部分工作就是管理WebSphere Application Server。由于业务系统的复杂性,以及IT系统的庞大等多种原因,我们的系统不可避免的会出现这样那样的问题,要定定位和解决这些问题,WebSphere Application Server的日志将起了很关键作用。怎么管理以及查看这些日志呢?
本文作者所一直从事WebSphere Application Server的相关服务工作,积累了许多WebSphere Application Server的管理经验。我们希望能够通过一系列的文章与读者分享这些经验想,帮助您更好管理好你的WebSphere Application Server。
本文将从问题诊断入手,在解决一系列具体问题的过程中,介绍配置日志的策略以及具体参数的用法,为您提供诊断问题的途经以及指定日志策略的方式和方法。
问题诊断的方法
在我们基于J2EE的应用程序中,问题的出现可能在各个相关的环节出现。所以首先要明确问题是发生在哪个组建上的,我们可以通过测试单个组件,检查他们成功或者失败来把问题进行一个隔离。从而分析相关日志来定位问题。下图是一些常用的测试方法以及相关日志的位置。
当我们的系统出现不能访问现象时,我们一般按照一下步骤进行分析:
1.使用浏览器通过80端口访问应用(例如:http://localhost/myWeb/)
2.使用浏览器通过9080(根据实际端口而定)端口访问应用(例如:http://localhost:9080/myWeb)如果访问正常,说明HTTP server的请求没有正常转发,这时候通过http://localhost来验证HTTP 服务器是否正常启动,如果正常说明HTTP server 运行正常,此时请检查http_plugin.log查看插件日志,并且查看HTTP server 的配置文件httpd.conf,查找WebSpherePluginConfig 所加载的plugin-cfg.xml文件是否正确。
3.如果通过9080(根据实际端口而定)端口不能访问应用程序,可以通过http://localhost:9080/snoop 验证应用服务器是否存活。如存活则如图:
一般说明应用程序存在问题,查看分析相关日志:System.Out.log 、SystemErr.log、activity.log定位应用程序引起的问题。
日志介绍
System.Out.log 、SystemErr.log 属于JVM 日志,。WebSphere Application Server 写格式化的消息到 System.out日志。另外,应用程序和其他代码可以写入这些日志,通过print() 和 println() 方法实现。有些开发工具箱(Developer Kit)内置如 Throwable 类的 printStackTrace() 方法也可以写入这些日志。通常,System.out 日志用于监控应用程序服务器的运行是否正常。System.out 日志可用于问题确定,但建议改为使用 IBM 服务日志和日志分析器的高级能力。System.err 日志包含异常堆栈跟踪信息,这在执行问题分析时很有用。
因为每个应用程序服务器都代表 JVM,所以每个应用程序服务器和它的所有应用程序都有一组 JVM 日志,缺省情况下该日志位于 installation_root/profiles/profile_name/logs/server_name 目录。在 WebSphere Application Server Network Deployment 配置的情况下,也为 Deployment Manager 和每个节点管理器创建 JVM 日志,因为它们也代表 JVM。
activity.log为IBM 日志,应用程序服务器从各种 WebSphere Application Server 组件的活动创建服务或活动日志文件。服务或活动日志文件(activity.log)是二进制文件,它位于 install_root 的 logs 目录中,我们可以使用日志分析器用于查看服务或活动日志文件。
查看 JVM 日志
JVM 日志是作为纯文本文件写的。因此,查看这些日志没有特殊的要求。它们位于 installation_directory/profiles/profile_name/logs/server_name 目录中,并在缺省情况下命名为 SystemOut.log 和 SystemErr.log。
有两种技术可用于查看应用程序服务器的 JVM 日志。
l 使用管理控制台。它支持从远程机器查看 JVM 日志。
l 使用存储日志的机器上的文本编辑器。
此任务的步骤
1.从管理控制台查看 JVM 日志。
启动管理控制台。
在控制台导航树中单击故障诊断 > 日志和跟踪。要查看特定服务器的日志,单击服务器名以选择它,然后单击 JVM 日志。
选择运行时选项卡。
单击与您要查看的日志相应的查看。
2.在服务器硬盘查看JVM 日志。
转至存储日志的机器。
在文本编辑器中打开文件或将文件拖放到编辑和查看程序中。
日志格式:
根据 JVM 日志配置的不同,格式化的消息可以用基本或高级格式写入 JVM 日志。
消息格式 格式化的消息可以使用这两种格式中的一种写入 JVM 日志:
基本格式 这是 WebSphere Application Server 的较早版本中使用的格式。
高级格式 如果可能,则通过添加有关事件的信息来扩展基本格式。
下面是一些日志常用格式,可以帮助我们更好的查看日志,可能找到的采用这些格式的各种字段如下:
TimeStamp
时间戳记是使用其被格式化所处于的进程语言环境格式化的。它包含标准日期(例如,YYMMDD),以毫秒为精度的 24 小时时间和时区。
ThreadId
从发出消息的线程的散列代码生成的 8 个字符的十六进制值。
ThreadName
发出消息或跟踪事件的 Java 线程名。
ShortName
发出消息或跟踪事件的记录组件的缩写名称。这通常是 WebSphere Application Server 内部组件的类名,但也可以是一些用户应用程序的其他标识。
LongName
发出消息或跟踪事件的记录组件的全名。这通常是 WebSphere Application Server 内部组件的标准类名,但也可以是一些用户应用程序的其他标识。
EventType
表明消息或跟踪事件类型的一个字符字段。消息类型是大写的。可能值包括:
F
致命消息。
E
错误消息。
W
警告消息。
A
审计消息。
I
参考消息。
C
配置消息。
D
详细信息消息。
O
通过用户应用程序或内部组件直接写入 System.out 的消息。
R
通过用户应用程序或内部组件直接写入 System.err 的消息。
Z
表明不可识别的类型的占位符。
类名
发出消息或跟踪事件的类。
方法名称
发出消息或跟踪事件的方法。
组织
拥有发出消息或跟踪事件的应用程序的组织。
产品
发出消息或跟踪事件的产品。
组件
发出消息或跟踪事件的产品内的组件。
基本格式
以基本格式显示的消息事件使用下列格式。符号 <name> 表明将总是在基本格式消息中出现的必需字段。符号 [name] 表明将被包括的可选的或有条件的字段,如果可以确定它们的话。
<timestamp><threadId><shortName><eventType>[className][methodName]<message>
高级格式
以高级格式显示的消息事件使用下列格式。表示法 <name> 用于表明将总是以消息条目的高级格式出现的必需字段。表示法 [name] 用于表明将被包括的可选的或有条件的字段(如果可以确定它们的话)。
<timestamp><threadId><eventType><UOW><source=longName>[className][methodName]<Organization><Product><Component>[thread=threadName]
<message>
配置 JVM 日志
使用管理控制台配置应用程序服务器的 JVM 日志。直到下一次重新启动应用程序服务器,才应用为了运行应用程序服务器而对 JVM 日志进行的配置更改。
此任务的步骤
启动管理控制台
单击故障诊断 > 记录和跟踪,然后单击服务器 > JVM 日志。
选择“配置”选项卡。
滚动通过面板以显示要配置的日志的属性。
更改相应的配置属性并单击应用。
保存您的配置更改。
Java 虚拟机(JVM)日志设置
使用此页面查看和修改 Java 虚拟机(JVM)System.out 和 System.err 日志的设置。
要查看此管理控制台页面,单击故障诊断 > 日志和跟踪 > server name > JVM 日志。
查看和修改此受管进程的 Java 虚拟机(JVM)System.out 和 System.err 日志的设置。通过将 JVM 的 System.out 和 System.err 流重定向到独立日志文件来创建 JVM 日志。System.out 日志用于监控运行应用程序服务器的运行状况。System.err 日志包含执行问题分析时有用的异常堆栈跟踪信息。每个应用程序服务器及其所有应用程序有一组 JVM 日志。还为 Deployment Manager 和每个节点管理器创建 JVM 日志。“配置”面板上的更改将在重新启动服务器时应用。“运行时”面板上的更改将立即应用。
“配置”选项卡
文件名
指定此页面中描述的某个日志文件的名称。
第一个文件名字段指定 System.out 日志的名称。第二个文件名字段指定 System.err 文件的名称。
按下“运行时”选项卡上的查看按钮查看所选日志文件的内容。
为 System.out 日志或 System.err 日志指定的文件名必须具有以下某个值:
文件名
文件系统中的文件的名称。建议您使用标准文件名。如果该文件名不是标准文件名,则认为它相对于服务器的当前工作目录。每个日志必须配置一个专用文件。例如,我们无法将 System.out 和 System.err 重定向到同一物理文件。
如果包含文件的目录已经存在,则正在运行的服务器所使用的用户标识需要该目录的读/写访问权限。如果该目录不存在,将会用适当的许可权创建它。正在运行的服务器所使用的用户标识必须有创建该目录的权限。
控制台
这是用于将流重定向到关联进程流的特殊文件名。如果为 System.out 指定了此值,则文件重定向到 stdout。如果为 System.err 指定了此值,则文件重定向到 stderr。
无
废弃写入流的所有数据。指定无等于将流重定向到 UNIX 系统上的 dev/null。
filename 的缺省路径是变量 SERVER_LOG_ROOT 的值。要查看 SERVER_LOG_ROOT 变量的值:
1.在管理控制台上,选择环境 > WebSphere 变量
2.单击服务器单选按钮,然后单击应用。在显示的列表中出现 SERVER_LOG_ROOT 变量的值。
要更改 SERVER_LOG_ROOT 的值:
1.选择 SERVER_LOG_ROOT
2.在值字段中输入新的路径
3.单击“应用”
4.保存此配置。您必须重新启动服务器以使更改生效。
当然我们还可以以将 ${SERVER_LOG_ROOT}/和 ${SERVER_LOG_ROOT}/SystemErr.log 文件的位置和名称更改为任何其他绝对路径和文件名(例如,/tmp/myLogfile.log)。
文件格式
指定用于保存 System.out 文件的格式。
日志文件滚动(保留旧的日志文件生成新的日志文件)
应用服务器有日志自管理功能,通过使用这一组配置属性将 System.out 或 System.err 日志文件配置为自我管理。
自我管理日志文件将消息写入文件,直到达到时间或大小条件。当达到指定时间或文件达到指定大小时,日志文件将滚动(包括关闭文件并重命名保存的文件),同时记录将临时挂起。新保存的文件名是原始文件名加上表明文件重命名时间的时间戳记限定符。一旦完成重命名,则重新打开具有原始名称的新的空日志文件,并恢复记录。虽然日志文件滚动后一条消息可能会分割在保存的文件和当前文件中,但全部消息都将保留。
如果关联流重定向到文件,则仅可以将一个日志配置为自我管理。
文件大小
单击日志文件的此属性以让它根据其文件大小管理它自己。当文件达到最大大小字段中指定的大小时,发生自动滚动。
最大大小
指定文件的最大大小(以兆字节为单位)。当文件达到此大小时,它就滚动。
此属性仅当您单击“文件大小”后才有效。
时间
单击日志文件的此属性以让它根据一天中的时间管理它自己。文件在启动时间字段中指定的时间滚动。
启动时间
指定应用程序服务器重新启动后第一次启动周期滚动算法的时间,即,一天中的几点(从 1 到 24)。算法在应用程序服务器启动时装入。一旦滚动算法在启动时间字段指定的钟点启动后,它将每隔一定的时间(重复时间字段指定的小时数)滚动文件。此滚动模式将继续使用不作调整,直到应用程序服务器停止。
注:滚动总是在一天中指定钟点开始时发生。一天的第一个小一天的第一个小时(自 00:00:00(午夜)起)是 1 点,而一天的最后一个小时(自 23:00:00 起)是 24 点。因此,如果您希望日志文件在午夜滚动,则将启动时间设置为 1。
重复时间
指定隔多少小时(从 1 到 24)发生周期滚动。
重复时间
指定每隔多少小时日志文件滚动一次。有效值范围是从 1 到 24。
配置日志文件按时间、按大小或按时间和大小滚动。单击文件大小和时间以在首次匹配条件时滚动文件。例如,如果重复时间字段是 5 小时,而最大文件大小是 2 MB,则文件将每 5 小时滚动一次,除非时间间隔未到而文件大小已达 2 MB。按文件大小滚动后,文件将继续按时间间隔滚动。
历史日志文件的最大大小
指定要保存的历史(已滚动)文件数。流将写入当前文件,直到它滚动。滚动时,关闭当前文件,并以当前名称加上滚动时间戳记组成的新名称保存该文件。然后流将以原始名称重新打开一个新文件以继续写入。历史文件数从零增长到最大历史文件数字段的值。下一次滚动删除最旧的历史文件。
已安装应用程序的输出
指定是否记录和格式化应用程序代码发出的 System.out 或 System.err 打印语句。
显示应用程序打印语句
单击此字段以显示应用程序使用 print 和 println 流方法写入流的消息。总是出现 WebSphere Application Server 系统消息。
格式化打印语句
单击此字段以格式化应用程序打印语句(如 WebSphere Application Server 系统消息)。
“运行时”选项卡
文件名
指定此页面中描述的某个日志文件的名称。
第一个文件名字段指定 System.out 日志的名称。第二个文件名字段指定 System.err 文件的名称。
按下“运行时”选项卡上的查看按钮查看所选日志文件的内容。
为 System.out 日志或 System.err 日志指定的文件名必须具有以下某个值:
文件名
文件系统中的文件的名称。建议您使用标准文件名。如果该文件名不是标准文件名,则认为它相对于服务器的当前工作目录。每个流必须配置一个专用文件。例如,您无法将 System.out 和 System.err 重定向到同一物理文件。
如果包含文件的目录已经存在,则正在运行的服务器所使用的用户标识需要该目录的读/写访问权限。如果该目录不存在,将会用适当的许可权创建它。正在运行的服务器所使用的用户标识必须有创建该目录的权限。
控制台
这是用于将流重定向到关联进程流的特殊文件名。如果为 System.out 指定了此值,则文件重定向到 stdout。如果为 System.err 指定了此值,则文件重定向到 stderr。
无
废弃写入流的所有数据。指定无等于将流重定向到 UNIX 系统上的 dev/null。
filename 的缺省路径是变量 SERVER_LOG_ROOT 的值。要查看 SERVER_LOG_ROOT 变量的值:
1.在管理控制台上,选择环境 > WebSphere 变量
2.单击服务器单选按钮,然后单击应用。在显示的列表中出现 SERVER_LOG_ROOT 变量的值。
要更改 SERVER_LOG_ROOT 的值:
1.选择 SERVER_LOG_ROOT
2.在值字段中输入新的路径
3.单击“应用”
保存此配置。您必须重新启动服务器以使更改生效。当然我们还可以以将${SERVER_LOG_ROOT}/SystemOut.log 和 ${SERVER_LOG_ROOT}/SystemErr.log 文件的位置和名称更改为任何其他绝对路径和文件名(例如,/tmp/myLogfile.log)。
结束语
JVM 日志对我们对问题的的分析和跟踪是非常重要的。WebSphere Application Server 强大的日志自管理功能,使我们的日常工作更方便更简单,学习和掌握这些功能对我们管理人员来说受益非浅。
参考资料
l IBM 产品信息中信http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp
l WebSphere Application Server V6 System Management and Configuration Handbook 产品红皮书
l WebSphere Application Server V6 Scalability and Performance Handbook 产品红皮书
关于作者
Benson 技术顾问,负责ibm软件培训、技术支持、顾问工作。撰写过java和j2ee开发方面的书籍。