0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux基础命令的进阶用法

马哥Linux运维 来源:马哥Linux运维 2025-09-02 16:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Linux 运维进阶:从基础命令到系统优化的深度剖析

开篇:你是否遇到过这些崩溃时刻?

凌晨2点,正在熟睡的你被电话惊醒:"线上服务响应超时,用户大面积投诉!" 你匆忙打开电脑,SSH 登录服务器,面对满屏的进程和日志,脑子一片空白——从哪里开始排查?用什么命令?怎么快速定位问题?

如果你也有过类似经历,或者正在为"Linux 命令太多记不住"、"系统优化不知从何下手"而苦恼,那这篇文章就是为你准备的。

读完本文,你将收获:

20个高频运维命令的进阶用法(不只是 ls、cd,而是 top -Hp、strace -c 这些实战利器)

5大系统性能指标的优化方案CPU、内存、磁盘I/O、网络、进程管理全覆盖)

3个生产环境真实案例拆解(附完整排查过程和可复用脚本)

1套系统优化检查清单(可直接用于日常巡检和故障预防)

一、基础命令进阶:从"会用"到"用好"

1.1 CPU 排查三剑客:top、htop、pidstat

很多人用top只会看 CPU 使用率,但真正的高手会这样用:

关键命令1:定位高 CPU 进程的具体线程

# 先找到高 CPU 进程的 PID(假设是 12345)
top -c

# 查看该进程的所有线程 CPU 占用
top -Hp 12345

# 将线程 ID 转换为 16 进制(用于匹配 jstack 输出)
printf"%x
"12356 # 假设高 CPU 线程 ID 是 12356

踩坑经验:我曾经只看进程级 CPU,结果某个 Java 应用的 GC 线程疯狂占用 CPU 却没发现,导致排查了 3 小时。正确做法:always 使用-Hp参数查看线程级详情。

关键命令2:实时监控指定进程的资源消耗

# 每 2 秒刷新一次 PID 12345 的详细资源占用
pidstat -u -r -d -t -p 12345 2

# 参数说明:
# -u: CPU 使用统计
# -r: 内存使用统计
# -d: 磁盘 I/O 统计
# -t: 显示线程级别信息

1.2 内存排查进阶:不只是 free -h

关键命令3:精准定位内存泄漏进程

# 查看进程内存映射,找出异常增长的内存段
pmap -x 12345 |tail-5

# 持续监控内存增长趋势(每 5 秒记录一次)
whiletrue;do
 date>> mem_monitor.log
  ps aux | grep 12345 | grep -v grep >> mem_monitor.log
 sleep5
done

血泪教训:曾经一个 Node.js 应用内存缓慢泄漏,用free -h只能看到总内存在减少,却不知道是哪个进程。后来用smem -rs swap -p按 swap 使用量排序,立刻定位到问题进程。

1.3 磁盘 I/O 深度分析:iotop 的高级用法

关键命令4:找出隐藏的 I/O 杀手

# 实时显示每个进程的磁盘读写速度
iotop -oP -d 2

# 参数说明:
# -o: 只显示有 I/O 活动的进程
# -P: 只显示进程,不显示线程
# -d 2: 每 2 秒刷新

# 查看某个进程的 I/O 详细信息
cat/proc/12345/io

实战技巧:MySQL 数据库突然变慢,CPU 和内存都正常,最后发现是日志文件写入导致磁盘 I/O 饱和。解决方案:将innodb_flush_log_at_trx_commit从 1 改为 2,写入性能提升 5 倍。

二、系统优化实战:从原理到落地

2.1 CPU 优化:不只是调整 nice 值

优化方案1:CPU 亲和性绑定

# 将 nginx worker 进程绑定到指定 CPU 核心
# 在 nginx.conf 中添加:
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;

# 验证绑定效果
taskset -cp$(pgrep nginx)

为什么要这样做:避免进程在 CPU 核心间频繁切换,减少 L1/L2 缓存失效,实测可提升 15% 性能。

优化方案2:中断负载均衡

# 查看当前中断分布
cat/proc/interrupts

# 将网卡中断绑定到特定 CPU
echo2 > /proc/irq/24/smp_affinity # 24 是网卡中断号

2.2 内存优化:科学配置才是王道

优化方案3:合理设置 swappiness

# 查看当前值
cat/proc/sys/vm/swappiness

# 临时修改(重启失效)
echo10 > /proc/sys/vm/swappiness

# 永久修改
echo"vm.swappiness = 10">> /etc/sysctl.conf
sysctl -p

参数选择经验

数据库服务器:设为 1-10(优先使用物理内存)

应用服务器:设为 30-60(平衡内存和 swap)

个人桌面:保持默认 60

