Linux基础教程 第11课:性能监控和优化

浏览量:29 次 发布时间:2026-01-21 18:36 作者:明扬工控商城 下载docx

最近更新:Linux基础教程 第15课:Linux内核和驱动管理


好的,我们继续第十一课。今天学习Linux性能监控和优化,这是系统管理员必备的核心技能。


第一部分:性能监控基础

1.1 系统整体性能指标

bash

# 查看系统负载(1分钟、5分钟、15分钟平均负载)

uptime


# 查看系统版本和内核信息

uname -a

lsb_release -a


# 查看CPU信息

lscpu

cat /proc/cpuinfo


# 查看内存信息

free -h

cat /proc/meminfo


# 查看磁盘信息

df -h

lsblk

1.2 top命令详解

bash

# 启动top

top


# top界面详解:

# 第一行:系统时间、运行时间、登录用户数、系统负载

# 第二行:任务总数(运行、睡眠、停止、僵尸)

# 第三行:CPU使用率(us用户,sy系统,ni优先级,id空闲,wa等待,hi硬件中断,si软件中断,st被偷走)

# 第四行:内存使用(总量、使用、空闲、缓存)

# 第五行:交换空间(总量、使用、空闲)


# top交互命令:

# 1. 按`1`:显示所有CPU核心的使用情况

# 2. 按`M`:按内存使用排序

# 3. 按`P`:按CPU使用排序

# 4. 按`T`:按运行时间排序

# 5. 按`c`:显示完整命令路径

# 6. 按`k`:结束进程

# 7. 按`z`:彩色显示

# 8. 按`W`:保存当前配置

# 9. 按`q`:退出


# 批处理模式(用于脚本)

top -b -n 1 > top_output.txt

1.3 htop命令(增强版top)

bash

# 安装htop

sudo apt install htop


# 使用htop

htop


# htop优势:

# 1. 彩色界面,更直观

# 2. 支持鼠标操作

# 3. 可以垂直和水平滚动

# 4. 更容易管理进程(F2设置,F3搜索,F9杀死进程)


# 按F10退出htop

第二部分:CPU性能监控

2.1 实时CPU监控

bash

# 使用mpstat查看CPU统计(需要安装sysstat)

sudo apt install sysstat

mpstat -P ALL 1  # 每秒刷新一次,显示所有CPU


# 查看CPU使用率最高的进程

ps aux --sort=-%cpu | head -10


# 查看特定进程的CPU使用

pidstat -p [PID] 1  # 每秒显示一次


# 按CPU使用率排序并显示前10个进程

ps -eo pid,comm,%cpu --sort=-%cpu | head -10


# 查看每个CPU核心的使用情况

sar -P ALL 1 3  # 每秒采样,采样3次

2.2 CPU性能分析工具

bash

# 使用perf进行性能分析

sudo apt install linux-tools-common linux-tools-$(uname -r)


# 统计CPU事件

sudo perf stat ls


# 记录性能数据

sudo perf record -a -g sleep 10


# 生成报告

sudo perf report


# 火焰图生成工具(需要额外安装)

git clone https://github.com/brendangregg/FlameGraph

2.3 CPU压力测试

bash

# 安装压力测试工具

sudo apt install stress stress-ng


# 对CPU施加压力(4个核心,持续60秒)

stress --cpu 4 --timeout 60


# 使用stress-ng(更强大)

stress-ng --cpu 4 --cpu-method matrixprod --timeout 60


# 查看压力下的CPU使用率

watch -n 1 'mpstat -P ALL'

第三部分:内存性能监控

3.1 内存使用情况监控

bash

# 查看内存使用情况

free -h

free -m  # 以MB显示


# 持续监控内存变化

watch -n 1 free -h


# 查看内存详细信息

cat /proc/meminfo


# 查看内存使用最多的进程

ps aux --sort=-%mem | head -10


# 查看每个进程的内存使用

top -o %MEM


# 使用smem查看内存使用(更详细)

sudo apt install smem

smem -t -k  # 以KB显示并统计

