一、跳板机:安全访问的桥梁
跳板机(Bastion Host) 是企业内部网络的安全入口,所有远程访问需先通过跳板机中转。
核心作用:
- 集中权限控制与审计。
- 避免直接暴露生产服务器IP。
连接流程:
# 1. 登录跳板机(需提前申请权限)
ssh your_username@jump-server.example.com -p 2222
# 2. 从跳板机连接到目标应用服务器(假设内网IP为10.0.0.5)
ssh appuser@10.0.0.5
二、故障排查六步法
步骤1:确认服务状态
# 查看Java进程是否存活
ps -ef | grep java # 过滤Java进程
# 输出示例:
# appuser 12345 1 0 Jun01 ? 00:30:29 java -jar app.jar
# 或使用jps(需JDK环境)
jps -l # 显示Java进程及主类名
常见问题:
- 进程不存在 → 检查OOM、崩溃日志(
/var/log/messages或应用日志)。 - 进程存在但无响应 → 进入下一步排查。
步骤2:检查系统资源
# 1. 实时监控CPU、内存
top -H -p <PID> # 按线程查看资源占用(PID为Java进程ID)
# 2. 内存概况
free -h # 显示总内存、已用、剩余
# 3. 磁盘空间
df -h # 查看磁盘使用率
du -sh /app/logs/* # 检查日志目录大小
# 4. 网络连接
ss -antp | grep <PORT> # 查看指定端口连接状态
netstat -s | grep 'retransmit' # 检查TCP重传(网络不稳定)
步骤3:分析Java进程
# 1. 查看GC情况(每隔1秒输出一次)
jstat -gcutil <PID> 1000
# 2. 生成线程快照(分析死锁、阻塞)
jstack <PID> > thread_dump.txt
# 3. 堆内存转储(需复现OOM时使用)
jmap -dump:live,format=b,file=heap.hprof <PID>
步骤4:日志追踪
日志目录通常为/app/logs或/var/log/app
# 1. 实时追踪最新日志
tail -f app.log | grep 'ERROR' --color # 高亮错误
# 2. 按时间范围过滤
sed -n '/2024-06-01 14:00:00/,/2024-06-01 15:00:00/p' app.log > error_period.log
# 3. 统计错误次数
grep -c 'OutOfMemoryError' app.log
# 4. 多文件联合查询(如按天分割的日志)
zgrep 'Connection refused' app.log.2024-06-01.gz
步骤5:网络与中间件
# 1. 检查依赖服务(如数据库、Redis)
telnet db-host 3306 # 测试端口连通性
# 2. 模拟HTTP请求(需curl)
curl -v http://localhost:8080/health # 查看接口响应
# 3. 检查Redis连接池
redis-cli -h redis-host -p 6379 info clients # 查看客户端连接数
步骤6:数据导出与本地分析
# 1. 压缩日志文件
tar -czvf logs.tar.gz /app/logs/*.log
# 2. 从服务器下载文件到本地
scp appuser@10.0.0.5:/path/to/logs.tar.gz ~/Downloads/
# 3. 使用工具分析
# - heap.hprof → Eclipse MAT/JProfiler
# - thread_dump.txt → FastThread在线分析
三、经典问题排查速查表
| 现象 | 优先检查项 | 关键命令 |
|---|---|---|
| CPU 100% | 高负载线程、死循环 | top -H -p <PID> + jstack |
| 请求超时增多 | 网络延迟、线程池满 | ss -s + jstack |
| Full GC频繁 | 内存泄漏、堆配置不合理 | jstat -gcutil + jmap |
| 磁盘空间不足 | 日志文件过大、临时文件未清理 | df -h + du -sh /* |
| 数据库连接耗尽 | 连接泄漏、慢SQL | SHOW PROCESSLIST(MySQL) |
四、排查原则与工具链
- 从外到内:先确认网络、中间件,再深入JVM。
- 从现象到根源:根据日志错误关键词定位代码位置。
- 工具链准备:
- 命令行:
jq(JSON解析)、htop(增强版top)。 - 可视化:Arthas、Prometheus + Grafana(监控)。
- 命令行:
记住:线上操作需谨慎,任何命令执行前确认影响范围!