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

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

3天内不再提示

Linux性能监控与调优技巧

马哥Linux运维 ? 来源:马哥Linux运维 ? 2025-08-18 11:26 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Linux性能优化:系统监控与调优技巧全解析

3年运维老司机的血泪总结:从菜鸟到专家,这些性能调优技巧让我的系统性能提升300%!

前言:性能调优的真正价值

作为一名在一线摸爬滚打多年的运维工程师,我见过太多因为性能问题导致的线上故障。凌晨2点被告警电话吵醒,面对CPU飙升到100%、内存不足、磁盘IO瓶颈等问题时的那种焦虑,相信每个运维人都深有体会。

今天这篇文章,我将毫无保留地分享实战中最有效的Linux性能监控与调优技巧,让你从"救火队员"变身"性能专家"!

一、性能监控的"黄金法则"

监控四大维度

在开始任何优化工作之前,我们需要建立完整的监控体系。根据我的实战经验,Linux性能监控主要关注四个维度:

1. CPU性能监控

# 实时查看CPU使用情况
top -p $(pgrep -d','your_process_name)

# 查看CPU详细统计信息
sar -u 1 10

# 查看特定进程的CPU使用
pidstat -u -p PID 1

实战技巧:很多新手只看CPU总体使用率,但真正的专家会关注以下指标:

?%usr: 用户空间CPU使用率

?%sys: 系统空间CPU使用率

?%iowait: 等待IO的CPU时间百分比

?%idle: CPU空闲时间百分比

当%iowait持续超过20%时,通常意味着存在磁盘IO瓶颈!

2. 内存性能监控

# 查看内存使用详情
free -h

# 实时监控内存变化
watch -n 1'free -h'

# 查看进程内存使用
ps aux --sort=-%mem |head-10

核心监控指标解读

?Available内存:这是最重要的指标,而不是Free内存

?Buffer/Cache使用率:Linux会智能缓存,这部分内存可以被回收

?Swap使用情况:一旦开始使用Swap,性能会显著下降

3. 磁盘IO监控

# 查看磁盘IO统计
iostat -x 1 5

# 实时监控磁盘活动
iotop

# 查看文件系统使用情况
df-h

关键指标警戒线

?%util > 80%: 磁盘可能成为瓶颈

?await > 10ms: IO响应时间过长

?r/s + w/s > 1000: IOPS过高需要优化

4. 网络性能监控

# 查看网络连接状态
ss -tuln

# 监控网络流量
iftop

# 查看网络统计信息
cat/proc/net/dev

建立监控基线

很多运维工程师忽略了这一点:没有基线的监控是盲目的!

建议为每个关键指标建立正常运行时的基线值:

# 创建性能基线脚本
#!/bin/bash
DATE=$(date+%Y%m%d_%H%M%S)
BASELINE_DIR="/opt/performance_baseline"

mkdir-p$BASELINE_DIR

# 收集基线数据
{
 echo"=== CPU Baseline ==="
  sar -u 1 60
 echo"=== Memory Baseline ==="
  free -h
 echo"=== Disk IO Baseline ==="
  iostat -x 1 10
 echo"=== Network Baseline ==="
  ss -s
} >$BASELINE_DIR/baseline_$DATE.log

二、CPU性能调优实战

CPU调优的三大杀器

1. 进程优先级调整

很多人知道nice命令,但真正用好的人不多:

# 降低CPU密集型任务的优先级
nice-n 19 your_cpu_intensive_command

# 对已运行的进程调整优先级
renice -n 10 -p PID

# 实时调整进程优先级(推荐)
ionice -c3 -p PID # 设置为空闲IO调度

实战案例:某电商网站备份任务导致CPU使用率飙升,影响用户访问。通过将备份进程的nice值设置为19,CPU使用率从90%降至30%,用户响应时间恢复正常。

2. CPU亲和性设置

这是高级运维工程师必备技能:

