Linux是后端开发和运维人员必须掌握的操作系统。无论是部署应用、排查故障还是性能调优都离不开Linux命令行。但很多开发者只掌握cd、ls、ps等基础命令面对CPU飙高、内存泄漏、磁盘满、网络不通等线上问题时缺乏系统的排查思路。本文整理Linux运维中最实用的命令和排查方法论帮助读者快速定位和解决常见服务器问题。一、系统信息与资源概览登录服务器后第一步是了解系统基本状况。uname -a查看内核版本cat /etc/os-release查看发行版信息uptime查看系统运行时间和负载均值top或htop实时查看进程资源占用。负载均值load average三个数字分别表示1分钟、5分钟、15分钟的平均运行队列长度对于CPU密集型任务负载不超过CPU核心数即为正常如果1分钟负载远高于15分钟说明系统正在承受突发压力。# 系统基本信息uname -a # 内核版本cat /etc/os-release # 发行版uptime # 运行时间和负载lscpu # CPU详细信息free -h # 内存使用人类可读格式df -h # 磁盘使用du -sh /var/log/* # 目录大小排序# 实时监控top # 经典进程监控按P排序CPU按M排序内存htop # 更友好的交互式监控需安装vmstat 2 # 每2秒输出虚拟内存统计iostat -xz 2 # 每2秒输出IO统计需sysstat包二、CPU问题排查CPU使用率高是最常见的性能问题。排查思路是先用top找到占用CPU最高的进程再用top -Hp PID查看该进程下哪个线程占用最高然后用jstackJava应用或pstack/gdb定位线程在做什么。如果是Java应用还可以用Arthas等诊断工具直接查看方法调用栈。需要区分用户态CPU高us和系统态CPU高sy用户态高通常是应用代码计算量大或死循环系统态高可能是频繁系统调用、IO等待或内核问题。# 找到CPU最高的进程top -b -n 1 | head -20# 查看进程下的线程top -Hp 12345# Java线程定位将线程ID转为16进制在jstack中搜索printf %x\n 12346 # 线程ID转16进制jstack 12345 | grep -A 20 0x3039# 查看系统调用需stracestrace -p 12345 -c # 统计系统调用耗时strace -p 12345 -e tracenetwork # 只看网络相关系统调用# 火焰图需要perf工具perf record -F 99 -p 12345 -g -- sleep 30perf report -n --stdio三、内存问题排查内存问题包括内存使用率高、OOMOut Of Memory、内存泄漏。free命令输出中available列才是真正可用的内存buff/cache是系统用作缓存的内存在需要时可以回收。不要看到used高就认为内存不足。排查OOM可以用dmesg | grep -i killed process查看内核OOM Killer的日志。Java应用的内存问题需要区分堆内存和堆外内存堆内存用jmap -heap和jstat -gcutil分析堆外内存直接内存、元空间、线程栈用Native Memory TrackingNMT分析。问题现象排查命令常见原因内存使用率持续升高top / ps aux --sort-rss内存泄漏、缓存未设置上限进程被OOM Killer杀掉dmesg | grep -i killed超出cgroup内存限制、物理内存不足Java堆内存溢出jmap -heap / jstat -gcutil堆设置过小、大对象、内存泄漏Java堆外内存高jcmd VM.native_memory summary直接内存、Netty、线程栈过多swap使用高vmstat / swapon -s物理内存不足、swappiness设置过高四、磁盘问题排查磁盘问题主要是磁盘空间满和磁盘IO高。磁盘满用df -h查看各分区使用率找到满的分区后用du -sh /* | sort -rh找到大文件或大目录。常见的磁盘占用大户包括日志文件/var/log、Docker镜像和容器/var/lib/docker、临时文件/tmp、core dump文件。日志文件可以用logrotate配置自动轮转和清理。磁盘IO高用iostat -xz 2查看哪个磁盘设备IO利用率高%util接近100%说明磁盘瓶颈再用iotop或pidstat -d找到占用IO最高的进程。# 磁盘空间排查df -h # 查看分区使用率du -sh /var/* | sort -rh | head 10 # 找大目录find / -type f -size 1G 2/dev/null # 找大于1G的文件find /var/log -name *.log -mtime 7 -delete # 删除7天前的日志# 磁盘IO排查iostat -xz 2 # 磁盘IO统计iotop -oP # 实时查看IO最高的进程pidstat -d 2 # 每2秒查看进程IOlsof | grep deleted # 查看已删除但仍被进程占用的文件空间未释放# inode满文件数量过多df -ifind /path -type f | wc -l五、网络问题排查网络问题包括连接不通、端口不通、延迟高、丢包。排查思路是从底层到上层先ping测试网络连通性再telnet或nc测试端口然后用curl测试HTTP服务最后用tcpdump抓包分析。DNS问题用nslookup或dig测试域名解析。连接数过多用ss -s查看汇总ss -antp查看具体连接状态。TIME_WAIT过多是高并发场景的常见问题可以通过调整tcp_tw_reuse和tcp_fin_timeout参数缓解。# 连通性测试ping -c 4 192.168.1.100 # 测试网络连通traceroute 192.168.1.100 # 路由追踪mtr 192.168.1.100 # 组合pingtraceroute需安装# 端口测试telnet 192.168.1.100 8080 # 测试TCP端口nc -zv 192.168.1.100 8080 # netcat测试端口nc -ul 53 # 测试UDP端口# DNS测试nslookup api.example.comdig api.example.com trace# HTTP测试curl -v http://api.example.com/healthcurl -w \nHTTP Code: %{http_code}\nTotal Time: %{time_total}s\n -o /dev/null http://api.example.com# 连接状态ss -s # 连接汇总ss -antp | grep :8080 # 查看8080端口连接ss -ant | awk {print $1} | sort | uniq -c # 按状态统计连接数# 抓包tcpdump -i any port 8080 -nn -vv # 抓取8080端口数据包tcpdump -i eth0 -w capture.pcap # 保存到文件后用Wireshark分析六、日志查看与分析日志是排查问题的第一手资料。系统日志在/var/log目录下CentOS/RHEL用/var/log/messagesUbuntu/Debian用/var/log/syslog。systemd管理的服务用journalctl查看日志。应用日志通常在应用部署目录下。查看日志的常用命令组合tail -f实时跟踪grep过滤关键词less分页查看awk/sed做统计分析。对于大日志文件不要直接用vim打开应该用grep定位到相关行后再用less查看上下文。# 系统日志journalctl -u nginx -f # 实时跟踪nginx服务日志journalctl -u nginx --since 1 hour ago # 最近1小时的日志journalctl -k --since 10 min ago # 最近10分钟的内核日志dmesg -T | tail -50 # 内核环形缓冲区日志# 应用日志常用操作tail -f app.log # 实时跟踪tail -n 200 app.log # 最后200行grep -n ERROR app.log | tail -20 # 找最近的错误grep -C 5 NullPointerException app.log # 查看异常前后5行less app.log # 分页查看/搜索q退出awk {print $1} app.log | sort | uniq -c | sort -rn | head 10 # 统计Top10七、线上排查的通用方法论面对线上问题保持冷静按照“先止损、再定位、后复盘”的顺序处理。止损优先如果是流量突增导致服务不可用先扩容或限流如果是某个服务异常先切流量或回滚版本。定位问题时遵循“由表及里、由简到繁”的原则先看监控大盘CPU、内存、磁盘、网络、应用指标再看日志最后深入代码。排查过程中做好记录包括时间线、操作命令、现象变化方便事后复盘。问题解决后必须复盘找到根因并制定改进措施避免同类问题再次发生。结语Linux运维能力的核心不是记住多少命令而是建立系统的排查思路。CPU、内存、磁盘、网络四大类问题各有典型的排查路径掌握top、vmstat、iostat、ss、tcpdump、journalctl这些核心工具就能应对绝大多数线上问题。建议在平时就搭建好监控告警体系Prometheus Grafana将排查经验沉淀为Runbook这样线上出问题时才能快速响应、从容应对。