找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

567

积分

0

好友

49

主题
发表于 前天 03:13 | 查看: 13| 回复: 0

一、系统性能监控概述

1.1 性能监控的重要性

在现代IT运维中,系统性能监控是确保服务稳定运行的关键环节。有效的性能监控可以:

  • 预防性维护:在问题发生前识别潜在风险
  • 故障快速定位:通过监控数据快速找到性能瓶颈
  • 容量规划:基于历史数据进行合理的资源规划
  • 成本优化:避免过度配置和资源浪费
  • 用户体验:确保应用程序的响应时间和可用性

1.2 性能监控维度

Linux系统性能监控主要关注以下几个维度:

CPU性能
  • CPU使用率、负载均衡
  • 用户态和内核态时间分布
  • 中断处理时间
  • 上下文切换频率
内存性能
  • 内存使用率和可用内存
  • 缓存和缓冲区状态
  • 内存交换活动
  • 内存泄漏检测
磁盘I/O性能
  • 磁盘读写速度和IOPS
  • 磁盘利用率和队列长度
  • 文件系统性能
  • 磁盘错误率
网络性能
  • 网络带宽使用情况
  • 网络延迟和丢包率
  • 连接数和并发数
  • 网络错误统计

1.3 监控工具分类

实时监控工具
  • tophtop:进程和系统资源实时监控
  • 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简介

htoptop的增强版本,提供了更友好的界面和更多的功能。

安装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(系统)

  • in:每秒中断数
  • cs:每秒上下文切换数

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性能分析指标

关键指标解释

  1. IOPS(每秒I/O操作数)
    • 随机读写:关注r/s和w/s
    • 顺序读写:关注吞吐量rkB/s和wkB/s
  2. 响应时间
    • r_await和w_await:平均等待时间
    • svctm:平均服务时间
    • 理想情况:await应该接近svctm
  3. 磁盘利用率
    • %util:设备忙时间百分比
    • 接近100%表示设备接近饱和
  4. 队列长度
    • 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 最佳实践原则

  1. 持续监控:建立7×24小时的监控体系
  2. 数据驱动:基于实际监控数据做出决策
  3. 主动优化:定期进行系统性能调优
  4. 文档记录:详细记录监控和优化过程
  5. 知识分享:与团队成员分享监控和调优经验

10.4 进阶学习建议

  1. 深入学习:了解Linux内核原理和系统调用,可在云栈社区的网络/系统板块找到更多关于TCP/IP、并发等底层知识。
  2. 工具扩展:学习使用Nagios、Zabbix、Prometheus等企业级监控工具。
  3. 自动化运维:结合监控数据实现自动化运维。
  4. 性能调优:深入研究各种性能调优技术。
  5. 持续学习:关注最新的监控技术和工具发展。

通过系统性的学习和实践,您将能够构建高效、稳定、可靠的Linux系统监控和调优体系,为企业的IT基础设施提供强有力的技术保障。

记住,性能监控和调优是一个持续的过程,需要不断学习新技术、积累经验,并根据实际环境进行调整和优化。只有这样,才能在复杂的生产环境中游刃有余,确保系统的高可用性和高性能。




上一篇:Ceph分布式存储深度解析:核心架构、CRUSH算法与生产环境运维实战
下一篇:逻辑漏洞实战:利用多端接口差异实现越权访问(斩获3k)
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-11 04:41 , Processed in 0.105658 second(s), 39 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表