踩坑提醒:不要设为 0!曾经为了"优化性能"设为 0,结果内存不足时直接 OOM Kill 掉了核心进程。

2.3 网络优化:提升并发连接能力

优化方案4:TCP 参数调优

# 优化 TCP 连接队列
echo'net.core.somaxconn = 65535'>> /etc/sysctl.conf
echo'net.ipv4.tcp_max_syn_backlog = 8192'>> /etc/sysctl.conf

# 优化 TIME_WAIT 状态处理
echo'net.ipv4.tcp_tw_reuse = 1'>> /etc/sysctl.conf
echo'net.ipv4.tcp_tw_recycle = 0'>> /etc/sysctl.conf # 注意:不要开启!

# 立即生效
sysctl -p

注意事项:tcp_tw_recycle在 NAT 环境下会导致连接异常,生产环境绝对不要开启

三、实战案例:真实故障排查全过程

案例1:诡异的 CPU 100% 却找不到进程

故障现象:监控显示 CPU 使用率 100%,但 top 命令看不到高 CPU 进程。

排查过程

# Step 1: 检查是否有隐藏进程
ps aux | awk'{print $3}'|sort-rn |head-10

# Step 2: 查看内核线程
ps aux | grep"[.*]"

# Step 3: 检查 I/O wait(发现 wa 值异常高)
top
# 显示:Cpu(s): 2.0%us, 3.0%sy, 0.0%ni, 0.0%id, 94.0%wa

# Step 4: 定位 I/O 瓶颈进程
iotop -oP
# 发现是 rsync 备份进程导致

根因:定时备份脚本使用 rsync 同步大量小文件,导致 I/O wait 飙高,CPU 看起来 100% 但实际是在等待 I/O。

解决方案

1. 将 rsync 改为增量备份:rsync -avz --delete

2. 限制 rsync 带宽:--bwlimit=10240(限制为 10MB/s)

3. 调整备份时间到业务低峰期

案例2:内存泄漏导致的连锁反应

完整排查脚本(可直接使用):

#!/bin/bash
# 文件名:check_memory_leak.sh
# 功能:自动检测可能存在内存泄漏的进程

echo"=== Memory Leak Detection Script ==="
echo"Monitoring memory usage for 60 seconds..."

# 创建临时文件
tmpfile=$(mktemp)

# 第一次采样
ps aux --sort=-%mem |head-20 | awk'{print $2,$4,$11}'>$tmpfile.1

# 等待 60 秒
sleep60

# 第二次采样
ps aux --sort=-%mem |head-20 | awk'{print $2,$4,$11}'>$tmpfile.2

echo-e"
=== Processes with significant memory growth ==="
echo"PID  MEM_BEFORE MEM_AFTER GROWTH COMMAND"

# 对比两次采样结果
whilereadpid mem1 cmd1;do
  mem2=$(grep"^$pid"$tmpfile.2 | awk'{print $2}')
 if[ ! -z"$mem2"];then
    growth=$(echo"$mem2-$mem1"| bc)
   if(( $(echo "$growth>0.5" | bc -l) ));then
     printf"%-6s %-10s %-10s %-7s %s
"
         "$pid""$mem1%""$mem2%""+$growth%""$cmd1"
   fi
 fi
done< $tmpfile.1

# 清理临时文件
rm -f $tmpfile*

echo -e "
=== Recommendation ==="
echo"For suspicious processes, use: pmap -x PID"
echo "Or check memory maps: cat /proc/PID/smaps"

使用方法

chmod+x check_memory_leak.sh
./check_memory_leak.sh

四、系统优化检查清单(可直接用于日常巡检)

每日检查项

CPU 负载:uptime查看 1/5/15 分钟负载,不超过 CPU 核数的 0.7 倍

内存使用:free -h确保可用内存 > 20%

磁盘空间:df -h确保所有分区使用率 < 80%

关键进程:systemctl status nginx/mysql/redis确保服务正常

每周优化项

清理日志:find /var/log -name "*.log" -mtime +30 -exec rm {} ;

检查僵尸进程:ps aux | grep defunct

分析慢查询:检查 MySQL slow query log

更新系统:yum update --security或apt-get upgrade

每月深度优化

磁盘碎片整理:e4defrag /dev/sda1(ext4 文件系统)

TCP 连接分析:ss -s查看连接状态分布

内核参数复查:对照最佳实践检查/etc/sysctl.conf

结语:从被动救火到主动防御

掌握了这套"命令进阶 + 优化方案 + 排查脚本"的组合拳,你就能从被动的"救火队员"转变为主动的"系统架构师"。记住:优秀的运维不是没有故障,而是能在故障发生前发现征兆,在故障发生时快速恢复。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11216

    浏览量

    222878
  • Linux
    +关注

    关注

    88

    文章

    11627

    浏览量

    217907
  • 内存
    +关注

    关注

    9

    文章

    3173

    浏览量

    76103