smem -p    # 以百分比显示

3.2 虚拟内存和交换空间

bash

# 查看交换空间使用

swapon --show

cat /proc/swaps


# 查看页面缓存

cat /proc/meminfo | grep -E "(Cached|Buffers|Dirty|Writeback)"


# 查看内存页面活动

vmstat 1 5  # 每秒采样,采样5次


# 查看内存统计信息

sar -r 1 3  # 每秒采样内存使用,采样3次


# 查看大页内存

cat /proc/meminfo | grep -i huge

3.3 内存泄漏检测

bash

# 使用valgrind检测内存泄漏(需要安装)

sudo apt install valgrind


# 检测C程序内存泄漏

valgrind --leak-check=full ./your_program


# 使用ps查看进程内存增长

watch -n 1 'ps aux | grep your_program'


# 监控进程的内存使用

pidstat -r -p [PID] 1

3.4 内存压力测试

bash

# 测试内存

stress --vm 2 --vm-bytes 1G --timeout 30s


# 更复杂的内存测试

stress-ng --vm 2 --vm-bytes 1G --vm-method all --timeout 60s


# 监控内存压力下的表现

watch -n 1 'free -h; echo; ps aux --sort=-%mem | head -5'

第四部分:磁盘I/O性能监控

4.1 磁盘使用情况

bash

# 查看磁盘空间使用

df -h

df -i  # 查看inode使用


# 查看目录大小