# 查看进程CPU亲和性
taskset -cpPID

# 绑定进程到特定CPU核心
taskset -cp0,1 PID

# 启动程序时指定CPU亲和性
taskset -c 0-3 your_program

优化策略

? 将网络中断绑定到特定CPU核心

? 将应用程序绑定到其他CPU核心

? 避免进程在CPU核心间频繁迁移

3. 中断优化

这是很多运维工程师容易忽略的高级技巧:

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

# 手动设置网卡中断亲和性
echo2 > /proc/irq/24/smp_affinity

# 使用irqbalance自动优化
systemctlenableirqbalance
systemctl start irqbalance

CPU调优效果验证

调优后,使用以下方法验证效果:

# 压力测试
stress-ng --cpu 4 --timeout60s

# 对比调优前后的性能数据
sar -u 1 10 > after_optimization.log

三、内存优化的"独门秘籍"

内存调优四部曲

第一步:内存使用分析

# 查看系统内存详细信息
cat/proc/meminfo

# 分析内存使用最多的进程
ps aux --sort=-%mem |head-20

# 查看共享内存使用情况
ipcs -m

第二步:Swap优化

Swap优化是性能提升的关键点:

# 查看当前swap使用情况
swapon -s

# 调整swap使用策略(重要!)
echo10 > /proc/sys/vm/swappiness # 降低swap使用倾向

# 永久设置
echo'vm.swappiness = 10'>> /etc/sysctl.conf

实战经验:默认swappiness值为60,这对服务器来说太高了。我建议:

? 数据库服务器:设置为1-5

? Web应用服务器:设置为10-20

? 一般应用服务器:设置为10-30

第三步:内存回收策略优化

# 手动释放缓存(紧急情况使用)
echo3 > /proc/sys/vm/drop_caches

# 优化内存分配策略
echo0 > /proc/sys/vm/overcommit_memory
echo50 > /proc/sys/vm/overcommit_ratio

# 永久设置
cat>> /etc/sysctl.conf <

第四步:大页内存优化

对于内存密集型应用,大页内存可以显著提升性能:

# 查看大页内存状态
cat/proc/meminfo | grep -i huge

# 设置大页内存
echo1024 > /proc/sys/vm/nr_hugepages

# 永久设置
echo'vm.nr_hugepages = 1024'>> /etc/sysctl.conf

内存泄漏检测

这是高级运维工程师的必备技能:

# 使用valgrind检测内存泄漏
valgrind --tool=memcheck --leak-check=full your_program

# 监控进程内存使用趋势
whiletrue;do
  ps -o pid,ppid,cmd,%mem,%cpu --sort=-%mem |head-10
 echo"---"
 sleep5
done

四、磁盘IO优化实战

IO调优的"三板斧"

1. 文件系统选择与优化

不同的文件系统性能差异巨大:

# 推荐的文件系统挂载选项
mount -o noatime,nodiratime,barrier=0 /dev/sdb1 /data

# 永久设置
echo'/dev/sdb1 /data ext4 defaults,noatime,nodiratime,barrier=0 0 0'>> /etc/fstab

文件系统性能对比(基于我的实测数据):

?XFS: 大文件读写性能最佳,推荐用于数据存储

?EXT4: 兼容性最好,中小文件性能优秀

?Btrfs: 功能丰富但性能一般,适合特殊需求

2. IO调度器优化

这是很多运维工程师忽略的重要优化点:

# 查看当前IO调度器
cat/sys/block/sda/queue/scheduler

# 设置IO调度器
echonoop > /sys/block/sda/queue/scheduler

# 永久设置
echo'echo noop > /sys/block/sda/queue/scheduler'>> /etc/rc.local

调度器选择建议

?SSD硬盘: 使用noop或deadline

?机械硬盘: 使用cfq或deadline

?虚拟化环境: 使用noop

3. 磁盘参数优化

