WebSphere教程FG012-WebSphere日志管理与故障排查实战技巧
本文档风哥主要介绍WebSphere Application Server 9.0.5的日志管理与故障排查,包括日志概述、日志类型、日志级别、日志配置、日志查看、故障排查等内容,风哥教程参考WebSphere官方文档日志管理章节,适合WebSphere管理员在学习和测试中使用,如果要应用于生产环境则需要自行确认。更多视频教程www.fgedu.net.cn
Part01-基础概念与理论知识
1.1 WebSphere日志概述
WebSphere日志是诊断和排查问题的重要工具,记录了服务器运行过程中的各种事件和错误信息。学习交流加群风哥微信: itpux-com
- 问题诊断:记录错误和异常信息
- 运行监控:跟踪服务器运行状态
- 性能分析:分析性能瓶颈
- 安全审计:记录安全相关事件
1.1.1 日志架构
┌─────────────────────────────────────────────────────────┐
│ 应用程序 │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 应用日志(Application Log) │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────┐
│ WebSphere服务器 │
│ ┌─────────────────────────────────────────────────┐ │
│ │ SystemOut.log(标准输出) │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ SystemErr.log(错误输出) │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ trace.log(跟踪日志) │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ activity.log(活动日志) │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
│
↓
┌─────────────────────────────────────────────────────────┐
│ 日志文件系统 │
│ /WebSphere/app/profiles/…/logs │
└─────────────────────────────────────────────────────────┘
# 日志组件
1. 日志记录器(Logger)
– 记录日志消息
– 控制日志级别
2. 日志处理器(Handler)
– 输出日志到目标
– 文件、控制台、网络
3. 日志格式器(Formatter)
– 格式化日志消息
– 文本、XML格式
1.2 WebSphere日志类型
WebSphere日志类型:
1.2.1 主要日志文件
1. SystemOut.log
– 标准输出日志
– 记录正常信息
– 应用输出信息
– 位置:/WebSphere/app/profiles/AppSrv01/logs/server1/SystemOut.log
2. SystemErr.log
– 错误输出日志
– 记录错误和异常
– 警告信息
– 位置:/WebSphere/app/profiles/AppSrv01/logs/server1/SystemErr.log
3. trace.log
– 跟踪日志
– 详细调试信息
– 需要启用跟踪
– 位置:/WebSphere/app/profiles/AppSrv01/logs/server1/trace.log
4. activity.log
– 活动日志
– 二进制格式
– 服务生命周期事件
– 位置:/WebSphere/app/profiles/AppSrv01/logs/server1/activity.log
5. startServer.log
– 服务器启动日志
– 启动过程信息
– 位置:/WebSphere/app/profiles/AppSrv01/logs/server1/startServer.log
6. native_stderr.log
– 本地错误日志
– JVM错误信息
– GC日志
– 位置:/WebSphere/app/profiles/AppSrv01/logs/server1/native_stderr.log
# DMgr日志位置
/WebSphere/app/profiles/Dmgr01/logs/dmgr/
# Node Agent日志位置
/WebSphere/app/profiles/AppSrv01/logs/nodeagent/
# 日志文件大小
– SystemOut.log:默认无限制,建议100MB
– SystemErr.log:默认无限制,建议50MB
– trace.log:默认20MB
1.3 WebSphere日志级别
WebSphere日志级别:
1.3.1 日志级别说明
级别从低到高:
1. OFF – 关闭日志
2. FATAL – 致命错误
3. SEVERE – 严重错误
4. ERROR – 错误
5. WARNING – 警告
6. INFO – 信息(默认)
7. CONFIG – 配置信息
8. FINE – 详细信息
9. FINER – 更详细信息
10. FINEST – 最详细信息
11. ALL – 所有日志
# 日志级别选择
场景 推荐级别
──────────────────────────────────────────
生产环境 INFO
问题排查 FINE/FINER
详细调试 FINEST
性能影响最小 WARNING
# 日志级别配置
1. 通过管理控制台
故障诊断 > 日志和跟踪 > server1 > JVM日志
– 详细级别:info
2. 通过wsadmin
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123
# 获取日志配置
tp = AdminConfig.getid(‘/TraceService:/’)
# 设置日志级别
AdminConfig.modify(tp, ‘[[traceSpecification “*=info”]]’)
AdminConfig.modify(tp, ‘[[traceSpecification “*=fine:com.ibm.ws.*=finer”]]’)
# 保存配置
AdminConfig.save()
# 常用日志级别配置
*=info # 全局INFO级别
*=warning # 全局WARNING级别
*=fine # 全局FINE级别
com.ibm.ws.*=finer # WebSphere组件FINER级别
com.ibm.ejs.*=finest # EJS组件FINEST级别
1.4 WebSphere日志格式
WebSphere日志格式:
1.4.1 日志格式说明
1. SystemOut.log格式
[时间戳] 线程ID 类名 方法名 消息级别 消息内容
示例:
[4/10/26 10:00:00:000 CST] 00000001 SystemOut O Server server1 open for e-business
[4/10/26 10:00:01:000 CST] 00000001 ConnectionEve A J2CA0056I: 连接管理器已启动
格式说明:
– 时间戳:月/日/年 时:分:秒:毫秒 时区
– 线程ID:8位十六进制
– 类名:日志记录类
– 方法名:方法标识
– 消息级别:O=Out, A=Audit, E=Error, W=Warning, I=Info
– 消息内容:具体消息
2. SystemErr.log格式
[时间戳] 线程ID 类名 E 错误消息
示例:
[4/10/26 10:00:00:000 CST] 00000001 SystemErr R java.lang.OutOfMemoryError: Java heap space
[4/10/26 10:00:01:000 CST] 00000001 SystemErr R at java.util.HashMap.put(HashMap.java:xxx)
3. trace.log格式
[时间戳] 线程ID > 类名.方法名 入口参数
[时间戳] 线程ID < 类名.方法名 返回值
示例:
[4/10/26 10:00:00:000 CST] 00000001 > com.ibm.ws.webcontainer.WebContainer.getService Entry
[4/10/26 10:00:00:001 CST] 00000001 < com.ibm.ws.webcontainer.WebContainer.getService Exit
# 日志消息代码
代码前缀 组件
──────────────────────────────────────────
WSWS Web Services
WSVR Web Container
WSAD Admin Service
WSEC Security
WSCL Classloader
WSMQ MQ
WSJT JTA
WSJMS JMS
WSDB Database
Part02-生产环境规划与建议
2.1 WebSphere日志规划
WebSphere日志规划需要考虑多个因素:
2.1.1 日志规划要素
1. 日志存储位置
– 独立磁盘:避免与数据争用IO
– 足够空间:根据日志量规划
– 定期清理:避免磁盘满
2. 日志级别设置
– 生产环境:INFO
– 测试环境:FINE
– 开发环境:FINER
3. 日志轮转配置
– 按大小轮转
– 按时间轮转
– 保留历史文件
4. 日志归档策略
– 归档周期
– 保留时间
– 压缩存储
# 日志规划模板
日志位置:/WebSphere/logs/
日志级别:INFO
轮转大小:100MB
历史文件:10个
归档周期:每天
保留时间:30天
压缩存储:启用
2.2 WebSphere日志轮转规划
WebSphere日志轮转规划:
2.2.1 轮转配置
1. JVM日志轮转
# 通过管理控制台
故障诊断 > 日志和跟踪 > server1 > JVM日志
配置项:
– 最大文件大小:100MB
– 最大历史文件数:10
– 文件名格式:SystemOut.log, SystemOut_YY.MM.dd_HH.mm.ss.log
2. 通过wsadmin配置
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123
# 获取JVM日志配置
jvmLog = AdminConfig.list(‘ProcessLog’, AdminConfig.getid(‘/Server:server1/’))
# 配置轮转
AdminConfig.modify(jvmLog, ”’
[[outputRedirectToFile true]
[fileNameRedirectToFile SystemOut.log]
[maxFileSizeRedirectToFile 100]
[maxNumberOfBackupFilesRedirectToFile 10]]
”’)
# 保存配置
AdminConfig.save()
# 轮转策略
策略 配置方式 适用场景
──────────────────────────────────────────────────
按大小轮转 maxFileSize 日志量大
按时间轮转 每日归档脚本 日志量中等
混合策略 大小+时间 生产环境推荐
# 日志轮转脚本
#!/bin/bash
# log_rotate.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
LOG_DIR=/WebSphere/app/profiles/AppSrv01/logs/server1
ARCHIVE_DIR=/WebSphere/logs/archive
DATE=$(date +%Y%m%d)
# 创建归档目录
mkdir -p $ARCHIVE_DIR
# 归档日志
for log in SystemOut.log SystemErr.log trace.log; do
if [ -f “$LOG_DIR/$log” ]; then
cp $LOG_DIR/$log $ARCHIVE_DIR/${log}.$DATE
> $LOG_DIR/$log
gzip $ARCHIVE_DIR/${log}.$DATE
fi
done
# 清理旧日志
find $ARCHIVE_DIR -name “*.gz” -mtime +30 -delete
echo “日志轮转完成: $DATE”
2.3 WebSphere日志归档规划
WebSphere日志归档规划:
2.3.1 归档策略
1. 归档周期
– 每日归档:适合日志量大的环境
– 每周归档:适合日志量中等的环境
– 每月归档:适合日志量小的环境
2. 保留时间
– 生产环境:30-90天
– 合规要求:根据法规要求
– 存储成本:平衡成本和需求
3. 压缩存储
– gzip压缩:节省空间
– 压缩率:约10:1
– 查询方便:需要解压
# 归档目录结构
/WebSphere/logs/archive/
├── 2024/
│ ├── 04/
│ │ ├── server1/
│ │ │ ├── SystemOut.log.20240410.gz
│ │ │ ├── SystemErr.log.20240410.gz
│ │ │ └── trace.log.20240410.gz
│ │ └── server2/
│ │ └── …
│ └── 05/
│ └── …
└── …
# 自动归档脚本
#!/bin/bash
# log_archive.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
LOG_BASE=/WebSphere/app/profiles
ARCHIVE_BASE=/WebSphere/logs/archive
DATE=$(date +%Y%m%d)
YEAR=$(date +%Y)
MONTH=$(date +%m)
# 遍历所有服务器
for profile in $LOG_BASE/*; do
profile_name=$(basename $profile)
for server_log in $profile/logs/*/; do
server_name=$(basename $server_log)
archive_dir=$ARCHIVE_BASE/$YEAR/$MONTH/$server_name
mkdir -p $archive_dir
for log in SystemOut.log SystemErr.log trace.log; do
if [ -f “$server_log/$log” ]; then
cp $server_log/$log $archive_dir/${log}.$DATE
gzip -f $archive_dir/${log}.$DATE
fi
done
done
done
# 清理超过90天的归档
find $ARCHIVE_BASE -name “*.gz” -mtime +90 -delete
echo “日志归档完成: $DATE”
2.4 WebSphere日志分析规划
WebSphere日志分析规划:
2.4.1 分析工具
1. 命令行工具
– grep:文本搜索
– awk:文本处理
– sed:文本替换
– tail:实时查看
2. WebSphere工具
– LogAnalyzer:IBM Support Assistant
– TraceFormatter:格式化跟踪日志
3. 第三方工具
– ELK Stack:Elasticsearch + Logstash + Kibana
– Splunk:日志分析平台
– Graylog:开源日志管理
# 日志分析场景
场景 工具/方法
──────────────────────────────────────────
实时监控 tail -f
错误搜索 grep ERROR
统计分析 awk + sort + uniq
可视化分析 Kibana
性能分析 GC日志分析工具
# 日志分析脚本示例
#!/bin/bash
# log_analyze.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
LOG_FILE=/WebSphere/app/profiles/AppSrv01/logs/server1/SystemOut.log
echo “=== 日志分析报告 ===”
echo “分析文件: $LOG_FILE”
echo “”
# 错误统计
echo “1. 错误统计:”
grep -c “ERROR” $LOG_FILE
grep -c “Exception” $LOG_FILE
grep -c “SEVERE” $LOG_FILE
# 警告统计
echo “2. 警告统计:”
grep -c “WARNING” $LOG_FILE
grep -c “WARN” $LOG_FILE
# 最近错误
echo “3. 最近10条错误:”
grep -i “error\|exception\|severe” $LOG_FILE | tail -10
# 最频繁错误
echo “4. 最频繁错误TOP10:”
grep -i “error\|exception” $LOG_FILE | \
awk ‘{print $NF}’ | sort | uniq -c | sort -rn | head -10
echo “=== 分析完成 ===”
Part03-生产环境项目实施方案
3.1 WebSphere日志配置实战
WebSphere日志配置操作:
3.1.1 JVM日志配置
1. 通过管理控制台配置
故障诊断 > 日志和跟踪 > server1 > JVM日志
SystemOut配置:
– 文件名:SystemOut.log
– 最大文件大小:100
– 最大历史文件数:10
– 格式化输出:启用
SystemErr配置:
– 文件名:SystemErr.log
– 最大文件大小:50
– 最大历史文件数:10
2. 通过wsadmin配置
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123
# 获取服务器配置
server = AdminConfig.getid(‘/Server:server1/’)
# 配置SystemOut日志
stdout = AdminConfig.list(‘OutputStream’, server)
AdminConfig.modify(stdout, ”’
[[baseLogFileName SystemOut.log]
[maxFileSizeKb 102400]
[maxBackupIndex 10]
[rolloverType SIZE]
[formattingEnabled true]]
”’)
# 配置SystemErr日志
stderr = AdminConfig.list(‘ErrorStream’, server)
AdminConfig.modify(stderr, ”’
[[baseLogFileName SystemErr.log]
[maxFileSizeKb 51200]
[maxBackupIndex 10]
[rolloverType SIZE]]
”’)
# 保存配置
AdminConfig.save()
# 同步节点
AdminNodeManagement.syncActiveNodes()
3. 配置GC日志
# JVM参数添加GC日志
-verbose:gc
-Xverbosegclog:/WebSphere/logs/gc.log
# 通过管理控制台
服务器 > server1 > Java和进程管理 > 进程定义 > Java虚拟机
> 通用JVM参数
添加:
-verbose:gc -Xverbosegclog:/WebSphere/logs/server1/gc.log
# 验证配置
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminConfig.showAttribute(AdminConfig.list(‘OutputStream’, AdminConfig.getid(‘/Server:server1/’)), ‘baseLogFileName’)”
SystemOut.log
3.1.2 跟踪日志配置
1. 启用跟踪
# 通过管理控制台
故障诊断 > 日志和跟踪 > server1 > 诊断跟踪
配置:
– 启用跟踪:勾选
– 跟踪规范:*=info:com.ibm.ws.*=fine
– 输出文件:trace.log
– 最大文件大小:20MB
– 最大历史文件数:5
2. 通过wsadmin配置
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123
# 获取跟踪服务
ts = AdminConfig.getid(‘/TraceService:/’)
# 配置跟踪
AdminConfig.modify(ts, ”’
[[enable true]
[traceSpecification “*=info:com.ibm.ws.webcontainer.*=finer”]
[traceOutputType SPECIFIED_FILE]
[traceFile trace.log]
[traceFileSize 20]
[traceFileCount 5]]
”’)
# 保存配置
AdminConfig.save()
# 动态启用跟踪(无需重启)
AdminControl.invoke(AdminControl.queryNames(‘type=TraceService,process=server1,*’),
‘setTraceSpecification’, ‘*=info:com.ibm.ws.webcontainer.*=finer’)
# 常用跟踪规范
组件 跟踪规范
──────────────────────────────────────────
Web容器 com.ibm.ws.webcontainer.*=finer
安全 com.ibm.ws.security.*=finer
JDBC com.ibm.ws.rsadapter.*=finer
JMS com.ibm.ws.messaging.*=finer
JTA com.ibm.ws.jta.*=finer
类加载 com.ibm.ws.classloader.*=finest
3. 禁用跟踪
AdminControl.invoke(AdminControl.queryNames(‘type=TraceService,process=server1,*’),
‘setTraceSpecification’, ‘*=info’)
3.2 WebSphere日志查看实战
WebSphere日志查看操作:
3.2.1 实时查看日志
1. 使用tail命令
# 实时查看SystemOut
tail -f /WebSphere/app/profiles/AppSrv01/logs/server1/SystemOut.log
# 实时查看SystemErr
tail -f /WebSphere/app/profiles/AppSrv01/logs/server1/SystemErr.log
# 同时查看多个日志
tail -f /WebSphere/app/profiles/AppSrv01/logs/server1/SystemOut.log \
/WebSphere/app/profiles/AppSrv01/logs/server1/SystemErr.log
2. 使用grep过滤
# 实时查看错误
tail -f /WebSphere/app/profiles/AppSrv01/logs/server1/SystemOut.log | grep -i error
# 实时查看特定应用
tail -f /WebSphere/app/profiles/AppSrv01/logs/server1/SystemOut.log | grep fgeduapp
# 实时查看异常
tail -f /WebSphere/app/profiles/AppSrv01/logs/server1/SystemOut.log | grep -i exception
3. 使用管理控制台
故障诊断 > 日志和跟踪 > server1 > JVM日志 > 运行时
# 可以在线查看日志内容
4. 使用wsadmin查看
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123
# 查看JVM日志
jvmLog = AdminControl.queryNames(‘type=JVM,process=server1,*’)
AdminControl.invoke(jvmLog, ‘dumpThreads’)
# 查看最近日志
AdminControl.invoke(AdminControl.queryNames(‘type=LogAnalyzer,*’),
‘analyze’, ‘[“SystemOut.log”, “100”]’)
# 日志查看脚本
#!/bin/bash
# view_log.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
SERVER=$1
LOG_TYPE=$2
case $LOG_TYPE in
out)
tail -f /WebSphere/app/profiles/AppSrv01/logs/$SERVER/SystemOut.log
;;
err)
tail -f /WebSphere/app/profiles/AppSrv01/logs/$SERVER/SystemErr.log
;;
trace)
tail -f /WebSphere/app/profiles/AppSrv01/logs/$SERVER/trace.log
;;
gc)
tail -f /WebSphere/logs/$SERVER/gc.log
;;
*)
echo “用法: $0 server_name {out|err|trace|gc}”
;;
esac
3.3 WebSphere故障排查实战
WebSphere故障排查操作:
3.3.1 常见故障排查
1. 服务器启动失败
# 检查启动日志
cat /WebSphere/app/profiles/AppSrv01/logs/server1/startServer.log
# 常见错误
– 端口被占用
– 配置文件错误
– 权限问题
– 内存不足
# 排查步骤
# 检查端口
netstat -tlnp | grep 9080
# 检查进程
ps -ef | grep java
# 检查内存
free -m
# 检查日志
grep -i “error\|exception\|fail” /WebSphere/app/profiles/AppSrv01/logs/server1/startServer.log
2. 应用部署失败
# 检查部署日志
grep -i “deploy\|install” /WebSphere/app/profiles/Dmgr01/logs/dmgr/SystemOut.log
# 常见错误
– 应用包格式错误
– 依赖缺失
– 配置冲突
– 权限不足
# 排查命令
# 检查应用状态
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminApp.list()”
# 检查应用详情
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminApp.view(‘fgeduapp’)”
3. 数据库连接失败
# 检查数据源日志
grep -i “datasource\|jdbc\|connection” /WebSphere/app/profiles/AppSrv01/logs/server1/SystemOut.log
# 常见错误
– 连接池耗尽
– 认证失败
– 网络问题
– 数据库不可达
# 排查步骤
# 测试数据源
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “AdminControl.testConnection(AdminConfig.getid(‘/DataSource:fgedudb/’))”
# 检查连接池
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminControl.getAttribute(AdminControl.queryNames(‘type=DataSource,name=jdbc/fgedudb,*’), ‘numActive’)”
4. 内存溢出
# 检查GC日志
grep -i “outofmemory\|heap” /WebSphere/logs/server1/gc.log
# 检查native日志
grep -i “outofmemory” /WebSphere/app/profiles/AppSrv01/logs/server1/native_stderr.log
# 生成堆转储
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “AdminControl.invoke(AdminControl.queryNames(‘type=JVM,process=server1,*’), ‘generateHeapDump’)”
# 堆转储位置
/WebSphere/app/profiles/AppSrv01/heapdump.20240410.100000.12345.phd
3.4 WebSphere日志分析工具实战
WebSphere日志分析工具使用:
3.4.1 IBM Support Assistant
1. 安装ISA
# 下载IBM Support Assistant
# https://www.ibm.com/support/pages/node/715271
# 解压安装
unzip ibm-support-assistant.zip -d /opt/isa
cd /opt/isa
./isa_linux_x86_64
2. 安装WebSphere插件
# 打开ISA
# Help > Add/Remove Tools
# 选择WebSphere Application Server
3. 使用LogAnalyzer
# 打开LogAnalyzer
# 导入日志文件
# 分析日志
# 功能:
– 日志解析
– 错误识别
– 问题诊断
– 解决方案推荐
4. 使用TraceFormatter
# 格式化跟踪日志
java com.ibm.ws.trace.TraceFormatter trace.log trace_formatted.log
# 参数:
– -sort:按时间排序
– -summary:生成摘要
– -threads:按线程分组
# 命令行分析工具
#!/bin/bash
# analyze_error.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
LOG_FILE=$1
echo “=== 错误分析报告 ===”
echo “文件: $LOG_FILE”
echo “”
# 统计各类错误
echo “1. 错误类型统计:”
echo “ERROR: $(grep -c ‘ERROR’ $LOG_FILE)”
echo “WARNING: $(grep -c ‘WARNING’ $LOG_FILE)”
echo “Exception: $(grep -c ‘Exception’ $LOG_FILE)”
echo “SEVERE: $(grep -c ‘SEVERE’ $LOG_FILE)”
# 异常类型统计
echo “”
echo “2. 异常类型TOP10:”
grep “Exception” $LOG_FILE | \
awk -F: ‘{print $NF}’ | sort | uniq -c | sort -rn | head -10
# 时间分布
echo “”
echo “3. 错误时间分布:”
grep -i “error\|exception” $LOG_FILE | \
awk ‘{print substr($1, 2, 10)}’ | sort | uniq -c
# 线程分析
echo “”
echo “4. 错误线程TOP10:”
grep -i “error\|exception” $LOG_FILE | \
awk ‘{print $2}’ | sort | uniq -c | sort -rn | head -10
echo “=== 分析完成 ===”
Part04-生产案例与实战讲解
4.1 服务器启动故障排查案例
服务器启动故障排查案例:
4.1.1 案例背景
故障现象:
server1无法启动,提示启动失败
故障诊断:
1. 查看启动日志
cat /WebSphere/app/profiles/AppSrv01/logs/server1/startServer.log
[4/10/26 10:00:00:000 CST] 00000001 SystemOut O 启动服务器…
[4/10/26 10:00:01:000 CST] 00000001 SystemErr R ADMU3027E: 服务器无法启动。端口 9080 已在使用中。
2. 检查端口占用
netstat -tlnp | grep 9080
tcp6 0 0 :::9080 :::* LISTEN 12345/java
3. 检查进程
ps -ef | grep 12345
websphere 12345 1 0 10:00 ? 00:00:05 /WebSphere/app/java/bin/java …
解决方案:
1. 停止占用端口的进程
kill 12345
# 如果进程不响应
kill -9 12345
2. 清理临时文件
rm -rf /WebSphere/app/profiles/AppSrv01/temp/server1/*
3. 重新启动服务器
/WebSphere/app/profiles/AppSrv01/bin/startServer.sh server1
ADMU4000I: 服务器 server1 启动成功
4. 验证服务器状态
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “print AdminControl.getAttribute(AdminControl.queryNames(‘type=Server,name=server1,*’), ‘state’)”
STARTED
# 故障处理结果
问题原因:端口被占用
解决方案:停止占用进程,重启服务器
处理时间:5分钟
4.2 应用部署故障排查案例
应用部署故障排查案例:
4.2.1 案例背景
故障现象:
应用部署失败,提示类加载错误
故障诊断:
1. 查看部署日志
grep -i “deploy\|install\|fgeduapp” /WebSphere/app/profiles/Dmgr01/logs/dmgr/SystemOut.log
[4/10/26 10:00:00:000 CST] 00000001 SystemErr R java.lang.ClassNotFoundException: com.fgedu.util.FGeduUtil
[4/10/26 10:00:01:000 CST] 00000001 SystemErr R at java.net.URLClassLoader.findClass(URLClassLoader.java:xxx)
2. 检查应用结构
/WebSphere/app/java/bin/jar -tf /WebSphere/apps/fgeduapp.ear | grep FGeduUtil
# 没有找到类文件
3. 检查依赖库
ls -la /WebSphere/apps/lib/
# 缺少fgedu-util.jar
解决方案:
1. 添加依赖库
cp fgedu-util.jar /WebSphere/apps/lib/
2. 更新应用EAR包
# 将依赖库添加到EAR
jar -uf fgeduapp.ear -C lib/ fgedu-util.jar
3. 重新部署
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-username fgeduadmin -password fgedu123
AdminApp.update(‘fgeduapp’, ‘app’, ‘[-operation update -contents /WebSphere/apps/fgeduapp.ear]’)
AdminConfig.save()
4. 验证部署
AdminApp.list()
fgeduapp
# 故障处理结果
问题原因:缺少依赖库
解决方案:添加依赖库,重新部署
处理时间:15分钟
4.3 性能问题排查案例
性能问题排查案例:
4.3.1 案例背景
故障现象:
应用响应缓慢,CPU使用率高
故障诊断:
1. 检查CPU使用
top -p $(pgrep -f server1)
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12345 websphere 20 0 8388608 4194304 0 S 95.0 25.0 10:00.00 java
2. 生成线程转储
kill -3 12345
# 或使用wsadmin
/WebSphere/app/profiles/Dmgr01/bin/wsadmin.sh -lang jython \
-c “AdminControl.invoke(AdminControl.queryNames(‘type=JVM,process=server1,*’), ‘dumpThreads’)”
3. 分析线程转储
# 查看线程转储
cat /WebSphere/app/profiles/AppSrv01/logs/server1/javacore.20240410.100000.12345.txt
# 分析CPU高占用线程
# 找到占用CPU最高的线程
top -H -p 12345
# 将线程ID转换为十六进制
printf “%x\n” 12346
304a
# 在线程转储中搜索
grep -A 50 “nid=0x304a” javacore.*.txt
3XMTHREADINFO “WebContainer : 2” (TID:0x00000000, sys_thread_t:0x00000000, state:R, native ID:0x0000304a)
4XESTACKTRACE at com.fgedu.service.DataService.processData(DataService.java:100)
4XESTACKTRACE at com.fgedu.servlet.FGeduServlet.doPost(FGeduServlet.java:50)
4. 分析代码
# 发现问题代码
# DataService.processData方法中有死循环或耗时操作
解决方案:
1. 优化代码
# 修复问题代码
# 添加缓存
# 优化SQL
2. 重启应用
AdminControl.invoke(AdminControl.queryNames(‘type=ApplicationManager,process=server1,*’),
‘restartApplication’, ‘fgeduapp’)
3. 验证性能
top -p $(pgrep -f server1)
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
12345 websphere 20 0 8388608 4194304 0 S 15.0 25.0 10:00.00 java
# 故障处理结果
问题原因:代码性能问题
解决方案:优化代码,重启应用
处理时间:30分钟
Part05-风哥经验总结与分享
5.1 WebSphere日志管理检查清单
WebSphere日志管理检查清单:
日志配置:
□ 日志级别设置正确
□ 日志轮转已配置
□ 日志位置有足够空间
□ GC日志已启用
日志监控:
□ 日志大小监控
□ 错误日志告警
□ 日志归档正常
故障排查:
□ 熟悉日志位置
□ 掌握分析工具
□ 有排查流程
# 日志检查脚本
#!/bin/bash
# log_check.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
echo “=== WebSphere日志检查 ===”
LOG_DIR=/WebSphere/app/profiles/AppSrv01/logs/server1
# 检查日志文件大小
echo “1. 日志文件大小:”
du -sh $LOG_DIR/*.log
# 检查日志文件数量
echo “”
echo “2. 日志文件数量:”
ls -la $LOG_DIR/*.log* | wc -l
# 检查最近错误
echo “”
echo “3. 最近10条错误:”
grep -i “error\|exception\|severe” $LOG_DIR/SystemOut.log | tail -10
# 检查磁盘空间
echo “”
echo “4. 磁盘空间:”
df -h /WebSphere
echo “=== 检查完成 ===”
5.2 WebSphere日志常见问题
WebSphere日志常见问题及解决方案:
5.2.1 常见问题汇总
问题1:日志文件过大
原因:日志级别过高、轮转未配置
解决:调整日志级别、配置轮转
问题2:日志丢失
原因:磁盘满、轮转配置错误
解决:清理磁盘、检查轮转配置
问题3:日志无法写入
原因:权限问题、磁盘只读
解决:检查权限、检查磁盘状态
问题4:日志信息不完整
原因:日志级别过低
解决:提高日志级别
问题5:日志分析困难
原因:日志格式不统一、日志量大
解决:使用日志分析工具、统一格式
5.3 WebSphere日志最佳实践
基于多年WebSphere运维经验,总结日志最佳实践:
5.3.1 日志管理原则
- 合理设置级别:生产环境INFO,问题排查时提高
- 配置日志轮转:避免日志文件过大
- 定期归档:保留历史日志用于审计
- 集中管理:使用ELK等工具集中管理日志
5.3.2 故障排查建议
- 从日志开始:先查看相关日志文件
- 关注错误信息:ERROR、Exception、SEVERE
- 分析时间线:按时间顺序分析事件
- 使用工具:借助ISA等工具深度分析
本文档详细介绍了WebSphere 9.0.5的日志管理与故障排查,包括日志概述、日志类型、日志级别、日志配置、日志查看、故障排查等内容。通过学习本文档,读者可以掌握WebSphere日志管理和故障排查的方法和最佳实践。更多视频教程www.fgedu.net.cn
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
