Linux排障必备:10个高效命令组合实战

发布时间:2026/7/14 19:30:43
Linux排障必备:10个高效命令组合实战 1. 线上排障必备10个Linux命令的实战价值在服务器运维和线上问题排查中Linux命令是工程师最锋利的武器。当系统出现异常时90%的问题都能通过日志分析定位根源。但面对动辄几个GB的日志文件如何快速锁定关键信息这10个命令组合就像手术刀般精准能帮你在5分钟内完成从症状定位到根因分析的全过程。我管理过日均10亿请求的电商系统也处理过Kubernetes集群的雪崩故障。这些实战经验让我总结出一套高效的排障命令组合特别适合处理以下场景服务突然响应变慢但监控指标正常接口报错率飙升但代码近期未变更服务器负载异常增高却找不到消耗源容器频繁重启但日志被覆盖2. 核心命令解析与组合技2.1 grep日志搜索的瑞士军刀# 基础用法区分大小写 grep NullPointerException catalina.out # 高级组合显示前后5行忽略大小写 grep -A 5 -B 5 -i timeout application.log # 正则匹配查找所有含日期格式的错误 grep -E [0-9]{4}-[0-9]{2}-[0-9]{2}.*ERROR service.log经验当搜索关键词不确定时先用grep -i忽略大小写再用-v反向过滤掉无关内容。对于Java应用配合-A参数查看异常堆栈特别有效。2.2 awk字段提取与统计利器# 统计Nginx日志各状态码出现次数 awk {print $9} access.log | sort | uniq -c | sort -nr # 计算接口平均响应时间假设第7列为响应时间 awk {sum$7; count} END{print Avg:,sum/count,ms} api.log # 提取特定时间段的日志第4列为时间 awk $4 [10/Oct/2023:14:00:00 $4 [10/Oct/2023:15:00:00 access.log2.3 sed流式文本处理大师# 替换日志中的敏感信息如手机号 sed -r s/(1[3-9][0-9])[0-9]{4}([0-9]{4})/\1****\2/g user.log # 提取两个标记之间的日志比如事务开始结束 sed -n /TX_START/,/TX_END/p transaction.log # 删除空白行和注释行 sed -e /^$/d -e /^#/d config.conf3. 高级排查组合技3.1 慢查询分析三板斧# 组合案例分析MySQL慢查询日志 grep Query_time slow.log | awk $35 {print $0} | sort -k3 -nr | head -20 # 解析结果示例 # Query_time: 6.3 Lock_time: 0.001 Rows_sent: 1 Rows_examined: 1000000 # SELECT * FROM orders WHERE create_time BETWEEN 2023-10-01 AND 2023-10-023.2 内存泄漏排查流程# 1. 找到内存占用最高的Java进程 top -c -o %MEM | grep java # 2. 生成堆转储文件pid替换为实际进程ID jmap -dump:formatb,fileheap.hprof pid # 3. 分析GC日志需JVM添加-XX:PrintGCDetails参数 grep Full GC gc.log | awk {print $1,$7,$8} | more4. 高频问题速查表问题现象推荐命令组合日志文件太大打不开less F error.log或tail -f -n 1000 app.log | grep -A 10 Exception找最近修改的配置文件find /etc/ -type f -name *.conf -mtime -1 -exec ls -lh {} \;端口占用检查netstat -tulnp | grep 8080或lsof -i :8080磁盘空间异常占用du -h --max-depth1 / | sort -hr配合ncdu可视化工具批量杀进程ps -ef | grep python | awk {print $2} | xargs kill -95. 性能分析进阶工具链当基础命令无法满足需求时这些工具能提供更深入的洞察perf系统级性能分析perf top -p pid # 实时查看函数调用热点 perf record -g -p pid # 记录调用栈strace系统调用跟踪strace -ff -T -tt -p pid # 跟踪进程所有线程的系统调用eBPF工具集bpftrace -e tracepoint:syscalls:sys_enter_* { [probe] count(); }6. 日志管理最佳实践日志轮转配置使用logrotate避免磁盘爆满/var/log/nginx/*.log { daily rotate 7 compress missingok notifempty sharedscripts postrotate nginx -s reopen endscript }结构化日志建议改用JSON格式便于解析{ timestamp: 2023-10-10T14:23:45Z, level: ERROR, traceId: abc123, message: DB connection timeout }集中式日志方案ELK Stack或Grafana Loki对于分布式系统建议将日志集中到Elasticsearch或Loki配合以下命令预处理# 将多行堆栈日志合并为单个事件 awk /^[0-9]{4}-/ NR1 {print } {printf %s,$0} app.log | jq -R -c split( ) | {time:.[0], level:.[1], msg:.[2:]}