# 调整磁盘预读参数
blockdev --setra 4096 /dev/sda

# 优化磁盘队列深度
echo32 > /sys/block/sda/queue/nr_requests

# 禁用磁盘节能模式
hdparm -B 255 /dev/sda

IO性能监控脚本

这是我在生产环境中使用的监控脚本:

#!/bin/bash
# IO性能实时监控脚本

whiletrue;do
  clear
 echo"=== 磁盘IO实时监控 ==="
 echo"时间:$(date)"
 echo
 
 # 显示磁盘使用率
  iostat -x 1 1 | grep -E"(Device|sd)"
 echo
 
 # 显示IO最高的进程
 echo"=== IO使用率最高的进程 ==="
  iotop -b -n1 -a |head-15
 echo
 
 sleep2
done

五、网络性能优化秘籍

网络调优的核心技巧

1. TCP参数优化

这些参数调整可以显著提升网络性能:

# 优化TCP连接参数
cat>> /etc/sysctl.conf <

2. 网络中断优化

# 查看网络中断分布
cat/proc/interrupts | grep eth0

# 设置网络中断CPU亲和性
echo2 > /proc/irq/24/smp_affinity

# 启用多队列网卡支持
ethtool -L eth0 combined 4

3. 防火墙优化

# 优化iptables规则顺序(将常用规则放在前面)
iptables -I INPUT 1 -p tcp --dport 80 -j ACCEPT

# 使用ipset提高大量IP处理效率
ipset create blacklisthash:ip
ipset add blacklist 192.168.1.100
iptables -A INPUT -mset--match-set blacklist src -j DROP

网络性能监控

# 实时网络流量监控
#!/bin/bash
INTERFACE="eth0"

whiletrue;do
  RX1=$(cat/sys/class/net/$INTERFACE/statistics/rx_bytes)
  TX1=$(cat/sys/class/net/$INTERFACE/statistics/tx_bytes)
 sleep1
  RX2=$(cat/sys/class/net/$INTERFACE/statistics/rx_bytes)
  TX2=$(cat/sys/class/net/$INTERFACE/statistics/tx_bytes)
 
  RX_RATE=$(((RX2-RX1)/1024))
  TX_RATE=$(((TX2-TX1)/1024))
 
 echo"接收速率:${RX_RATE}KB/s | 发送速率:${TX_RATE}KB/s"
done

六、综合性能调优案例

真实案例:电商网站性能优化

背景:某电商网站在促销期间出现严重性能问题:

? 页面响应时间从200ms增加到5秒

? CPU使用率持续在90%以上

? 数据库查询超时频繁

? 用户投诉激增

问题分析过程

# 1. 系统整体性能分析
top -c
sar -u -r -b 1 10

# 2. 数据库性能分析
mysqladmin processlist
show full processlist;

# 3. 网络连接分析 
ss -tuln |wc-l
netstat -an | grep TIME_WAIT |wc-l

优化措施与效果

1.CPU优化

# 调整MySQL进程优先级
renice -10 $(pgrep mysqld)

# 绑定MySQL到特定CPU核心
taskset -cp0-3 $(pgrep mysqld)

# 优化Apache进程数量
vim /etc/httpd/conf/httpd.conf
# MaxRequestWorkers 400 → 200

效果:CPU使用率从90%降至60%

2.内存优化

# 调整MySQL缓冲池
vim /etc/mysql/my.cnf
# innodb_buffer_pool_size = 8G → 12G

# 减少swap使用
echo5 > /proc/sys/vm/swappiness

效果:数据库查询时间减少40%

3.磁盘IO优化

# 更换IO调度器
echodeadline > /sys/block/sda/queue/scheduler

# 优化文件系统挂载参数
mount -o remount,noatime,nodiratime /dev/sda1 /var/lib/mysql

效果:磁盘IO wait从30%降至5%

最终结果

? 页面响应时间:5秒 → 300ms

? 系统负载:从4.5降至1.2