du -sh /home/*

du -ah /home | sort -rh | head -20


# 查看磁盘分区信息

lsblk

lsblk -f  # 显示文件系统


# 查看磁盘详细信息

sudo fdisk -l

sudo parted -l

4.2 磁盘I/O性能监控

bash

# 使用iostat查看磁盘I/O

iostat -x 1  # 每秒刷新,显示扩展信息


# 查看特定磁盘的I/O

iostat -dx /dev/sda 1


# 使用iotop查看磁盘I/O进程

sudo apt install iotop

sudo iotop


# 使用vmstat查看I/O统计

vmstat -d  # 显示磁盘统计


# 使用sar查看磁盘活动

sar -d 1 3  # 每秒采样,采样3次

4.3 磁盘性能测试

bash

# 使用dd测试磁盘写入速度

dd if=/dev/zero of=/tmp/testfile bs=1G count=1 oflag=direct conv=fdatasync


# 测试磁盘读取速度

dd if=/tmp/testfile of=/dev/null bs=1G


# 使用hdparm测试磁盘性能

sudo hdparm -tT /dev/sda


# 使用fio进行专业磁盘测试

sudo apt install fio


# 随机读写测试

fio --name=randwrite --ioengine=libaio --iodepth=1 --rw=randwrite --bs=4k --direct=1 --size=1G --numjobs=1 --runtime=60 --group_reporting

4.4 找出磁盘I/O瓶颈

bash

# 查看等待I/O的进程

sudo iotop -o


# 查看磁盘使用率

iostat -x 1 | grep -A 1 "%util"


# 找出哪个进程在大量写盘

sudo lsof | grep deleted  # 查看已删除但仍被进程占用的文件


# 监控文件系统活动

sudo apt install fatrace

sudo fatrace | grep -E "(write|open)" | head -20

第五部分:网络性能监控

5.1 网络接口监控

bash

# 查看网络接口统计

ip -s link

ifconfig -a


# 查看网络带宽使用

sudo apt install iftop

sudo iftop


# 实时查看网络流量

nload

sudo apt install nload


# 查看网络连接

ss -tulnp

netstat -tulnp


# 查看网络统计

netstat -s

5.2 网络性能测试

bash

# 测试网络延迟

ping -c 10 google.com


# 测试网络路径

traceroute google.com

mtr google.com


# 测试带宽

sudo apt install iperf3

# 服务器端:iperf3 -s

# 客户端:iperf3 -c 服务器IP


# 测试下载速度

wget -O /dev/null http://speedtest.tele2.net/100MB.zip


# 使用speedtest-cli

sudo apt install speedtest-cli

speedtest-cli

5.3 找出网络瓶颈

bash

# 查看网络连接状态

netstat -an | awk '/tcp/ {print $6}' | sort | uniq -c


# 查看网络错误统计

netstat -i


# 监控网络错误

watch -n 1 'netstat -i | grep -E "(Iface|eth0|ens)"'


# 查看网络队列长度

tc -s qdisc show dev eth0


# 查看网络丢包

sar -n EDEV 1 3

第六部分:进程和系统调用监控

6.1 进程详细监控

bash

# 查看进程状态

ps auxf


# 查看进程树

pstree -p

pstree -ap


# 查看进程打开的文件

sudo lsof -p [PID]


# 查看进程的系统调用

strace -p [PID]


# 查看进程的内存映射

pmap -x [PID]


# 查看进程的CPU和内存使用

pidstat 1  # 每秒刷新

6.2 系统调用监控

bash

# 跟踪进程的系统调用

strace -c ls  # 统计系统调用

strace -tt -T ls  # 显示时间戳和耗时


# 使用perf跟踪系统调用

sudo perf trace ls


# 使用sysdig(需要安装)

sudo apt install sysdig

sudo sysdig -c top_syscalls

6.3 性能分析工具

bash

# 使用sysstat收集系统性能数据

sar -A  # 显示所有统计


# 查看历史性能数据

sar -f /var/log/sysstat/saXX  # XX是日期


# 使用dstat(需要安装)

sudo apt install dstat

dstat -tcdngy  # 显示CPU、磁盘、网络、内存、系统


# 使用atop(高级性能监控)

sudo apt install atop

atop

第七部分:系统优化技巧

7.1 CPU优化

bash

# 调整进程优先级

nice -n -10 important_process  # 提高优先级

renice 10 -p [PID]  # 调整运行中进程的优先级


# 设置CPU亲和性(将进程绑定到特定CPU)

taskset -c 0,1 ./program  # 只在CPU0和CPU1上运行


# 查看中断分布

cat /proc/interrupts | grep -E "(CPU|eth)"


# 调整内核调度参数

sudo sysctl -w kernel.sched_min_granularity_ns=10000000

7.2 内存优化

bash

# 清理页面缓存(谨慎使用)

echo 1 | sudo tee /proc/sys/vm/drop_caches  # 清理页面缓存

echo 2 | sudo tee /proc/sys/vm/drop_caches  # 清理inode和目录缓存

echo 3 | sudo tee /proc/sys/vm/drop_caches  # 清理所有缓存


# 调整交换倾向

sudo sysctl -w vm.swappiness=10  # 降低交换倾向


# 调整虚拟内存参数

sudo vim /etc/sysctl.conf

# 添加:

vm.dirty_ratio = 40

vm.dirty_background_ratio = 10

vm.vfs_cache_pressure = 1000

7.3 磁盘I/O优化

bash

# 调整I/O调度器

# 查看当前调度器

cat /sys/block/sda/queue/scheduler


# 修改调度器

echo deadline | sudo tee /sys/block/sda/queue/scheduler


# 调整预读大小

sudo blockdev --setra 4096 /dev/sda


# 使用noatime挂载选项(减少写操作)

# 在/etc/fstab中添加noatime选项

7.4 网络优化

bash

# 调整TCP参数

sudo vim /etc/sysctl.conf


# 添加以下内容:

# 增大TCP缓冲区

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

net.ipv4.tcp_rmem = 4096 87380 16777216

net.ipv4.tcp_wmem = 4096 65536 16777216


# 快速回收TIME_WAIT连接

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1


# 增大连接队列

net.core.somaxconn = 65535

net.ipv4.tcp_max_syn_backlog = 65535


# 应用配置

sudo sysctl -p

第八部分:性能监控脚本

8.1 创建系统监控脚本

bash

vim system_monitor.sh

输入内容:


bash

#!/bin/bash


echo "====== 系统性能监控报告 ======"

echo "生成时间: $(date)"

echo ""


# CPU信息

echo "1. CPU信息:"

echo "   负载: $(uptime | awk -F'load average:' '{print $2}')"

echo "   核心数: $(nproc)"

echo "   使用率最高的5个进程:"

ps aux --sort=-%cpu | head -6 | awk '{printf "     %-10s %-10s %-10s\n", $1, $3, $11}'

echo ""


# 内存信息

echo "2. 内存信息:"

free -h | awk '/Mem/ {printf "   总量: %s, 使用: %s, 空闲: %s, 缓存: %s\n", $2, $3, $4, $6}'

echo "   内存使用最高的5个进程:"

ps aux --sort=-%mem | head -6 | awk '{printf "     %-10s %-10s %-10s\n", $1, $4, $11}'

echo ""


# 磁盘信息

echo "3. 磁盘信息:"

echo "   使用率超过80%的分区:"

df -h | awk 'NR>1 && $5+0 > 80 {print "   " $1 ": " $5 " used"}'

echo ""


# 网络信息

echo "4. 网络连接:"

echo "   TCP连接数: $(ss -t | wc -l)"

echo "   ESTABLISHED连接: $(ss -t state established | wc -l)"

echo "   LISTENING端口数: $(ss -tuln | grep LISTEN | wc -l)"

echo ""


# 系统日志

echo "5. 系统日志检查:"

echo "   最近5条错误日志:"

journalctl -p err -n 5 --no-pager 2>/dev/null || tail -5 /var/log/syslog | grep -i error

echo ""

echo "监控完成"

bash

chmod +x system_monitor.sh

./system_monitor.sh

8.2 实时监控面板

bash

vim realtime_monitor.sh

输入内容:


bash

#!/bin/bash


# 清屏

clear


while true; do

   echo -e "\033[H"  # 移动光标到左上角

   

   echo "====== 实时系统监控 ======"

   echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"

   echo ""

   

   # CPU负载

   echo "CPU负载: $(uptime | awk -F'load average:' '{print $2}')"

   

   # 内存使用

   echo -n "内存使用: "

   free -h | awk '/Mem/ {printf "%s/%s (%.1f%%)\n", $3, $2, $3/$2*100}'

   

   # 磁盘使用

   echo -n "根分区使用: "

   df -h / | awk 'NR==2 {print $3 "/" $2 " (" $5 ")"}'

   

   echo ""

   echo "--- 进程监控 ---"

   # CPU使用前5

   echo "CPU使用前5:"

   ps aux --sort=-%cpu | head -6 | tail -5 | awk '{printf "%-10s %-5s %-30s\n", $1, $3"%", $11}'

   

   echo ""

   # 内存使用前5

   echo "内存使用前5:"

   ps aux --sort=-%mem | head -6 | tail -5 | awk '{printf "%-10s %-5s %-30s\n", $1, $4"%", $11}'

   

   echo ""

   echo "按 Ctrl+C 退出"

   

   # 刷新间隔

   sleep 2

done

bash

chmod +x realtime_monitor.sh

./realtime_monitor.sh

第九部分:性能基准测试

9.1 综合性能测试

bash

# 使用sysbench进行全面测试

sudo apt install sysbench


# CPU测试

sysbench cpu --threads=4 run


# 内存测试

sysbench memory --threads=4 run


# 磁盘I/O测试

sysbench fileio --file-total-size=2G prepare

sysbench fileio --file-total-size=2G --file-test-mode=rndrw --time=60 --max-requests=0 run

sysbench fileio --file-total-size=2G cleanup


# 数据库性能测试(需要先安装MySQL)

sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=mysql prepare

sysbench /usr/share/sysbench/oltp_read_write.lua --db-driver=mysql --threads=4 run

9.2 压力测试和稳定性测试

bash

# 使用stress进行系统压力测试

stress --cpu 4 --io 2 --vm 2 --vm-bytes 1G --timeout 300s


# 监控压力测试期间的系统表现

watch -n 1 'uptime; free -h; df -h /; echo; mpstat -P ALL 1 1 | tail -5'


# 使用stress-ng进行更全面的测试

stress-ng --cpu 4 --cpu-method all --io 4 --vm 2 --vm-bytes 1G --timeout 300s --metrics-brief

第十部分:性能问题排查流程

10.1 性能问题诊断步骤

bash

# 第一步:检查系统整体状态

uptime

dmesg | tail

vmstat 1 5

mpstat -P ALL 1 5

pidstat 1 5


# 第二步:检查CPU

top -b -n 1 | head -20

ps aux --sort=-%cpu | head -10


# 第三步:检查内存

free -h

ps aux --sort=-%mem | head -10


# 第四步:检查磁盘

df -h

iostat -xz 1 5


# 第五步:检查网络

netstat -s

ss -s


# 第六步:检查特定进程

strace -p [PID]

perf top -p [PID]

10.2 常见性能问题解决方案

bash

# 问题1:CPU使用率过高

# 解决方案:

# 1. 找出占用CPU的进程

ps aux --sort=-%cpu | head -10

# 2. 分析进程的CPU使用模式

perf top -p [PID]

# 3. 优化程序代码或调整配置


# 问题2:内存不足

# 解决方案:

# 1. 找出内存泄漏

valgrind --leak-check=full ./program

# 2. 增加交换空间

sudo fallocate -l 2G /swapfile

sudo mkswap /swapfile

sudo swapon /swapfile

# 3. 调整内存参数

sudo sysctl -w vm.swappiness=10


# 问题3:磁盘I/O瓶颈

# 解决方案:

# 1. 找出高I/O进程

sudo iotop -o

# 2. 优化磁盘调度器

echo deadline | sudo tee /sys/block/sda/queue/scheduler

# 3. 考虑使用SSD或RAID

第十一部分:练习任务

练习1:创建完整的性能监控系统

编写一个脚本,收集以下信息:


CPU使用率和负载


内存使用情况


磁盘使用和I/O


网络连接状态


将数据保存到日志文件


设置定时任务,每小时运行一次


添加报警功能(当CPU>90%或内存>90%时发送通知)


练习2:性能基准测试

使用sysbench对系统进行基准测试


记录测试结果


对比优化前后的性能差异


练习3:性能问题排查实战

使用stress工具制造CPU、内存、I/O压力


练习使用各种监控工具定位问题


尝试优化系统参数缓解问题


练习4:创建实时监控面板

使用Python或Shell脚本创建实时监控界面


显示关键性能指标


添加颜色编码(绿色正常,黄色警告,红色危险)


今日总结

今天我们学习了:


性能监控基础:系统整体状态查看


CPU监控:使用top、htop、mpstat等工具


内存监控:内存使用、泄漏检测、优化


磁盘I/O监控:I/O性能测试和优化


网络性能监控:带宽测试和优化


进程监控:进程详细分析和系统调用跟踪


系统优化:CPU、内存、磁盘、网络优化技巧


性能基准测试:使用sysbench进行综合测试


问题排查:性能问题诊断流程和解决方案


性能优化黄金法则:


先监控,再优化


先定位瓶颈,再针对性优化


一次只改变一个变量


测试优化效果,记录基准数据


考虑成本和收益的平衡


性能优化是一个持续的过程,需要定期监控和调整。建议在生产环境变更前先在测试环境验证。


有问题吗?完成练习后,我们可以继续第十二课:Shell脚本进阶和自动化。


明扬工控商城

推荐阅读:

Linux基础教程 第20课:Linux安全攻防和渗透测试基础

Linux基础教程 第19课:性能调优和容量规划

Linux基础教程 第18课:Linux云计算基础

Linux基础教程 第17课:自动化运维工具

Linux基础教程 第16课:集群和高可用性

Linux基础教程 第15课:Linux内核和驱动管理

热门标签:
Linux基础教程 第11课:性能监控和优化.docx

将本文的Word文档下载到电脑

推荐度:

下载

全部评论

请登录
产业新闻-明扬资讯网
科技资讯-明扬资讯网