一、系统性能监控概述
1.1 性能监控的重要性
在现代IT运维中,系统性能监控是确保服务稳定运行的关键环节。有效的性能监控可以:
- 预防性维护:在问题发生前识别潜在风险
- 故障快速定位:通过监控数据快速找到性能瓶颈
- 容量规划:基于历史数据进行合理的资源规划
- 成本优化:避免过度配置和资源浪费
- 用户体验:确保应用程序的响应时间和可用性
1.2 性能监控维度
Linux系统性能监控主要关注以下几个维度:
CPU性能
- CPU使用率、负载均衡
- 用户态和内核态时间分布
- 中断处理时间
- 上下文切换频率
内存性能
- 内存使用率和可用内存
- 缓存和缓冲区状态
- 内存交换活动
- 内存泄漏检测
磁盘I/O性能
- 磁盘读写速度和IOPS
- 磁盘利用率和队列长度
- 文件系统性能
- 磁盘错误率
网络性能
- 网络带宽使用情况
- 网络延迟和丢包率
- 连接数和并发数
- 网络错误统计
1.3 监控工具分类
实时监控工具
top、htop:进程和系统资源实时监控
vmstat:虚拟内存统计
iostat:磁盘I/O统计
netstat:网络连接状态
历史数据分析工具
sar:系统活动报告
atop:高级系统监控
nmon:性能监控和分析
专业监控工具
- Nagios、Zabbix:企业级监控
- Grafana:数据可视化
- Prometheus:时序数据库监控
对于希望构建完整监控与自动化流水线的运维工程师,可以参考云栈社区的运维/DevOps板块获取更多关于CI/CD、Jenkins、Ansible等工具的集成实践。
二、top命令详解
2.1 top命令基础
top命令是Linux系统中最常用的实时系统监控工具,能够显示系统中正在运行的进程和系统资源使用情况。
基本语法
top [选项]
常用选项
# 基本使用
top
# 指定刷新间隔(秒)
top -d 2
# 指定刷新次数
top -n 5
# 以批处理模式运行(适合脚本)
top -b
# 显示指定用户的进程
top -u username
# 显示指定PID的进程
top -p 1234,5678
2.2 top显示界面解析
系统信息区域
top - 14:25:30 up 10 days, 2:45, 3 users, load average: 0.15, 0.25, 0.20
Tasks: 245 total, 1 running, 244 sleeping, 0 stopped, 0 zombie
%Cpu(s): 2.3 us, 1.0 sy, 0.0 ni, 96.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 7936.2 total, 1234.5 free, 3456.7 used, 3245.0 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 4123.4 avail Mem
第一行解释:
- 当前时间:14:25:30
- 系统运行时间:10天2小时45分钟
- 当前登录用户数:3个
- 系统负载:1分钟、5分钟、15分钟平均负载
第二行解释:
- 进程总数:245个
- 运行中:1个
- 睡眠中:244个
- 停止:0个
- 僵尸进程:0个
第三行解释:
- us:用户态占用CPU时间百分比
- sy:内核态占用CPU时间百分比
- ni:nice值调整后的用户态CPU时间
- id:空闲CPU时间百分比
- wa:等待I/O的CPU时间百分比
- hi:硬件中断占用CPU时间
- si:软件中断占用CPU时间
- st:虚拟化环境中被其他虚拟机占用的CPU时间
第四、五行解释:
- 内存和交换空间的使用情况
- total:总内存
- free:空闲内存
- used:已使用内存
- buff/cache:缓冲区和缓存
- avail Mem:可用内存
进程信息区域
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1234 root 20 0 162384 4892 3456 S 2.3 0.1 0:12.34 systemd
5678 www 20 0 1234567 89012 45678 S 1.5 1.1 1:23.45 apache2
字段含义:
- PID:进程ID
- USER:进程所有者
- PR:进程优先级
- NI:nice值
- VIRT:虚拟内存使用量
- RES:物理内存使用量
- SHR:共享内存使用量
- S:进程状态(S=睡眠,R=运行,Z=僵尸)
- %CPU:CPU使用率
- %MEM:内存使用率
- TIME+:进程运行总时间
- COMMAND:命令名称
2.3 top交互式操作
基本交互命令
# 在top运行时可以使用的快捷键
h # 显示帮助信息
q # 退出top
Space # 立即刷新
k # 终止进程(需要输入PID)
r # 重新设置进程优先级
f # 添加或删除显示字段
o # 改变显示字段顺序
z # 切换颜色显示
排序和过滤
# 排序快捷键
P # 按CPU使用率排序
M # 按内存使用率排序
T # 按运行时间排序
N # 按PID排序
# 过滤快捷键
u # 显示指定用户的进程
n # 设置显示的进程数量
i # 忽略闲置和僵尸进程
2.4 top高级用法
批处理模式
# 输出到文件
top -b -n 1 > system_status.txt
# 只显示特定进程
top -b -n 1 -p 1234
# 监控脚本示例
#!/bin/bash
while true; do
echo "=== $(date) ===" >> monitor.log
top -b -n 1 | head -20 >> monitor.log
sleep 60
done
自定义显示
# 创建自定义配置文件
echo "RCfile for \"top with windows\"" > ~/.toprc
echo "Id:i, Mode_altscr=0, Mode_irixps=1" >> ~/.toprc
# 使用自定义配置
top -c ~/.toprc
三、htop命令详解
3.1 htop简介
htop是top的增强版本,提供了更友好的界面和更多的功能。
安装htop
# Ubuntu/Debian
sudo apt-get install htop
# CentOS/RHEL
sudo yum install htop
# 或者
sudo dnf install htop
# 编译安装
wget https://github.com/htop-dev/htop/archive/main.tar.gz
tar -xzf main.tar.gz
cd htop-main
./autogen.sh
./configure
make
sudo make install
3.2 htop特性
界面优势
- 彩色显示,更直观
- 支持鼠标操作
- 显示进程树形结构
- 实时的CPU和内存使用条形图
- 可以横向滚动查看完整命令行
功能优势
# 基本使用
htop
# 显示进程树
htop -t
# 显示特定用户进程
htop -u username
# 以批处理模式运行
htop -b
3.3 htop交互操作
基本操作
F1 # 帮助
F2 # 设置
F3 # 搜索进程
F4 # 过滤
F5 # 切换树形显示
F6 # 排序
F7 # 减少nice值(提高优先级)
F8 # 增加nice值(降低优先级)
F9 # 杀死进程
F10 # 退出
高级操作
Space # 标记进程
U # 取消所有标记
c # 标记进程及其子进程
K # 隐藏内核线程
H # 隐藏用户线程
p # 切换显示完整路径
四、vmstat命令详解
4.1 vmstat基础
vmstat(Virtual Memory Statistics)是用于监控虚拟内存、进程、CPU活动的工具。
基本语法
vmstat [选项] [间隔] [次数]
常用选项
# 基本使用,显示自系统启动以来的平均值
vmstat
# 每2秒显示一次,共显示5次
vmstat 2 5
# 显示活动和非活动内存
vmstat -a
# 显示磁盘统计
vmstat -d
# 显示磁盘分区统计
vmstat -p /dev/sda1
# 显示统计信息
vmstat -s
# 显示内存详细统计
vmstat -m
4.2 vmstat输出解析
标准输出格式
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 0 1234567 89012 345678 0 0 10 25 156 234 5 2 93 0 0
字段详细解释
procs(进程):
- r:等待运行的进程数
- b:处于不可中断睡眠状态的进程数
memory(内存,单位KB):
- swpd:已使用的虚拟内存
- free:空闲内存
- buff:用作缓冲的内存
- cache:用作缓存的内存
swap(交换空间):
- si:从磁盘交换到内存的数据量(KB/s)
- so:从内存交换到磁盘的数据量(KB/s)
io(I/O):
- bi:从块设备读取的数据量(块/s)
- bo:写入块设备的数据量(块/s)
system(系统):
cpu(CPU使用率%):
- us:用户态时间
- sy:内核态时间
- id:空闲时间
- wa:等待I/O时间
- st:虚拟化环境中被其他虚拟机占用的时间
4.3 vmstat实战应用
性能分析脚本
#!/bin/bash
# 系统性能监控脚本
echo "=== 系统性能监控报告 $(date) ==="
# 基本信息
echo "1. 系统基本信息:"
vmstat 1 1
# 内存详细信息
echo "2. 内存统计:"
vmstat -s | grep -E "(total|used|free|buffer|cache|swap)"
# 持续监控
echo "3. 持续监控(5分钟):"
vmstat 5 60 > vmstat_$(date +%Y%m%d_%H%M).log &
echo "监控数据已保存到 vmstat_$(date +%Y%m%d_%H%M).log"
性能告警脚本
#!/bin/bash
# 性能告警脚本
# 设置阈值
CPU_THRESHOLD=80
MEMORY_THRESHOLD=85
SWAP_THRESHOLD=10
# 获取当前数据
vmstat_data=$(vmstat 1 2 | tail -1)
cpu_usage=$(echo $vmstat_data | awk '{print 100-$15}')
memory_total=$(free | grep Mem | awk '{print $2}')
memory_used=$(free | grep Mem | awk '{print $3}')
memory_usage=$((memory_used * 100 / memory_total))
swap_usage=$(vmstat -s | grep "used swap" | awk '{print $1}')
# 检查CPU使用率
if [ $(echo "$cpu_usage > $CPU_THRESHOLD" | bc) -eq 1 ]; then
echo "警告: CPU使用率过高 - $cpu_usage%"
fi
# 检查内存使用率
if [ $memory_usage -gt $MEMORY_THRESHOLD ]; then
echo "警告: 内存使用率过高 - $memory_usage%"
fi
# 检查交换空间使用
if [ $swap_usage -gt $SWAP_THRESHOLD ]; then
echo "警告: 交换空间使用异常 - ${swap_usage}KB"
fi
五、iostat命令详解
5.1 iostat基础
iostat是监控磁盘I/O性能的重要工具,属于sysstat包。
安装sysstat
# Ubuntu/Debian
sudo apt-get install sysstat
# CentOS/RHEL
sudo yum install sysstat
# 或者
sudo dnf install sysstat
基本语法
iostat [选项] [间隔] [次数]
5.2 iostat常用选项
基本选项
# 基本使用
iostat
# 显示扩展统计信息
iostat -x
# 显示CPU统计信息
iostat -c
# 显示磁盘统计信息
iostat -d
# 显示网络文件系统统计
iostat -n
# 显示人类可读格式
iostat -h
# 每2秒显示一次,共5次
iostat -x 2 5
高级选项
# 显示特定设备
iostat -x sda
# 显示所有设备(包括未使用的)
iostat -x -z
# 显示详细的NFS统计
iostat -n -x
# 以MB为单位显示
iostat -m
# 以KB为单位显示
iostat -k
5.3 iostat输出解析
CPU统计信息
avg-cpu: %user %nice %system %iowait %steal %idle
2.50 0.00 1.25 0.25 0.00 96.00
- %user:用户态CPU使用率
- %nice:nice值调整后的用户态CPU使用率
- %system:内核态CPU使用率
- %iowait:等待I/O的CPU时间百分比
- %steal:虚拟化环境中被其他虚拟机占用的CPU时间
- %idle:空闲CPU时间百分比
磁盘统计信息
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sda 1.25 2.50 50.00 100.00 0.10 0.20 7.41 7.41 8.00 12.00 0.05 40.00 40.00 4.00 1.50
字段含义:
- r/s:每秒读请求数
- w/s:每秒写请求数
- rkB/s:每秒读取的KB数
- wkB/s:每秒写入的KB数
- rrqm/s:每秒合并的读请求数
- wrqm/s:每秒合并的写请求数
- %rrqm:读请求合并百分比
- %wrqm:写请求合并百分比
- r_await:读请求平均等待时间(毫秒)
- w_await:写请求平均等待时间(毫秒)
- aqu-sz:平均队列长度
- rareq-sz:平均读请求大小(KB)
- wareq-sz:平均写请求大小(KB)
- svctm:平均服务时间(毫秒)
- %util:设备利用率百分比
5.4 iostat性能分析
磁盘性能监控脚本
#!/bin/bash
# 磁盘性能监控脚本
LOG_FILE="/var/log/disk_performance.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$DATE] 磁盘性能监控开始" >> $LOG_FILE
# 检查磁盘利用率
iostat -x 1 1 | grep -E "(Device|sda|sdb|sdc)" >> $LOG_FILE
# 检查高利用率磁盘
high_util=$(iostat -x 1 1 | awk 'NR>3 && $NF>80 {print $1, $NF}')
if [ ! -z "$high_util" ]; then
echo "[$DATE] 警告: 发现高利用率磁盘:" >> $LOG_FILE
echo "$high_util" >> $LOG_FILE
fi
# 检查高延迟磁盘
high_latency=$(iostat -x 1 1 | awk 'NR>3 && $10>20 {print $1, $10}')
if [ ! -z "$high_latency" ]; then
echo "[$DATE] 警告: 发现高延迟磁盘:" >> $LOG_FILE
echo "$high_latency" >> $LOG_FILE
fi
echo "[$DATE] 磁盘性能监控结束" >> $LOG_FILE
I/O性能分析指标
关键指标解释:
- IOPS(每秒I/O操作数)
- 随机读写:关注r/s和w/s
- 顺序读写:关注吞吐量rkB/s和wkB/s
- 响应时间
- r_await和w_await:平均等待时间
- svctm:平均服务时间
- 理想情况:await应该接近svctm
- 磁盘利用率
- %util:设备忙时间百分比
- 接近100%表示设备接近饱和
- 队列长度
- aqu-sz:平均队列长度
- 过高表示I/O请求堆积
六、其他重要监控工具
6.1 sar命令详解
sar(System Activity Reporter)是sysstat包中的强大工具,用于收集和报告系统活动。
基本用法
# 显示CPU使用率
sar -u 2 5
# 显示内存使用率
sar -r 2 5
# 显示磁盘I/O
sar -d 2 5
# 显示网络统计
sar -n DEV 2 5
# 显示负载均衡
sar -q 2 5
# 显示交换空间
sar -S 2 5
历史数据查看
# 查看今天的数据
sar -u
# 查看指定日期的数据
sar -u -f /var/log/sysstat/sa15
# 查看指定时间范围的数据
sar -u -s 09:00:00 -e 18:00:00
sar数据收集配置
# 编辑crontab配置
sudo vi /etc/crontab
# 添加数据收集任务
*/10 * * * * root /usr/lib/sysstat/sa1
2,12,22,32,42,52 * * * * root /usr/lib/sysstat/sa1
59 23 * * * root /usr/lib/sysstat/sa2 -A
# 检查sysstat服务状态
sudo systemctl status sysstat
sudo systemctl enable sysstat
6.2 netstat命令详解
netstat用于显示网络连接、路由表、接口状态等信息。
基本用法
# 显示所有连接
netstat -a
# 显示监听端口
netstat -l
# 显示TCP连接
netstat -t
# 显示UDP连接
netstat -u
# 显示进程信息
netstat -p
# 显示数字地址而非域名
netstat -n
# 组合使用
netstat -tulnp
实用示例
# 查看特定端口
netstat -tulnp | grep :80
# 统计连接状态
netstat -an | awk '/^tcp/ {print $6}' | sort | uniq -c
# 查看网络接口统计
netstat -i
# 显示路由表
netstat -r
6.3 ps命令详解
ps用于显示当前系统中的进程信息。
基本用法
# 显示当前终端的进程
ps
# 显示所有进程
ps aux
# 显示进程树
ps auxf
# 显示指定用户的进程
ps -u username
# 显示指定进程
ps -p 1234
# 显示详细信息
ps -ef
进程分析脚本
#!/bin/bash
# 进程分析脚本
echo "=== 系统进程分析 $(date) ==="
# 显示占用CPU最高的10个进程
echo "1. CPU占用最高的进程:"
ps aux --sort=-%cpu | head -11
# 显示占用内存最高的10个进程
echo "2. 内存占用最高的进程:"
ps aux --sort=-%mem | head -11
# 显示僵尸进程
echo "3. 僵尸进程:"
ps aux | awk '$8 ~ /^Z/ {print $2, $11}'
# 显示进程总数
echo "4. 进程统计:"
ps aux --no-headers | wc -l | xargs echo "总进程数:"
ps aux --no-headers | awk '$8 ~ /^Z/' | wc -l | xargs echo "僵尸进程数:"
6.4 free命令详解
free命令用于显示系统内存使用情况。
基本用法
# 基本显示
free
# 以人类可读格式显示
free -h
# 以MB为单位显示
free -m
# 以GB为单位显示
free -g
# 持续监控
free -s 2
# 显示详细信息
free -w
内存使用分析
#!/bin/bash
# 内存使用分析脚本
echo "=== 内存使用分析 $(date) ==="
# 基本内存信息
echo "1. 内存使用情况:"
free -h
# 内存使用百分比
total_mem=$(free | grep Mem | awk '{print $2}')
used_mem=$(free | grep Mem | awk '{print $3}')
mem_usage=$((used_mem * 100 / total_mem))
echo "2. 内存使用率: ${mem_usage}%"
# 交换空间使用情况
swap_total=$(free | grep Swap | awk '{print $2}')
swap_used=$(free | grep Swap | awk '{print $3}')
if [ $swap_total -gt 0 ]; then
swap_usage=$((swap_used * 100 / swap_total))
echo "3. 交换空间使用率: ${swap_usage}%"
else
echo "3. 未配置交换空间"
fi
# 内存使用告警
if [ $mem_usage -gt 85 ]; then
echo "警告: 内存使用率过高!"
fi
if [ $swap_used -gt 0 ]; then
echo "警告: 系统正在使用交换空间!"
fi
七、高级监控工具
7.1 atop命令详解
atop是一个高级的系统监控工具,提供了比top更详细的信息。
安装atop
# Ubuntu/Debian
sudo apt-get install atop
# CentOS/RHEL
sudo yum install atop
# 或者
sudo dnf install atop
基本用法
# 基本显示
atop
# 间隔2秒显示
atop 2
# 显示磁盘信息
atop -d
# 显示内存信息
atop -m
# 显示网络信息
atop -n
# 显示进程信息
atop -p
atop日志分析
# 查看历史数据
atop -r /var/log/atop/atop_20231215
# 分析特定时间段
atop -r /var/log/atop/atop_20231215 -b 09:00 -e 18:00
# 导出数据
atop -P CPU,MEM,DSK -r /var/log/atop/atop_20231215 > analysis.txt
7.2 nmon命令详解
nmon(Nigel‘s Monitor)是一个强大的性能监控工具。
安装nmon
# Ubuntu/Debian
sudo apt-get install nmon
# CentOS/RHEL
sudo yum install nmon
# 或者
sudo dnf install nmon
基本用法
# 启动nmon
nmon
# 在nmon中使用的快捷键
c # CPU使用率
m # 内存使用率
d # 磁盘I/O
n # 网络统计
t # 进程信息
r # 资源使用率
q # 退出
nmon数据收集
# 收集数据到文件
nmon -f -s 30 -c 120
# 参数说明:
# -f: 输出到文件
# -s 30: 每30秒采样一次
# -c 120: 采样120次(1小时)
# 转换为Excel格式
nmon2rrd filename.nmon
7.3 dstat命令详解
dstat是一个多功能的系统资源统计工具。
安装dstat
# Ubuntu/Debian
sudo apt-get install dstat
# CentOS/RHEL
sudo yum install dstat
# 或者
sudo dnf install dstat
基本用法
# 基本显示
dstat
# 显示CPU、内存、磁盘、网络
dstat -cdmn
# 显示最耗资源的进程
dstat --top-cpu --top-mem
# 显示磁盘使用情况
dstat -d -D sda,sdb
# 显示网络接口
dstat -n -N eth0,eth1
# 自定义间隔
dstat 5 12
dstat插件
# 查看可用插件
dstat --list
# 使用插件
dstat --tcp --udp
dstat --disk-util --disk-tps
dstat --proc-count --sys-load
八、性能调优策略
8.1 CPU性能调优
CPU使用率优化
# 查看CPU信息
lscpu
cat /proc/cpuinfo
# 查看CPU使用率
top -p 1 -n 1 | grep "Cpu(s)"
vmstat 1 5
# 优化CPU亲和性
taskset -c 0,1 command
taskset -p 0x3 PID
# 调整进程优先级
nice -n 10 command
renice -n 5 -p PID
# 启用CPU性能模式
echo performance > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
负载均衡优化
# 查看系统负载
uptime
cat /proc/loadavg
# 分析负载过高的原因
# 1. CPU密集型任务过多
# 2. I/O等待时间过长
# 3. 进程数量过多
# 优化策略
# 1. 分散CPU密集型任务
# 2. 优化I/O性能
# 3. 控制并发进程数
8.2 内存性能调优
内存使用优化
# 查看内存详细信息
cat /proc/meminfo
free -h
vmstat -s
# 清理缓存
echo 1 > /proc/sys/vm/drop_caches # 清理页缓存
echo 2 > /proc/sys/vm/drop_caches # 清理dentry和inode缓存
echo 3 > /proc/sys/vm/drop_caches # 清理所有缓存
# 调整交换空间
swapon -s
swapoff /swapfile
mkswap /swapfile
swapon /swapfile
# 优化内存分配
echo 10 > /proc/sys/vm/swappiness # 减少使用交换空间
echo 1 > /proc/sys/vm/overcommit_memory # 允许内存超分配
内存泄漏检测
# 监控内存使用趋势
ps aux --sort=-%mem | head -10
pmap -x PID
# 使用valgrind检测内存泄漏
valgrind --tool=memcheck --leak-check=full ./program
# 系统级内存监控
watch -n 1 'cat /proc/meminfo | grep -E "(MemTotal|MemFree|MemAvailable|Buffers|Cached)"'
8.3 磁盘I/O性能调优
磁盘性能优化
# 查看磁盘信息
lsblk
fdisk -l
df -h
# 优化磁盘调度算法
echo deadline > /sys/block/sda/queue/scheduler
echo noop > /sys/block/sda/queue/scheduler
# 调整I/O优先级
ionice -c 1 -n 4 command # 实时调度
ionice -c 2 -n 7 command # 最佳努力调度
ionice -c 3 command # 空闲调度
# 文件系统优化
# ext4调优
tune2fs -o journal_data_writeback /dev/sda1
mount -o noatime,nodiratime /dev/sda1 /mount/point
# XFS调优
mount -o noatime,nodiratime,nobarrier /dev/sda1 /mount/point
RAID性能优化
# 检查RAID状态
cat /proc/mdstat
mdadm --detail /dev/md0
# 优化RAID条带大小
mdadm --create /dev/md0 --level=0 --raid-devices=2 --chunk=64 /dev/sda1 /dev/sdb1
# 调整预读参数
blockdev --setra 8192 /dev/sda
8.4 网络性能调优
网络配置优化
# 查看网络接口状态
ip addr show
ethtool eth0
# 调整网络缓冲区
echo 'net.core.rmem_max = 16777216' >> /etc/sysctl.conf
echo 'net.core.wmem_max = 16777216' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_rmem = 4096 87380 16777216' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_wmem = 4096 65536 16777216' >> /etc/sysctl.conf
# 应用配置
sysctl -p
# 优化TCP参数
echo 'net.ipv4.tcp_window_scaling = 1' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_congestion_control = cubic' >> /etc/sysctl.conf
网络监控脚本
#!/bin/bash
# 网络性能监控脚本
INTERFACE="eth0"
LOG_FILE="/var/log/network_monitor.log"
echo "=== 网络性能监控 $(date) ===" >> $LOG_FILE
# 监控网络带宽
sar -n DEV 1 5 | grep $INTERFACE >> $LOG_FILE
# 监控网络连接
netstat -an | awk '/^tcp/ {print $6}' | sort | uniq -c >> $LOG_FILE
# 监控网络错误
cat /proc/net/dev | grep $INTERFACE >> $LOG_FILE
九、综合监控脚本
9.1 系统性能监控脚本
#!/bin/bash
# 综合系统性能监控脚本
LOG_DIR="/var/log/performance"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建日志目录
mkdir -p $LOG_DIR
# 系统基本信息
echo "=== 系统性能监控报告 $(date) ===" > $LOG_DIR/report_$DATE.txt
# CPU监控
echo "1. CPU使用情况:" >> $LOG_DIR/report_$DATE.txt
top -b -n 1 | head -5 >> $LOG_DIR/report_$DATE.txt
vmstat 1 3 >> $LOG_DIR/report_$DATE.txt
# 内存监控
echo "2. 内存使用情况:" >> $LOG_DIR/report_$DATE.txt
free -h >> $LOG_DIR/report_$DATE.txt
vmstat -s | grep -E "(total|used|free|buffer|cache)" >> $LOG_DIR/report_$DATE.txt
# 磁盘监控
echo "3. 磁盘使用情况:" >> $LOG_DIR/report_$DATE.txt
df -h >> $LOG_DIR/report_$DATE.txt
iostat -x 1 3 >> $LOG_DIR/report_$DATE.txt
# 网络监控
echo "4. 网络状态:" >> $LOG_DIR/report_$DATE.txt
netstat -i >> $LOG_DIR/report_$DATE.txt
ss -tuln >> $LOG_DIR/report_$DATE.txt
# 进程监控
echo "5. 进程状态:" >> $LOG_DIR/report_$DATE.txt
ps aux --sort=-%cpu | head -10 >> $LOG_DIR/report_$DATE.txt
ps aux --sort=-%mem | head -10 >> $LOG_DIR/report_$DATE.txt
echo "监控报告已生成: $LOG_DIR/report_$DATE.txt"
9.2 性能告警脚本
#!/bin/bash
# 性能告警脚本
# 设置告警阈值
CPU_THRESHOLD=80
MEMORY_THRESHOLD=85
DISK_THRESHOLD=85
LOAD_THRESHOLD=5.0
# 邮件配置
MAIL_TO="admin@example.com"
HOSTNAME=$(hostname)
# 检查CPU使用率
cpu_usage=$(top -b -n 1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1)
if (( $(echo "$cpu_usage > $CPU_THRESHOLD" | bc -l) )); then
echo "警告: $HOSTNAME CPU使用率过高: $cpu_usage%" | mail -s "CPU Alert" $MAIL_TO
fi
# 检查内存使用率
memory_usage=$(free | grep Mem | awk '{printf "%.1f", $3*100/$2}')
if (( $(echo "$memory_usage > $MEMORY_THRESHOLD" | bc -l) )); then
echo "警告: $HOSTNAME 内存使用率过高: $memory_usage%" | mail -s "Memory Alert" $MAIL_TO
fi
# 检查磁盘使用率
disk_usage=$(df -h | awk '$NF=="/" {print $5}' | sed 's/%//')
if [ $disk_usage -gt $DISK_THRESHOLD ]; then
echo "警告: $HOSTNAME 磁盘使用率过高: $disk_usage%" | mail -s "Disk Alert" $MAIL_TO
fi
# 检查系统负载
load_avg=$(uptime | awk '{print $10}' | sed 's/,//')
if (( $(echo "$load_avg > $LOAD_THRESHOLD" | bc -l) )); then
echo "警告: $HOSTNAME 系统负载过高: $load_avg" | mail -s "Load Alert" $MAIL_TO
fi
十、总结
Linux系统性能监控与调优是运维工程师的核心技能之一。通过本文的详细介绍,您应该能够:
10.1 监控技能掌握
- 掌握核心工具:熟练使用top、htop、vmstat、iostat等基础监控工具
- 理解监控指标:深入理解CPU、内存、磁盘、网络等各项性能指标
- 分析性能瓶颈:能够通过监控数据快速识别系统性能问题
- 建立监控体系:构建完整的系统性能监控和告警机制
10.2 调优技能提升
- 针对性优化:根据监控结果进行有针对性的系统调优
- 预防性维护:通过持续监控预防性能问题的发生
- 容量规划:基于历史数据进行合理的资源规划
- 故障处理:快速定位和解决系统性能问题
10.3 最佳实践原则
- 持续监控:建立7×24小时的监控体系
- 数据驱动:基于实际监控数据做出决策
- 主动优化:定期进行系统性能调优
- 文档记录:详细记录监控和优化过程
- 知识分享:与团队成员分享监控和调优经验
10.4 进阶学习建议
- 深入学习:了解Linux内核原理和系统调用,可在云栈社区的网络/系统板块找到更多关于TCP/IP、并发等底层知识。
- 工具扩展:学习使用Nagios、Zabbix、Prometheus等企业级监控工具。
- 自动化运维:结合监控数据实现自动化运维。
- 性能调优:深入研究各种性能调优技术。
- 持续学习:关注最新的监控技术和工具发展。
通过系统性的学习和实践,您将能够构建高效、稳定、可靠的Linux系统监控和调优体系,为企业的IT基础设施提供强有力的技术保障。
记住,性能监控和调优是一个持续的过程,需要不断学习新技术、积累经验,并根据实际环境进行调整和优化。只有这样,才能在复杂的生产环境中游刃有余,确保系统的高可用性和高性能。