? 用户满意度显著提升

? 成功支撑了2倍的并发访问量

七、自动化监控脚本

一键性能检查脚本

基于多年实战经验,我开发了这个一键性能检查脚本:

#!/bin/bash
# Linux性能一键检查脚本
# 作者:运维老司机
# 版本:v2.0

echo"================== Linux性能检查报告 =================="
echo"检查时间:$(date)"
echo"主机名:$(hostname)"
echo"内核版本:$(uname -r)"
echo

# 1. CPU性能检查
echo"【CPU性能分析】"
CPU_USAGE=$(top -bn1 | grep"Cpu(s)"| awk'{print $2}'|cut-d'%'-f1)
CPU_CORES=$(nproc)
LOAD_1MIN=$(uptime| awk -F'load average:''{print $2}'| awk'{print $1}'|tr-d',')

echo"CPU核心数:$CPU_CORES"
echo"CPU使用率:${CPU_USAGE}%"
echo"1分钟负载:$LOAD_1MIN"

if(( $(echo "$LOAD_1MIN>$CPU_CORES" | bc -l) ));then
 echo" 警告:系统负载过高!"
fi
echo

# 2. 内存性能检查
echo"【内存性能分析】"
TOTAL_MEM=$(free -m | awk'NR==2{print $2}')
USED_MEM=$(free -m | awk'NR==2{print $3}')
FREE_MEM=$(free -m | awk'NR==2{print $4}')
AVAILABLE_MEM=$(free -m | awk'NR==2{print $7}')

MEM_USAGE=$(echo"scale=1;$USED_MEM*100/$TOTAL_MEM"| bc)

echo"总内存:${TOTAL_MEM}MB"
echo"已使用:${USED_MEM}MB (${MEM_USAGE}%)"
echo"可用内存:${AVAILABLE_MEM}MB"

if(( $(echo "$MEM_USAGE>80" | bc -l) ));then
 echo" 警告:内存使用率过高!"
fi
echo

# 3. 磁盘性能检查
echo"【磁盘性能分析】"
df-h | grep -E'^/dev/'|whilereadline;do
  USAGE=$(echo$line| awk'{print $5}'|tr-d'%')
  MOUNT=$(echo$line| awk'{print $6}')
 
 echo"$line"
 if["$USAGE"-gt 85 ];then
   echo" 警告:$MOUNT磁盘使用率过高 ($USAGE%)!"
 fi
done
echo

# 4. 网络连接检查
echo"【网络连接分析】"
ESTABLISHED_CONN=$(ss -an | grep ESTAB |wc-l)
TIME_WAIT_CONN=$(ss -an | grep TIME-WAIT |wc-l)

echo"当前连接数:$ESTABLISHED_CONN"
echo"TIME_WAIT连接数:$TIME_WAIT_CONN"

if["$TIME_WAIT_CONN"-gt 5000 ];then
 echo" 警告:TIME_WAIT连接数过多!"
fi
echo

# 5. 进程资源使用TOP10
echo"【资源使用TOP10进程】"
echo"--- CPU使用率TOP10 ---"
ps aux --sort=-%cpu |head-11 |tail-10

echo
echo"--- 内存使用率TOP10 ---"
ps aux --sort=-%mem |head-11 |tail-10

echo
echo"================== 检查完成 =================="

性能报告生成器

#!/bin/bash
# 性能报告生成器

REPORT_DATE=$(date+%Y%m%d_%H%M%S)
REPORT_FILE="/tmp/performance_report_$REPORT_DATE.html"

# 生成HTML报告
cat>$REPORT_FILE<


  Linux性能监控报告
  


  

Linux性能监控报告

生成时间: $(date)

主机名: $(hostname)

系统概览

指标当前值状态
CPU使用率$(top -bn1 | grep "Cpu(s)" | awk '{print $2}')正常
内存使用率$(free | awk 'NR==2{printf "%.1f%%", $3*100/$2}')正常
系统负载$(uptime | awk -F'load average:' '{print $2}')监控中

