学习目标
- 理解本节涉及的核心主题:Linux 性能监控与优化、系统性能优化、磁盘优化、磁盘优化示例。
- 掌握重点命令或工具:
sar、sysstat。 - 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
- 能够识别本节相关的常见风险、易错点或排查思路。
学习重点
- 主题范围:Linux 性能监控与优化、系统性能优化、磁盘优化、磁盘优化示例、日志与系统监控工具、使用
sar和sysstat进行性能分析 - 重点命令:
sar、sysstat - 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
- 复习方式:先理解场景,再动手练习,最后对照结果检查
Linux 性能监控与优化
系统性能优化
磁盘优化
磁盘优化通过调整文件系统、管理分区和优化 RAID 配置,提升磁盘性能和存储效率。
文件系统调整与优化
- 选择合适的文件系统
不同的文件系统在性能、可靠性和功能上有所不同。选择适合需求的文件系统,可以提升系统性能和数据安全性。
常见文件系统比较:| 文件系统 | 优点 | 缺点 |
| -------- | ------------------------------------ | ---------------------------------- |
| ext4 | 稳定、性能良好、广泛支持 | 缺乏某些高级功能 |
| xfs | 高性能、大文件支持、适用于高并发场景 | 不适合小文件 |
| btrfs | 支持快照、子卷、压缩等高级功能 | 相对不够稳定,适用于测试和特定场景 |
| ZFS | 数据完整性保障、快照、复制等功能丰富 | 资源消耗较高,许可限制 | - 优化挂载选项
合理的挂载选项可以提升文件系统的性能和效率。noatime:禁用访问时间记录,减少磁盘写入,提高性能。
示例:
在/etc/fstab文件中添加noatime选项:/dev/sda1 /home ext4 defaults,noatime 0 2nodiratime:仅禁用目录的访问时间记录,适用于需要部分访问时间记录的场景。
示例:/dev/sda1 /var ext4 defaults,nodiratime 0 2- 其他挂载选项
defaults:使用默认挂载选项。relatime:仅在文件数据或元数据被修改时更新访问时间,兼顾性能与功能。
磁盘分区优化与管理
-
使用
fdisk和gdisk管理分区
fdisk(适用于 MBR 分区表)和gdisk(适用于 GPT 分区表)是常用的磁盘分区工具。
示例:使用fdisk创建新分区sudo fdisk /dev/sdb常用命令:
n:创建新分区。d:删除分区。p:打印分区表。w:保存并退出。 示例:使用gdisk创建新 GPT 分区
sudo gdisk /dev/sdb常用命令:
n:创建新分区。d:删除分区。p:打印分区表。w:保存并退出。
-
使用
lsblk和blkid查看分区信息
lsblk显示块设备信息,包括分区和挂载点。lsblk示例输出:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ├─sda1 8:1 0 50G 0 part / sdb 8:16 0 100G 0 disk └─sdb1 8:17 0 100G 0 part /datablkid显示设备的 UUID 和文件系统类型。sudo blkid示例输出:
/dev/sda1: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4" /dev/sdb1: UUID="yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy" TYPE="xfs" -
优化 RAID 配置与性能
RAID(Redundant Array of Independent Disks)通过将多个磁盘组合在一起,提高数据冗余性和性能。合理配置 RAID 可以提升系统的存储能力和可靠性。-
选择合适的 RAID 级别
RAID 级别 描述 优点 缺点 RAID 0 条带化,提升性能,数据无冗余 高性能 无数据冗余,单盘故障导致数据丢失 RAID 1 镜像,数据冗余,提升读取性能 数据冗余,故障恢复简单 存储效率低,成本高 RAID 5 带奇偶校验的条带化,兼顾性能和冗余 高存储效率,数据冗余 写入性能较低,重建时间长 RAID 6 双重奇偶校验,提供更高的数据冗余 更高的数据冗余,容错能力更强 存储效率进一步降低 RAID 10 镜像与条带化的结合,兼顾性能和冗余 高性能,高冗余 高成本,存储效率为50% -
配置 RAID
示例:使用mdadm配置 RAID 1- 安装
mdadm工具sudo apt install mdadm # Debian/Ubuntu sudo yum install mdadm # CentOS/RHEL sudo dnf install mdadm # Fedora - 创建 RAID 1 阵列
sudo mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1 - 查看 RAID 阵列状态
cat /proc/mdstat - 保存 RAID 配置
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf sudo update-initramfs -u # Debian/Ubuntu - 格式化 RAID 阵列
sudo mkfs.ext4 /dev/md0 - 挂载 RAID 阵列
sudo mkdir -p /mnt/raid1 sudo mount /dev/md0 /mnt/raid1
注意事项:
- 确保 RAID 阵列的所有磁盘健康无误。
- 定期监控 RAID 阵列状态,及时处理磁盘故障。
- 安装
-
磁盘分区优化与管理最佳实践
-
合理划分分区
根据系统用途和应用需求,合理划分磁盘分区,有助于提升性能和管理效率。例如,将/home、/var、/tmp等目录划分到独立的分区,避免单一分区占满导致整个系统无法正常运行。 -
使用合适的挂载选项
根据文件系统类型和使用场景,选择合适的挂载选项,如noatime、nodiratime等,以优化文件访问性能。 -
定期检查磁盘健康
使用工具如smartctl检查磁盘的健康状况,预防磁盘故障。
示例:sudo apt install smartmontools # Debian/Ubuntu sudo yum install smartmontools # CentOS/RHEL sudo dnf install smartmontools # Fedora查看磁盘健康状态
sudo smartctl -a /dev/sda定期运行 SMART 测试
sudo smartctl -t long /dev/sda
磁盘优化示例
-
选择适合的文件系统
例如,选择ext4作为根文件系统,xfs作为/var目录的文件系统,以利用其高性能和稳定性。
示例:
在安装系统时,选择相应的文件系统类型:Device Boot Start End Sectors Size Type /dev/sda1 * 2048 1050623 1048576 512M EFI System /dev/sda2 1050624 20971519 19920896 9.5G Linux filesystem /dev/sda3 20971520 41943039 20971520 10.0G Linux filesystem/dev/sda2使用ext4作为根文件系统。/dev/sda3使用xfs作为/var目录。
-
优化挂载选项
在/etc/fstab文件中,为根文件系统和/var目录添加noatime挂载选项,减少磁盘写入,提高性能。
示例:/dev/sda2 / ext4 defaults,noatime 0 1 /dev/sda3 /var xfs defaults,noatime 0 2 -
配置 RAID 10 提升磁盘性能和冗余
通过配置 RAID 10,将数据镜像和条带化结合,提升磁盘性能和数据冗余性。
步骤:- 创建 RAID 10 阵列
sudo mdadm --create --verbose /dev/md0 --level=10 --raid-devices=4 /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 - 查看 RAID 阵列状态
cat /proc/mdstat - 保存 RAID 配置
sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf sudo update-initramfs -u # Debian/Ubuntu - 格式化 RAID 阵列
sudo mkfs.ext4 /dev/md0 - 挂载 RAID 阵列
sudo mkdir -p /mnt/raid10 sudo mount /dev/md0 /mnt/raid10
- 创建 RAID 10 阵列
磁盘优化最佳实践
- 合理规划分区和文件系统类型:根据系统用途选择合适的分区布局和文件系统类型,以优化性能和数据安全。
- 使用适当的挂载选项:如
noatime、nodiratime等,减少不必要的磁盘写入。 - 定期监控磁盘健康:使用
smartctl等工具,定期检查磁盘健康状况,预防潜在故障。 - 配置 RAID 提升性能和冗余:根据需求选择合适的 RAID 级别,提升磁盘性能和数据冗余性。
日志与系统监控工具
日志与系统监控工具是性能分析和优化的重要辅助工具。通过这些工具,可以收集、分析系统性能数据,自动化报警和生成性能报告,帮助系统管理员及时发现并解决性能问题。
使用 sar 和 sysstat 进行性能分析
sar(System Activity Reporter)是 sysstat 包中的一个工具,用于收集、报告系统活动信息。sysstat 包还包含其他性能监控工具,如 iostat、mpstat 等。
安装与配置 sysstat
-
安装命令
sudo apt install sysstat # Debian/Ubuntu sudo yum install sysstat # CentOS/RHEL sudo dnf install sysstat # Fedora -
启用数据收集
编辑/etc/default/sysstat(Debian/Ubuntu)或/etc/sysconfig/sysstat(CentOS/RHEL)文件,设置ENABLED="true"。
Debian/Ubuntu 示例:sudo nano /etc/default/sysstatENABLED="true"CentOS/RHEL 示例:
sudo nano /etc/sysconfig/sysstatENABLED="true"重新启动
sysstat服务:sudo systemctl enable sysstat sudo systemctl start sysstat
使用 sar 收集与分析系统性能数据
-
基本用法
sar可以显示系统的各种性能指标,如 CPU、内存、磁盘、网络等。
查看 CPU 使用情况sar -u 1 5说明:
-u:显示 CPU 使用率。1:每隔1秒采样一次。5:采样5次。 示例输出:
04:00:01 PM CPU %user %nice %system %iowait %steal %idle 04:00:02 PM all 5.00 0.00 3.00 0.50 0.00 91.50 04:00:03 PM all 4.50 0.00 2.50 0.30 0.00 92.70 04:00:04 PM all 6.00 0.00 4.00 0.60 0.00 89.40 04:00:05 PM all 3.50 0.00 1.50 0.20 0.00 94.80 04:00:06 PM all 5.50 0.00 3.50 0.40 0.00 90.60 -
解释
sar输出
字段说明:%user:用户空间占用的 CPU 百分比。%system:内核空间占用的 CPU 百分比。%iowait:等待 I/O 操作的 CPU 百分比。%idle:空闲 CPU 百分比。 分析示例:- 如果
%iowait长时间较高,可能表示磁盘 I/O 性能瓶颈。 - 如果
%user和%system都较高,可能表示 CPU 负载过重,需要优化应用程序或增加 CPU 资源。
-
查看内存使用情况
sar -r 1 5说明:
-r:显示内存使用情况。 示例输出:
04:00:01 PM kbmemfree kbmemused %memused kbbuffers kbcached 04:00:02 PM 2100000 4200000 71.9 524288 8388608 04:00:03 PM 2080000 4220000 72.3 524288 8388608 04:00:04 PM 2050000 4250000 72.8 524288 8388608 04:00:05 PM 2030000 4270000 73.2 524288 8388608 04:00:06 PM 2000000 4300000 73.7 524288 8388608字段说明:
kbmemfree:空闲内存(KB)。kbmemused:已使用内存(KB)。%memused:内存使用百分比。kbbuffers:缓冲区使用的内存(KB)。kbcached:缓存使用的内存(KB)。 分析示例:- 高
%memused可能表示系统内存压力大,需要优化内存使用或增加物理内存。 - 监控
kbcached可以了解系统缓存的使用情况,有助于优化文件系统性能。
磁盘使用
磁盘使用情况直接影响系统的存储能力和读写性能。通过监控磁盘空间和 I/O 活动,可以预防磁盘满溢和性能瓶颈。
使用 df 查看磁盘空间
df(Disk Free)命令用于显示文件系统的磁盘空间使用情况。
-
基本用法
df -
常用选项
-h:以人类可读的格式显示(如 GB、MB)。-T:显示文件系统类型。-i:显示 inode 使用情况。 示例:
df -hT示例输出:
Filesystem Type Size Used Avail Use% Mounted on /dev/sda1 ext4 50G 20G 28G 42% / tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm /dev/sdb1 xfs 100G 60G 40G 60% /data -
理解各分区的使用情况
- Filesystem:文件系统名称或设备。
- Type:文件系统类型(如 ext4, xfs)。
- Size:总大小。
- Used:已使用空间。
- Avail:可用空间。
- Use%:使用百分比。
- Mounted on:挂载点。
使用 du 分析目录占用
du(Disk Usage)命令用于估算文件和目录的磁盘使用量,帮助识别占用大量空间的目录或文件。
-
基本用法
du /path/to/directory -
常用选项
-h:以人类可读的格式显示。-s:显示总计。-d N:显示到 N 级深度的目录。--max-depth=N:与-d类似,指定最大目录深度。 示例:
du -sh /var/log示例输出:
500M /var/log -
识别占用大量空间的目录或文件
示例:du -ah /var | sort -hr | head -n 20说明:
-a:显示所有文件和目录。sort -hr:按人类可读的格式逆序排序。head -n 20:显示前20个结果。 示例输出:
2.0G /var/log 1.5G /var/log/nginx 1.2G /var/log/mysql 500M /var/www/html ...
使用 iotop 监控磁盘 I/O
iotop 是一个实时监控磁盘 I/O 使用情况的工具,类似于 top,但专注于磁盘操作。
-
安装与基本用法
安装iotopsudo apt install iotop # Debian/Ubuntu sudo yum install iotop # CentOS/RHEL sudo dnf install iotop # Fedora启动
iotopsudo iotop -
识别高 I/O 进程
在iotop界面中,查看正在进行大量读写操作的进程,帮助识别性能瓶颈。
示例:Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND 1234 be/4 alice 0.00 B/s 0.00 B/s 0.00 % 0.00 % myapp 5678 be/4 bob 0.00 B/s 1.00 MB/s 0.00 % 0.00 % nginx在此示例中,
nginx进程正在进行大量磁盘写入操作,可能需要优化其配置或资源使用。
磁盘使用监控最佳实践
- 定期检查磁盘空间
使用df和du定期检查系统的磁盘空间使用情况,确保关键分区有足够的可用空间。 - 识别并清理不必要的文件
通过du识别占用大量空间的目录或文件,及时清理不再需要的数据,释放磁盘空间。 - 监控磁盘 I/O 活动
使用iotop实时监控磁盘 I/O 活动,识别性能瓶颈和异常读写操作,采取相应的优化措施。
网络带宽监控
网络带宽监控有助于了解网络流量的使用情况,识别异常流量和潜在的网络问题,确保网络资源的合理利用。
使用 iftop 监控实时网络流量
iftop 是一个实时流量监控工具,显示网络接口上的流量和连接情况。
-
安装与基本用法
安装iftopsudo apt install iftop # Debian/Ubuntu sudo yum install iftop # CentOS/RHEL sudo dnf install iftop # Fedora启动
iftopsudo iftop -i eth0说明:
-i eth0:指定要监控的网络接口(如eth0、wlan0)。
-
识别高流量连接
在iftop界面中,查看哪些 IP 地址或端口正在消耗大量带宽,帮助识别潜在的网络问题或攻击。
示例:Total send rate: 1.00 Gbits/sec Total receive rate: 500 Mbits/sec 192.168.1.100:443 500 Mbits/sec 200 Mbits/sec example.com 10.0.0.5:22 300 Mbits/sec 100 Mbits/sec remote.server.com
使用 nload 查看网络流量统计
nload 是一个简单的网络流量监控工具,显示网络接口的上传和下载流量统计。
-
安装与基本用法
安装nloadsudo apt install nload # Debian/Ubuntu sudo yum install nload # CentOS/RHEL sudo dnf install nload # Fedora启动
nloadnload eth0说明:
eth0:指定要监控的网络接口。
-
分析上传与下载流量
nload提供了实时的上传(TX)和下载(RX)流量图表,帮助用户直观地了解网络流量的动态变化。
示例:eth0 [####################--------------------] 1.00 KB/s | 500.00 KB/s字段说明:
- 上传流量(TX):发送到网络的流量。
- 下载流量(RX):从网络接收的流量。
网络带宽监控最佳实践
- 监控关键网络接口
重点监控关键网络接口(如服务器的eth0、eth1),确保网络流量在预期范围内。 - 识别异常流量
通过监控工具识别异常高的流量或不寻常的连接,及时发现潜在的网络攻击或配置问题。 - 设置流量阈值
根据系统需求设置流量阈值,当网络流量超过预定范围时,触发报警或采取自动化措施。
系统性能优化
系统性能优化通过调整系统配置和优化资源使用,提升系统整体性能和响应速度。以下将介绍针对 CPU、内存和磁盘等关键资源的优化策略。
优化 CPU 使用
高 CPU 使用率可能导致系统响应缓慢,甚至无法处理新任务。通过调整进程优先级和优化高 CPU 使用进程,可以改善系统性能。
调整进程优先级,使用 nice 和 renice
-
nice命令基本用法
nice用于启动一个新进程时设置其优先级。优先级值(niceness)范围从-20(最高优先级)到19(最低优先级),默认值为0。
示例:
启动一个进程,并设置优先级为10:nice -n 10 myapp说明:
- 较高的 niceness 值(如
10)会降低进程的 CPU 优先级,减少其对系统资源的占用。
- 较高的 niceness 值(如
-
renice命令基本用法
renice用于修改正在运行的进程的优先级。
示例:
将 PID 为1234的进程优先级调整为5:renice -n 5 1234说明:
- 需要具有足够的权限(通常是超级用户)才能降低进程的优先级(设置为更高的 niceness 值)。
识别并优化高 CPU 使用进程
- 使用
top和htop查找高 CPU 使用进程
在top或htop中,按%CPU列排序,找到消耗大量 CPU 资源的进程。
示例(使用htop):- 启动
htop:htop - 按
%CPU排序:
按F6键,选择%CPU进行排序。 - 识别高 CPU 使用进程:
查看顶部的进程列表,找出高负载进程。
- 启动
- 调整进程优先级或优化应用配置
对于高 CPU 使用的进程,可以通过以下方式进行优化:-
调整优先级:
sudo renice -n 10 -p 1234说明: 将 PID 为
1234的进程优先级设置为10,降低其 CPU 使用优先级。 -
优化应用配置:
检查应用程序的配置文件,调整线程数、缓存大小等参数,降低其 CPU 负载。
示例:
对于nginx,可以调整worker_processes参数:worker_processes auto;修改配置后,重新加载
nginx:sudo systemctl reload nginx
-
优化 CPU 使用示例
-
限制某个进程的 CPU 使用
使用cpulimit工具可以限制进程的 CPU 使用率。
安装cpulimitsudo apt install cpulimit # Debian/Ubuntu sudo yum install cpulimit # CentOS/RHEL sudo dnf install cpulimit # Fedora使用
cpulimit限制进程 CPU 使用率sudo cpulimit -p 1234 -l 50说明:
-p 1234:指定进程 PID。-l 50:限制 CPU 使用率为 50%。
-
优化多线程应用的 CPU 使用
对于多线程应用,可以通过调整线程数或负载均衡,避免单个线程占用过多 CPU 资源。
示例:
在nginx配置文件中,设置worker_processes为系统 CPU 核心数:worker_processes auto;修改配置后,重新加载
nginx:sudo systemctl reload nginx
本节总结
- 本节主要围绕 Linux 性能监控与优化、系统性能优化、磁盘优化、磁盘优化示例、日志与系统监控工具 展开。
- 需要重点掌握的命令或工具包括:
sar、sysstat。 - 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
- 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。
复习建议
- 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
- 按原文示例至少手敲一遍典型命令,并观察输出变化。
- 对高风险操作先确认路径、权限和目标对象,再执行实际命令。
- 可优先复习这些高频命令:
sar、sysstat。