【Linux运维极简教程】12-性能监控与优化

发布时间:2026/7/17 23:51:31

【Linux运维极简教程】12-性能监控与优化 12 - 性能监控与优化一、性能监控概述系统性能由四大核心资源决定CPU → 内存 → 磁盘 IO → 网络性能问题通常是某个资源成为瓶颈导致整个系统变慢。运维的目标是及时发现瓶颈并优化。性能排查思路1. 确认问题是否真的有性能问题 2. 定位瓶颈CPU内存IO网络 3. 深入分析哪个进程/线程导致 4. 解决优化调参、扩容、优化代码二、CPU 监控与优化2.1 CPU 性能指标指标说明健康值load average系统负载1/5/15 分钟平均 CPU 核心数us用户态 CPU 70%sy内核态 CPU 30%waIO 等待 20%id空闲 30%st被虚拟化偷走 5%2.2 监控工具# uptime - 快速查看负载uptime# load average: 0.50, 0.35, 0.20# 三个数分别表示 1/5/15 分钟的平均负载# top - 实时监控top# 按 1 查看每个 CPU 核心# 按 P 按 CPU 排序# vmstat - 系统整体状态vmstat15# 每秒采样共 5 次# 关键列r(运行队列), us(用户CPU), sy(系统CPU), wa(IO等待), id(空闲)# mpstat - 多核 CPU 监控需安装 sysstatmpstat-PALL1# 每秒显示所有核心# pidstat - 进程级 CPU 监控pidstat1# 每秒显示各进程 CPU 使用pidstat-p12341# 监控指定进程2.3 CPU 分析# 查看 CPU 信息lscpucat/proc/cpuinfo|grepmodel namenproc# 核心数# 查看中断分布cat/proc/interrupts# 查看进程的线程 CPU 使用top-H-pPIDps-T-pPID# 使用 perf 分析 CPU 热点高级perftop# 实时显示 CPU 热点函数perf record-g-pPID# 采样perf report# 分析报告# 使用 strace 跟踪系统调用strace-c-pPID# 统计系统调用strace-pPID# 实时跟踪2.4 CPU 优化方向# 1. 调整进程优先级nice-n-5./critical_app# 提高renice-n10-pPID# 降低# 2. 绑定 CPU 核心CPU 亲和性taskset-c0,1./app# 绑定到 0 和 1 号核心taskset-pc0,1PID# 修改运行中进程# 3. 调整 CPU 调度器# 查看当前调度策略cat/sys/block/sda/queue/scheduler# 4. 内核参数优化echoperformance/sys/devices/system/cpu/cpu*/cpufreq/scaling_governor三、内存监控与优化3.1 内存指标# free - 内存使用概览free-h# total used free shared buff/cache available# Mem: 16G 4G 2G 0.5G 10G 11G# 重要概念# - buff/cache系统用于缓冲和缓存的内存可回收# - available实际可用内存包含可回收的缓存# - 判断内存是否紧张看 available而非 free3.2 监控工具# vmstat - 内存与交换分区vmstat15# 关键列swpd(使用swap), free(空闲), buff(缓冲), cache(缓存), si/so(swap换入换出)# si/so 持续大于 0 说明内存不足在使用 swap# sar - 历史内存数据需安装 sysstatsar-r# 内存使用sar-r15# 实时每秒sar-W# swap 使用sar-B# 分页统计# pidstat - 进程内存pidstat-r1# 每秒各进程内存使用pidstat-r-p12341# smem - 更准确的进程内存需安装smem-r-k# 按 RSS 排序smem-t-k|tail-5# 总计3.3 内存分析# 查看 /proc/meminfo最详细cat/proc/meminfo|head-20# 查看进程内存映射pmap-xPID|tail-1# 进程总内存pmap-xPID|sort-k3-rn|head# 按内存排序# 查看 slab 缓存内核内存slabtopcat/proc/slabinfo|head# 查看 swap 使用swapon-scat/proc/swaps# 查找占用内存最多的进程ps-eopid,user,%mem,rss,comm--sort-%mem|head-103.4 内存优化# 1. 调整 swappiness0-100越低越少用 swapsysctlvm.swappiness10echovm.swappiness10/etc/sysctl.conf# 2. 清理缓存谨慎使用sync# 先将脏数据写入磁盘echo1/proc/sys/vm/drop_caches# 清理 pagecacheecho2/proc/sys/vm/drop_caches# 清理 dentries 和 inodesecho3/proc/sys/vm/drop_caches# 清理所有# 3. 限制进程内存systemd# 在 service 文件中# MemoryLimit2G# MemoryMax2G# 4. 调整 overcommit 策略# vm.overcommit_memory2 严格模式不允许超额分配四、磁盘 IO 监控与优化4.1 IO 监控工具# iostat - 磁盘 IO 统计需安装 sysstatiostat-d15# 每秒显示磁盘 IOiostat-x15# 扩展统计# 关键列# %util 磁盘利用率80% 说明瓶颈# await IO 平均等待时间ms10 需关注# r/s w/s 每秒读写次数# rkB/s wkB/s 每秒读写数据量# iotop - 查看哪个进程在做 IO需安装iotop iotop-o# 只显示有 IO 的进程iotop-P# 按进程显示# pidstat - 进程级 IOpidstat-d1pidstat-d-p12341# vmstat - IO 概览vmstat15# 关键列bi(块读), bo(块写), wa(IO等待CPU百分比)4.2 IO 分析# 查看磁盘性能基准# 测试读性能hdparm-Tt/dev/sda# 使用 dd 测试注意会写入数据# 测试写速度ddif/dev/zeroof/tmp/testfilebs1Mcount1024oflagdirect# 测试读速度ddif/tmp/testfileof/dev/nullbs1Miflagdirect# 查看磁盘队列深度cat/sys/block/sda/queue/nr_requests# 查看文件系统 IO 统计cat/proc/diskstats# 使用 fio 进行专业 IO 基准测试需安装fio--nametest--filename/tmp/testfile--size1G\--rwrandread--bs4k--ioenginelibaio--iodepth32\--runtime60--time_based4.3 IO 优化# 1. 选择合适的 IO 调度器# 查看cat/sys/block/sda/queue/scheduler# 修改SSD 推荐 none/mq-deadline机械盘推荐 deadline/cfqechomq-deadline/sys/block/sda/queue/scheduler# 2. 文件系统挂载优化# /etc/fstab# noatime - 不更新访问时间# nodiratime - 不更新目录访问时间UUIDxxx /data ext4 defaults,noatime,nodiratime00# 3. 调整预读大小blockdev--getra/dev/sda# 查看预读blockdev--setra4096/dev/sda# 设置预读为 2MB# 4. ext4 优化参数# 格式化时mkfs.ext4-Oextent,dir_index-b4096/dev/sdb1# 5. 使用 SSD 替代机械盘# 6. 使用 RAID 提升性能# 7. 读写分离、冷热数据分离五、网络性能监控5.1 网络监控工具# 网卡流量ifconfigeth0# 传统ip-slinkshow eth0# 现代sar-nDEV15# 每秒网卡流量统计nethogs# 按进程显示网络流量需安装iftop# 按连接显示流量需安装nload# 简单的流量监控需安装# TCP 连接统计ss-s# 连接概览ss-tnstate ESTABLISHED|wc-lss-tnstate TIME-WAIT|wc-lnetstat-an|awk/tcp/ {print $NF}|sort|uniq-c# 网络延迟ping-c10targetmtrtarget# 综合路由与延迟# 带宽测试iperf3-s# 服务端iperf3-cserver_ip# 客户端测试iperf3-cserver_ip-u-b100M# UDP 测试iperf3-cserver_ip-R# 反向测试下载5.2 网络内核参数优化# /etc/sysctl.conf 网络优化# TCP 连接优化net.ipv4.tcp_max_syn_backlog65535# SYN 队列net.core.somaxconn65535# 监听队列net.ipv4.tcp_max_tw_buckets32768# TIME_WAIT 最大数net.ipv4.tcp_tw_reuse1# 复用 TIME_WAITnet.ipv4.tcp_fin_timeout15# FIN-WAIT-2 超时net.ipv4.tcp_keepalive_time600# keepalive 间隔# TCP 缓冲区net.core.rmem_max16777216net.core.wmem_max16777216net.ipv4.tcp_rmem40968738016777216net.ipv4.tcp_wmem40966553616777216# TCP 快速回收net.ipv4.tcp_timestamps1net.ipv4.tcp_window_scaling1# 网卡队列net.core.netdev_max_backlog65535# 连接跟踪表防火墙用net.netfilter.nf_conntrack_max655350# 应用sysctl-p六、综合监控工具6.1 sar - 系统活动报告# 安装yuminstall-ysysstat# CentOSaptinstall-ysysstat# Ubuntu# 开启数据收集CentOS# 编辑 /etc/sysconfig/sysstatENABLEDtruesystemctlenable--nowsysstat# 实时监控sar-u15# CPU 使用率sar-r15# 内存使用sar-b15# IO 传输sar-nDEV15# 网络流量sar-q15# 队列长度和负载sar-W15# swap 使用# 查看历史数据sar-u-f/var/log/sa/sa15# 查看 15 号的 CPU 数据sar-r-s10:00:00-e12:00:00# 指定时间段6.2 dstat - 综合监控需安装yuminstall-ydstat# CentOSaptinstall-ydstat# Ubuntu# 综合显示 CPU、磁盘、网络、内存dstat# 自定义显示dstat-cdnymdstat --top-cpu --top-mem --top-io6.3 监控系统部署建议工具类型特点Prometheus Grafana时序数据库可视化业界标准功能强大Zabbix一体化监控企业级开箱即用Node Exporter系统指标采集配合 PrometheusNetdata实时监控安装简单实时性好七、性能优化总结7.1 常见性能问题与解决症状可能原因排查工具优化方向系统负载高CPU 或 IO 瓶颈top, vmstat优化代码/升级硬件CPU us 高计算密集top, pidstat优化算法/加节点CPU sy 高系统调用过多strace, perf减少系统调用CPU wa 高IO 等待iostat, iotop优化 IO/换 SSD内存不足内存泄漏/缓存少free, pmap修复泄漏/加内存swap 频繁物理内存不足vmstat, sar加内存/调 swappiness磁盘 %util 高IO 瓶颈iostat换 SSD/RAID/分散 IO网络延迟高带宽/路由问题mtr, iperf3升级带宽/优化路由大量 TIME_WAIT连接回收慢ss调内核参数服务响应慢综合因素全链路分析逐层排查7.2 综合性能监控脚本#!/bin/bash# perf_monitor.sh - 性能监控告警脚本# 阈值设置CPU_THRESHOLD80MEM_THRESHOLD85DISK_THRESHOLD90LOAD_THRESHOLD$(nproc)ALERT_LOG/var/log/perf_alert.logalert(){echo[$(date%Y-%m-%d %H:%M:%S)] [ALERT]$1$ALERT_LOGecho$1}# CPU 使用率CPU_IDLE$(top-b-n1|grepCpu(s)|awk{print $8}|cut-d%-f1)CPU_USED$(echo100 -$CPU_IDLE|bc2/dev/null|cut-d.-f1)if[$CPU_USED-gt$CPU_THRESHOLD];thenalertCPU 使用率过高:${CPU_USED}%fi# 内存使用率MEM_USED$(free|awk/Mem/ {printf %.0f, $3/$2*100})if[$MEM_USED-gt$MEM_THRESHOLD];thenalert内存使用率过高:${MEM_USED}%fi# 磁盘使用率df-h|awkNR1 $5 ! - {gsub(/%/,,$5); if($5 $DISK_THRESHOLD) print $5% $6}|whilereadline;doalert磁盘空间不足:$linedone# 系统负载LOAD_1$(uptime|awk-Fload average:{print $2}|awk{print $1}|tr-d,)if[$(echo$LOAD_1$LOAD_THRESHOLD|bc2/dev/null)1];thenalert系统负载过高:$LOAD_1(阈值:$LOAD_THRESHOLD)fi# IO 等待IO_WAIT$(vmstat12|tail-1|awk{print $16})if[$IO_WAIT-gt20];thenalertIO 等待过高:${IO_WAIT}%fiecho[$(date%Y-%m-%d %H:%M:%S)] 监控检查完成7.3 优化原则先监控后优化用数据说话不凭感觉找准瓶颈一次只优化一个资源测试验证优化后要对比效果适度即可不要过度优化满足需求即可硬件 vs 软件先优化软件和配置再考虑升级硬件可扩展性优先通过水平扩展解决而非单机优化八、全系列总结至此《Linux 运维教程》全 12 篇已全部完成。回顾整个系列篇号主题核心技能01基础命令文件操作、文本处理、系统信息02文件系统与权限目录结构、权限管理、ACL、链接03用户与组管理用户增删改查、sudo、PAM04进程与服务管理进程控制、systemd、资源限制05软件包管理yum/dnf、apt、源码编译06网络配置IP 配置、网络诊断、内核参数07磁盘管理分区、文件系统、LVM08Shell 脚本变量、条件、循环、函数、实战脚本09定时任务cron、Ansible、自动化运维10日志与排查journalctl、日志分析、故障排查11防火墙与安全firewalld、iptables、SELinux、SSH 加固12性能监控CPU/内存/IO/网络监控与优化掌握这些内容你已经具备了 Linux 运维工程师的核心技能。运维是一个需要不断实践和积累经验的领域建议在实际工作中多动手、多总结。上一篇11 - 防火墙与安全加固返回目录README - 教程目录

相关新闻