优化建议:定期执行性能检查,建立监控基线,及时发现性能瓶颈。

EOF echo"性能报告已生成:$REPORT_FILE"

八、进阶优化技巧

高级运维工程师必备技能

1. 内核参数调优

这些是我在生产环境中验证过的最有效的内核参数:

# /etc/sysctl.conf 高性能配置
cat>> /etc/sysctl.conf <

2. 进程限制优化

# /etc/security/limits.conf
cat>> /etc/security/limits.conf <

3. 定制监控告警

#!/bin/bash
# 智能告警脚本

# 配置告警阈值
CPU_THRESHOLD=80
MEM_THRESHOLD=85
DISK_THRESHOLD=90
LOAD_THRESHOLD=4

# 检查CPU使用率
check_cpu() {
  CPU_USAGE=$(top -bn1 | grep"Cpu(s)"| awk'{print $2}'|cut-d'%'-f1)
 if(( $(echo "$CPU_USAGE>$CPU_THRESHOLD" | bc -l) ));then
   echo"CPU告警: 使用率${CPU_USAGE}%,超过阈值${CPU_THRESHOLD}%"| 
    mail -s"服务器CPU告警"admin@company.com
 fi
}

# 检查内存使用率
check_memory() {
  MEM_USAGE=$(free | awk'NR==2{printf "%.1f", $3*100/$2}')
 if(( $(echo "$MEM_USAGE>$MEM_THRESHOLD" | bc -l) ));then
   echo"内存告警: 使用率${MEM_USAGE}%,超过阈值${MEM_THRESHOLD}%"| 
    mail -s"服务器内存告警"admin@company.com
 fi
}

# 主函数
main() {
  check_cpu
  check_memory
 # 可以添加更多检查函数
}

main

九、性能优化最佳实践

我的"十字真经"

基于多年实战经验,我总结出性能优化的"十字真经":

1.监控先行:没有监控数据,就没有优化方向

2.基线建立:了解系统正常状态下的性能指标

3.逐步优化:一次只调整一个参数,避免"组合拳"导致问题难定位

4.验证效果:每次优化后都要验证效果,记录数据

5.回滚准备:任何优化都要准备回滚方案

6.文档记录:详细记录每次优化的过程和结果

7.定期review:定期检查优化效果,持续改进

8.工具自动化:将常用的监控和优化脚本自动化

9.知识分享:团队内分享优化经验,避免重复踩坑

10.持续学习:技术在发展,性能优化技巧也要与时俱进

性能优化检查清单

每日检查项目

? 系统负载是否正常

? 内存使用率是否在合理范围

? 磁盘空间是否充足

? 关键进程是否正常运行

每周检查项目

? 审查系统性能趋势

? 检查日志是否有异常

? 验证备份和恢复功能

? 更新监控基线数据

每月检查项目

? 全面性能评估

? 容量规划调整

? 优化参数微调

? 灾备演练

结语:从"救火队员"到"性能专家"的进阶之路

作为一名在运维一线奋战多年的工程师,我深知性能优化的重要性和复杂性。这篇文章浓缩了我多年来在生产环境中积累的宝贵经验,每一个技巧都经过实战验证。

记住这几个关键点

1. 性能优化是一个持续的过程,不是一锤子买卖

2. 监控和基线比任何单一的优化技巧都重要

3. 理解业务场景,针对性地进行优化

4. 保持学习的心态,技术在不断发展

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

    关注

    68

    文章

    11118

    浏览量

    218335
  • Linux
    +关注

    关注

    88

    文章

    11536

    浏览量

    214924
  • 磁盘
    +关注

    关注

    1

    文章

    393

    浏览量

    25935