原文标题:Linux 运维进阶:从基础命令到系统优化的深度剖析

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux find命令用法

    可以很肯定地说,find 命令Linux 后台开发人员必须熟知的操作之一,除非您使用的是 Windows Server。
    发表于 10-12 11:27 789次阅读

    SQLx的基础用法进阶用法

    SQLx是一个Rust语言的异步SQL数据库访问库,支持多种数据库,包括PostgreSQL、MySQL、SQLite等。本教程将以SQLite为例,介绍SQLx的基础用法进阶用法。 基础
    的头像 发表于 09-19 14:29 3769次阅读

    Stream模块的基础用法进阶用法

    有用。在本教程中,我们将介绍 Stream 模块的基础用法进阶用法,并提供示例。 基础用法 在本节中,我们将介绍 Stream 模块的基础用法
    的头像 发表于 09-19 15:33 1943次阅读

    linux中comm命令用法

    linux系统中comm命令用法详解 linux系统下的comm命令是一个非常实用的文件对比命令
    发表于 07-04 08:22

    Linux中的35个find命令用法

    Linux查找命令Linux系统中最重要和最常用的命令之一。查找用于根据与参数匹配的文件指定的条件来搜索和查找文件和目录列表的命令
    的头像 发表于 02-02 16:53 4257次阅读
    <b class='flag-5'>Linux</b>中的35个find<b class='flag-5'>命令</b><b class='flag-5'>用法</b>

    详谈Linux的find命令

    find 是 Linux 下最有用的命令之一,熟练的使用它对于提高工作效率很有帮助。下面介绍它的一些用法
    的头像 发表于 06-23 09:43 3502次阅读
    详谈<b class='flag-5'>Linux</b>的find<b class='flag-5'>命令</b>

    linux的scp命令怎么用_linux的grep命令用法

    linux中,scp命令用于Linux之间复制文件和目录,即在一台Linux服务器中将本地的文件上传到一台远端服务器,或将远端服务器的文件下载到本地。scp是
    发表于 09-04 15:36 4749次阅读
    <b class='flag-5'>linux</b>的scp<b class='flag-5'>命令</b>怎么用_<b class='flag-5'>linux</b>的grep<b class='flag-5'>命令</b><b class='flag-5'>用法</b>

    如何在Linux使用touch命令

    Linux touch命令用于更改文件时间戳。但touch命令的最常见用法是创建文件。
    的头像 发表于 12-05 17:21 2711次阅读

    Linux系统维护命令用法

    Linux有很多命令,每个命令基本可以用一篇文章介绍,本文仅简单总结一些常用系统维护命令用法
    的头像 发表于 04-17 14:57 1581次阅读
    <b class='flag-5'>Linux</b>系统维护<b class='flag-5'>命令</b>的<b class='flag-5'>用法</b>

    基于select!宏的进阶用法

    宏,它可以让我们同时监听多个异步事件,一旦其中一个事件触发,就可以立即执行相应的代码。在本教程中,我们将详细介绍 select!宏的进阶用法,并提供多个示例来帮助您更好地理解和掌握这个宏的使用方法。 进阶
    的头像 发表于 09-19 15:35 1433次阅读

    linux中source命令用法

    Linux中,source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。source命令可以用于读取并执行脚本文件中的命令,通常用于在当前shell环境
    的头像 发表于 11-08 14:35 3797次阅读

    linux查看物理接口的命令

    Linux操作系统提供了多种命令和工具来查看物理接口。在这篇文章中,我们将详细介绍一些最常用和常见的命令,以及它们的用法和输出。 ifconfig
    的头像 发表于 11-16 16:48 2386次阅读

    linux常用命令用法

    Linux是一种开源的操作系统,它以稳定、高效和安全的特点受到广大用户的喜爱。掌握Linux的常用命令及其用法对于操作系统的管理和开发都至关重要。本文将详尽、详实、细致地介绍
    的头像 发表于 11-17 09:47 1317次阅读

    总结linux命令行的主要用法

    Linux命令行是一种在Linux操作系统中通过文本界面来执行指令和管理系统的方式。它提供了丰富的功能和灵活性,帮助用户完成各种任务。本文将详细介绍Linux
    的头像 发表于 11-17 10:19 1258次阅读

    Linux lsof命令的基本用法

    linux 系统中,一切皆文件。通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。所以 lsof 命令不仅可以查看进程打开的文件、目录,还可以查看进程监听的端口等 socket 相关的信息。本文将介绍 lsof 命令
    的头像 发表于 10-23 11:52 2344次阅读
    <b class='flag-5'>Linux</b> lsof<b class='flag-5'>命令</b>的基本<b class='flag-5'>用法</b>