学习目标
- 理解本节涉及的核心主题:Linux 性能监控与优化、系统资源监控、查看 CPU 使用率、查看内存使用。
- 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
- 能够识别本节相关的常见风险、易错点或排查思路。
学习重点
- 主题范围:Linux 性能监控与优化、系统资源监控、查看 CPU 使用率、查看内存使用、磁盘使用、网络带宽监控
- 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
- 复习方式:先理解场景,再动手练习,最后对照结果检查
Linux 性能监控与优化
系统资源监控
系统资源监控是了解系统当前状态、发现潜在问题的基础。通过监控 CPU、内存、磁盘和网络等资源的使用情况,可以及时发现资源瓶颈,采取优化措施。
查看 CPU 使用率
CPU 使用率是衡量系统负载的重要指标。高 CPU 使用率可能导致系统响应缓慢甚至崩溃。
使用 top 和 htop
top 和 htop 是最常用的实时系统监控工具,用于查看系统的 CPU、内存、进程等使用情况。
-
实时监控 CPU 使用情况
top命令
top是一个命令行工具,默认安装在大多数 Linux 发行版中。tophtop命令htop是top的增强版,提供了更友好的用户界面和更多的功能。sudo apt install htop # Debian/Ubuntu sudo yum install htop # CentOS/RHEL sudo dnf install htop # Fedorahtop比较
top和htoptop:简洁、基本功能,适合快速查看系统状态。htop:彩色界面、支持鼠标操作、可视化显示,更适合深入分析。
-
识别高 CPU 使用进程
在top或htop中,按%CPU列排序,可以快速找到消耗 CPU 资源最多的进程。
示例(使用top):- 启动
top:top - 按
%CPU列排序:
在top界面中,按P键可以按 CPU 使用率排序。 - 识别高 CPU 使用进程:
查看顶部列出的进程,找出消耗大量 CPU 的应用程序或服务。 示例(使用htop): - 启动
htop:htop - 按
%CPU排序:
按F6键,选择%CPU作为排序依据。 - 识别高 CPU 使用进程:
查看顶部的进程列表,找出高负载进程。
- 启动
使用 mpstat 查看多核 CPU 性能
mpstat 是 sysstat 包中的一个工具,用于报告各个 CPU 核心的使用情况,适用于多核系统的详细性能分析。
-
安装与基本用法
sudo apt install sysstat # Debian/Ubuntu sudo yum install sysstat # CentOS/RHEL sudo dnf install sysstat # Fedora启用
sysstat数据收集:sudo sed -i 's/ENABLED="false"/ENABLED="true"/' /etc/default/sysstat sudo systemctl restart sysstat查看所有 CPU 核心的使用情况
mpstat -P ALL 1 5说明:
-P ALL:显示所有 CPU 核心的信息。1:每隔1秒采样一次。5:采样5次。
-
解释
mpstat输出Linux 5.4.0-104-generic (hostname) 04/27/2024 _x86_64_ (8 CPU) 04:00:01 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle 04:00:02 PM all 5.00 0.00 3.00 0.50 0.00 0.00 0.00 0.00 0.00 91.50 04:00:02 PM 0 6.00 0.00 4.00 0.60 0.00 0.00 0.00 0.00 0.00 89.40 04:00:02 PM 1 4.00 0.00 2.00 0.40 0.00 0.00 0.00 0.00 0.00 93.60 ...字段说明:
%usr:用户空间占用的 CPU 百分比。%sys:内核空间占用的 CPU 百分比。%iowait:等待 I/O 操作的 CPU 百分比。%idle:空闲 CPU 百分比。 示例解释:all行显示所有 CPU 核心的平均使用情况。- 每个核心(如
0,1, ...)的详细使用情况。
查看内存使用
内存使用情况直接影响系统性能。合理的内存管理和监控可以防止内存不足导致的系统缓慢或崩溃。
使用 free 查看内存状态
free 是一个简单的命令,用于显示系统的内存使用情况,包括物理内存、交换空间和缓存。
-
基本用法
free -
常用选项
-h:以人类可读的格式显示(如 MB、GB)。-m:以 MB 为单位显示。-g:以 GB 为单位显示。 示例:
free -h示例输出:
total used free shared buff/cache available Mem: 16G 4.2G 2.1G 512M 9.7G 11G Swap: 8G 0B 8G -
理解内存使用的各个部分
- total:总物理内存。
- used:已使用的内存。
- free:空闲的内存。
- shared:多个进程共享使用的内存。
- buff/cache:用于缓冲和缓存的内存。
- available:可供新进程使用的内存。 注意事项:
buff/cache中的内存可被回收利用,available更能准确反映系统实际可用内存。
使用 vmstat 分析内存与交换空间
vmstat(Virtual Memory Statistics)提供了系统内存、进程、分页、块 I/O 等的统计信息,适用于深入分析内存和交换空间的使用情况。
-
基本用法
vmstat -
常用选项
-s:以统计摘要形式显示信息。-m:显示 slab 信息。1 5:每隔1秒采样一次,共5次。 示例:
vmstat 1 5示例输出:
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 2147484 524288 8388608 0 0 0 0 45 78 5 2 93 0 0 1 0 0 2147484 524288 8388608 0 0 0 0 30 55 3 1 96 0 0 0 0 0 2147484 524288 8388608 0 0 0 0 50 100 4 2 94 0 0 1 0 0 2147484 524288 8388608 0 0 0 0 35 70 6 3 91 0 0 0 0 0 2147484 524288 8388608 0 0 0 0 40 80 5 2 93 0 0字段说明:
- procs
r:运行队列中的进程数。b:等待 I/O 的进程数。
- memory
swpd:已使用的交换空间(KB)。free:空闲内存(KB)。buff:缓冲区使用的内存(KB)。cache:缓存使用的内存(KB)。
- swap
si:从交换空间交换到内存的数据量(KB/s)。so:从内存交换到交换空间的数据量(KB/s)。
- io
bi:块设备读取数据量(块/s)。bo:块设备写入数据量(块/s)。
- system
in:每秒中断数。cs:每秒上下文切换数。
- cpu
us:用户空间占用的 CPU 百分比。sy:内核空间占用的 CPU 百分比。id:空闲 CPU 百分比。wa:等待 I/O 的 CPU 百分比。st:被虚拟机偷走的 CPU 百分比。 解释vmstat输出
- 高
si和so表示交换活动频繁,可能是内存不足。 - 高
wa表示 I/O 等待时间长,可能是磁盘性能瓶颈。 - 高
r表示系统负载较高,可能需要优化进程或增加 CPU。
使用 top 监控内存使用
top 不仅可以监控 CPU 使用情况,还能实时显示内存和交换空间的使用情况,帮助识别内存泄漏和高内存使用的进程。
-
查看内存使用情况
启动top:top内存部分示例输出:
KiB Mem : 16384000 total, 2100000 free, 4200000 used, 10084000 buff/cache KiB Swap: 8388608 total, 8388608 free, 0 used. 10400000 avail Mem -
识别内存泄漏进程
- 排序进程按内存使用量
在top界面中,按M键可以按内存使用量排序。 - 监控高内存使用进程
观察持续占用大量内存的进程,确认是否存在内存泄漏。 示例:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1234 alice 20 0 500000 300000 20000 S 5.0 1.8 10:00.00 myapp在此示例中,
myapp进程占用了 1.8% 的内存,持续监控其内存使用是否异常增长。 - 排序进程按内存使用量
磁盘使用
磁盘使用情况影响系统的存储能力和读写性能。通过监控磁盘空间和 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进程正在进行大量磁盘写入操作。
网络带宽监控
网络带宽监控有助于了解网络流量的使用情况,识别异常流量和潜在的网络问题。
使用 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):从网络接收的流量。
系统性能优化
性能优化旨在通过调整系统配置和优化资源使用,提升系统整体性能和响应速度。
优化 CPU 使用
高 CPU 使用率可能导致系统响应缓慢,甚至无法处理新任务。通过调整进程优先级和优化高 CPU 使用进程,可以改善系统性能。
调整进程优先级,使用 nice 和 renice
-
nice命令基本用法
nice用于启动一个新进程时设置其优先级。优先级值(niceness)范围从-20(最高优先级)到19(最低优先级),默认值为0。
示例:
启动一个进程,并设置优先级为10:nice -n 10 myapp -
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 使用率异常高的进程。
- 启动
- 调整进程优先级或优化应用配置
对于高 CPU 使用的进程,可以通过以下方式进行优化:-
调整优先级:
sudo renice -n 10 -p 1234说明: 将 PID 为
1234的进程优先级设置为10,降低其 CPU 使用优先级。 -
优化应用配置:
检查应用程序的配置文件,调整线程数、缓存大小等参数,降低其 CPU 负载。
示例:
对于nginx,可以调整worker_processes参数:worker_processes auto;修改配置后,重新加载
nginx:sudo systemctl reload nginx
-
内存优化
内存优化通过调整系统参数和管理缓存与交换空间,提升内存使用效率,防止内存不足导致的性能问题。
调整内核参数,使用 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增加交换空间
-
创建交换文件
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中移除对应行
-
管理缓存与交换空间最佳实践
- 设置合理的
vm.swappiness值:根据系统需求调整vm.swappiness,降低系统对交换空间的依赖,提高物理内存的利用效率。 - 监控交换空间使用情况:定期检查交换空间的使用,确保系统在物理内存不足时能够有效利用交换空间。
- 避免过度依赖交换空间:通过增加物理内存或优化应用程序,减少对交换空间的需求。
本节总结
- 本节主要围绕 Linux 性能监控与优化、系统资源监控、查看 CPU 使用率、查看内存使用、磁盘使用 展开。
- 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
- 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。
复习建议
- 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
- 按原文示例至少手敲一遍典型命令,并观察输出变化。
- 对高风险操作先确认路径、权限和目标对象,再执行实际命令。