原文标题:Linux性能优化:系统监控与调优技巧全解析

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    史上最全性能总结

    在说什么是性能之前,我们先来说一下,计算机的体系结构。
    的头像 发表于 05-13 08:57 ?6847次阅读
    史上最全<b class='flag-5'>性能</b><b class='flag-5'>调</b><b class='flag-5'>优</b>总结

    HBase性能概述

    HBase性能
    发表于 07-03 11:35

    基于全HDD aarch64服务器的Ceph性能实践总结

    如ISA-L也都在arm平台上进行了优化。- 对于SPDK,也是从软件层面在arm平台上进行了优化。4.3 操作系统Linux内核来
    发表于 07-05 14:26

    infosphere CDC 性能及MC性能指标监控

    infosphere CDC 性能及MC性能指标监控
    发表于 09-07 09:26 ?4次下载
    infosphere CDC <b class='flag-5'>性能</b><b class='flag-5'>调</b><b class='flag-5'>优</b>及MC<b class='flag-5'>性能</b>指标<b class='flag-5'>监控</b>

    infosphere CDC性能的文档

    infosphere CDC性能的文档
    发表于 09-07 09:30 ?7次下载
    infosphere CDC<b class='flag-5'>性能</b><b class='flag-5'>调</b><b class='flag-5'>优</b>的文档

    Linux查看资源使用情况和性能常用的命令

    目录 前言 top命令 htop命令 ps命令 free命令 vmstat命令 iosat命令 netstat命令 df命令 du命令 前言 一般来说,Linux性能涉及CPU、内
    的头像 发表于 11-12 17:54 ?4584次阅读

    Linux用电功耗的笔记分享

    整理一些Linux用电功耗的笔记,分享给小伙伴,关于用电个人觉得
    的头像 发表于 06-23 15:19 ?4889次阅读

    linux网络栈监控:数据接收

    linux 网络栈的监控上没有捷径可言,如果你想做有效的,就必须搞清楚各个系统之间
    的头像 发表于 03-25 16:44 ?2107次阅读

    Linux性能常见工具和堆栈解析

    ? Linux系统性能涉及多个方面,包括内核参数调整、文件系统优化、网络设置等。 ? 1. 内核参数调整:通过调整内核参数来提高系统性能
    的头像 发表于 06-29 09:45 ?1269次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>性能</b><b class='flag-5'>调</b><b class='flag-5'>优</b>常见工具和堆栈解析

    jvm工具有哪些

    JVM是提高Java应用程序性能的重要手段,而JVM工具则是辅助开发人员进行
    的头像 发表于 12-05 11:44 ?1569次阅读

    鸿蒙开发实战:【性能组件】

    性能组件包含系统和应用框架,旨在为开发者提供一套性能
    的头像 发表于 03-13 15:12 ?938次阅读
    鸿蒙开发实战:【<b class='flag-5'>性能</b><b class='flag-5'>调</b><b class='flag-5'>优</b>组件】

    手把手教你如何Linux网络参数

    在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃。本文基于真实案例分析,从参数解读、问题诊断到优化实践,手把手教你如何
    的头像 发表于 05-29 09:21 ?291次阅读

    Linux系统性能方案

    关键要点预览:本文将深入解析Linux系统性能瓶颈的根本原因,提供可直接落地的方案,让你的系统性能提升30-50%!
    的头像 发表于 08-06 17:49 ?215次阅读

    Linux内核参数方案

    在高并发微服务环境中,网络性能往往成为K8s集群的瓶颈。本文将深入探讨如何通过精细化的Linux内核参数,让你的K8s节点网络性能提升3
    的头像 发表于 08-06 17:50 ?231次阅读

    Linux网络性能方案

    在当今高并发、大流量的互联网环境下,网络性能往往成为系统的瓶颈。作为一名资深运维工程师,我在生产环境中遇到过无数次因为TCP/IP参数配置不当导致的性能问题。今天分享一套完整的Linux网络
    的头像 发表于 08-06 18:01 ?283次阅读