学习目标
- 理解本节涉及的核心主题:Linux 性能监控与优化、系统性能优化、内存优化、磁盘优化。
- 掌握重点命令或工具:
sar、sysstat、collectd。 - 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
- 能够识别本节相关的常见风险、易错点或排查思路。
学习重点
- 主题范围:Linux 性能监控与优化、系统性能优化、内存优化、磁盘优化、日志与系统监控工具、使用
sar和sysstat进行性能分析 - 重点命令:
sar、sysstat、collectd - 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
- 复习方式:先理解场景,再动手练习,最后对照结果检查
Linux 性能监控与优化
系统性能优化
内存优化
内存优化通过调整系统参数和管理缓存与交换空间,提升内存使用效率,防止内存不足导致的性能问题。
调整内核参数,使用 sysctl
sysctl 是一个用于查看和修改内核参数的工具,内核参数通常保存在 /etc/sysctl.conf 或 /etc/sysctl.d/ 目录下的文件中。
- 常用内核参数
-
vm.swappiness:
控制系统使用交换空间的倾向。范围从0(尽量少使用交换空间)到100(尽量多使用交换空间)。
默认值:60
优化建议: 将vm.swappiness设置为10,减少交换空间的使用,提高系统性能。
临时调整:sudo sysctl vm.swappiness=10永久调整:
编辑
/etc/sysctl.conf文件,添加以下行:vm.swappiness=10应用更改:
sudo sysctl -p -
vm.vfs_cache_pressure:
控制系统回收目录和 inode 缓存的倾向。默认值为100,增大该值会加快缓存回收速度,减小则会保留更多缓存。
优化建议: 将vm.vfs_cache_pressure设置为50,保持更多的文件系统缓存,提升文件访问性能。
临时调整:sudo sysctl vm.vfs_cache_pressure=50永久调整:
编辑
/etc/sysctl.conf文件,添加以下行:vm.vfs_cache_pressure=50应用更改:
sudo sysctl -p
-
- 临时与永久调整方法
- 临时调整:通过
sysctl命令直接修改内核参数,重启后失效。 - 永久调整:编辑
/etc/sysctl.conf或/etc/sysctl.d/*.conf文件,确保参数在系统重启后仍然生效。
- 临时调整:通过
管理缓存与交换空间
-
清理缓存
清理系统缓存可以释放内存,但通常不建议频繁执行,因为缓存有助于提高系统性能。只有在特定情况下(如内存不足)才需要清理缓存。
命令:sudo sync sudo sysctl -w vm.drop_caches=3说明:
vm.drop_caches=3:清理页缓存、目录项缓存和 inode 缓存。 注意事项:- 清理缓存后,系统性能可能暂时下降,因为需要重新加载被清理的缓存。
-
调整交换空间大小
交换空间(Swap)用于在物理内存不足时临时存储数据。合理配置交换空间可以防止系统因内存不足而崩溃。-
查看当前交换空间使用情况
swapon --show示例输出:
NAME TYPE SIZE USED PRIO /swapfile file 4G 0B -2 -
增加交换空间
-
创建交换文件
sudo fallocate -l 4G /swapfile说明: 创建一个 4GB 的交换文件。
-
设置正确的权限
sudo chmod 600 /swapfile -
格式化为交换空间
sudo mkswap /swapfile -
启用交换空间
sudo swapon /swapfile -
将交换空间添加到
/etc/fstab文件中以便开机自动启用/swapfile none swap sw 0 0
-
-
减少交换空间
- 禁用交换文件
sudo swapoff /swapfile - 删除交换文件
sudo rm /swapfile - 从
/etc/fstab中移除对应行 管理交换空间最佳实践
- 禁用交换文件
-
设置合理的交换空间大小:根据系统内存大小和应用需求,设置合适的交换空间大小。常见建议是物理内存的 1-2 倍。
-
监控交换空间使用情况:通过
free和vmstat等工具,定期检查交换空间的使用情况,确保系统在内存不足时能够有效利用交换空间。 -
避免过度依赖交换空间:通过增加物理内存或优化应用程序,减少对交换空间的需求,提升系统性能。
-
磁盘优化
磁盘优化通过调整文件系统、管理分区和优化 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 级别 | 描述 | 优点 | 缺点 |
磁盘优化最佳实践
- 合理规划分区和文件系统类型:根据系统用途选择合适的分区布局和文件系统类型,以优化性能和数据安全。
- 使用适当的挂载选项:如
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 %usr %nice %sys %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输出
字段说明:%usr:用户空间占用的 CPU 百分比。%sys:内核空间占用的 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可以了解系统缓存的使用情况,有助于优化文件系统性能。
使用 collectd 等工具进行性能监控
除了 sysstat 包中的工具,其他专业的性能监控工具如 collectd、Munin、Nagios 和 Zabbix 也广泛用于系统性能监控和分析。
collectd - 系统性能监控工具
collectd 是一个开源的系统统计收集守护进程,可以收集系统和应用程序的性能指标,并将其存储或发送到集中监控系统进行分析和可视化。
-
安装与配置
安装collectdsudo apt install collectd # Debian/Ubuntu sudo yum install collectd # CentOS/RHEL sudo dnf install collectd # Fedora配置
collectd编辑
/etc/collectd/collectd.conf文件,启用和配置所需的插件。示例:
LoadPlugin cpu LoadPlugin memory LoadPlugin disk LoadPlugin network <Plugin "cpu"> ReportByCpu true ReportByState true </Plugin> <Plugin "memory"> # 默认配置 </Plugin> <Plugin "disk"> Disk "/dev/sda" Disk "/dev/sdb" </Plugin> <Plugin "network"> Interface "eth0" </Plugin>启动并启用
collectd服务sudo systemctl enable collectd sudo systemctl start collectd -
收集系统指标(CPU, 内存, 磁盘, 网络)
collectd可以通过加载不同的插件,收集各种系统指标,并将其存储到本地文件、数据库或发送到远程监控系统。
常用插件:- CPU:收集 CPU 使用率、负载等信息。
- Memory:收集内存使用情况。
- Disk:收集磁盘使用和 I/O 信息。
- Network:收集网络流量和连接信息。
- Load:收集系统负载信息。
-
集成与可视化工具(如 Grafana)
collectd可以与 Grafana 等可视化工具集成,通过数据库(如 InfluxDB、Prometheus)存储数据,并在 Grafana 中创建实时监控面板。
示例:将collectd数据发送到 InfluxDB 并在 Grafana 中可视化-
安装 InfluxDB 和 Grafana
sudo apt install influxdb grafana # Debian/Ubuntu sudo yum install influxdb grafana # CentOS/RHEL sudo dnf install influxdb grafana # Fedora -
启动并启用 InfluxDB 和 Grafana 服务
sudo systemctl enable influxdb sudo systemctl start influxdb sudo systemctl enable grafana-server sudo systemctl start grafana-server -
配置
collectd发送数据到 InfluxDB
编辑/etc/collectd/collectd.conf,添加write_influxdb插件配置:LoadPlugin write_influxdb <Plugin "write_influxdb"> <Node "influxdb"> Host "localhost" Port "8086" Database "collectd" StoreRates true </Node> </Plugin>重新启动
collectd服务:sudo systemctl restart collectd -
在 Grafana 中添加 InfluxDB 数据源
- 访问 Grafana 界面(默认端口
3000):http://your_server_ip:3000 - 登录(默认用户名和密码均为
admin)。 - 添加 InfluxDB 数据源,填写相应信息。
- 访问 Grafana 界面(默认端口
-
创建 Grafana 仪表盘
- 使用预定义的模板或自定义创建仪表盘,展示系统性能指标。
-
其他监控工具
除了 collectd,还有其他流行的监控工具,如 Munin、Nagios 和 Zabbix,它们提供了丰富的功能和插件,适用于不同规模和需求的系统监控。
-
Munin
Munin是一个网络监控工具,使用简单,适合小型和中型系统。它通过插件收集数据,并生成图形化的网页展示系统性能指标。
安装与配置sudo apt install munin munin-node # Debian/Ubuntu sudo yum install munin munin-node # CentOS/RHEL sudo dnf install munin munin-node # Fedora启动并启用服务
sudo systemctl enable munin-node sudo systemctl start munin-node访问 Munin 网页界面
默认情况下,Munin 的网页界面位于
http://your_server_ip/munin,需要在 Web 服务器(如 Apache、Nginx)中配置相应的虚拟主机。 -
Nagios
Nagios是一个功能强大的企业级监控系统,支持广泛的插件和扩展,适用于大规模和复杂的系统监控。
安装与配置
Nagios的安装和配置较为复杂,涉及服务器端和客户端的设置。建议参考官方文档或相关教程进行安装和配置。
主要特点:- 实时监控系统和网络服务。
- 支持自定义报警和通知。
- 丰富的插件生态系统。
-
Zabbix
Zabbix是一个开源的企业级监控解决方案,提供全面的系统和应用程序监控功能,支持分布式监控和高可用性配置。
安装与配置
Zabbix包括服务器、代理和前端组件,安装过程涉及多个步骤。建议参考官方文档或相关教程进行安装和配置。
主要特点:- 实时监控和历史数据存储。
- 灵活的报警和通知机制。
- 强大的数据可视化和报表功能。
监控工具选择建议
- 小型系统:
Munin提供了简单易用的监控功能,适合快速部署和基本的性能监控。 - 中型企业:
collectd配合Grafana是一个灵活且强大的组合,适用于定制化监控需求。 - 大型企业:
Nagios和Zabbix提供了全面的监控功能和扩展性,适合复杂和分布式环境。
本节总结
- 本节主要围绕 Linux 性能监控与优化、系统性能优化、内存优化、磁盘优化、日志与系统监控工具 展开。
- 需要重点掌握的命令或工具包括:
sar、sysstat、collectd。 - 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
- 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。
复习建议
- 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
- 按原文示例至少手敲一遍典型命令,并观察输出变化。
- 对高风险操作先确认路径、权限和目标对象,再执行实际命令。
- 可优先复习这些高频命令:
sar、sysstat、collectd。