性能·内存 / 命令文档

Linux缺页异常运维解决方案

$ page 19 个章节 Linux 命令详解

概述

系统级性能调优与内存管理

缺页异常(Page Fault Exception)

当一个进程访问某个虚拟地址时,CPU 会检查对应的页表项,如果该虚拟地址还没有映射到物理内存(页表项无效),或者该地址对应的页数据暂时不在内存里(比如被换出到磁盘 Swap 区), 或者访问权限不符合(读写越权),就会触发 缺页异常(Page Fault Exception)。

大量缺页异常通常表明:

主要异常(Major Page Fault)

需要从磁盘加载数据,I/O开销大,严重影响性能

次要异常(Minor Page Fault)

内存中存在但未映射,主要是内存管理开销

系统瓶颈指标

内存不足、I/O压力、进程调度异常

实时监控与诊断命令

vmstat 1 10

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 2 3 524288 85432 12456 345678 15 23 156 89 678 234 25 15 45 15 0 3 4 528896 82341 12234 342345 18 26 234 123 789 345 28 18 38 16 0 关键指标解读: - si/so: swap in/out,高值表明内存压力 - bi/bo: block in/out,高值表明I/O瓶颈 - wa: iowait,高值表明等待I/O时间长

sar -B 1 10

Average: pgpgin/s pgpgout/s fault/s majflt/s pgfree/s pgscank/s pgscand/s pgsteal/s %vmeff Average: 245.67 123.45 1234.56 45.67 567.89 23.45 12.34 34.56 87.65 关键指标解读: - fault/s: 总缺页异常率 - majflt/s: 主要缺页异常率(重点关注) - pgscank/s: kswapd扫描页面数 - %vmeff: 内存回收效率

iostat -x 1 5

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 15.67 8.23 123.45 67.89 2.34 1.23 13.45 8.76 12.34 23.45 0.23 7.89 8.25 8.9 23.45 关键指标解读: - %util: 设备利用率,>80%需要关注 - r_await/w_await: 读写延迟 - aqu-sz: 平均队列长度

紧急响应阶段

echo 3 > /proc/sys/vm/drop_caches

清理页面缓存,释放内存压力

进程分析

ps aux --sort=-%mem | head -20

找出内存占用最高的进程

内存映射分析

cat /proc/PID/smaps | grep -E "(Size|Rss|Pss)"

详细分析进程内存使用情况

系统参数调优

sysctl vm.swappiness=10

降低swap使用倾向

核心调优参数

重要提示:参数调整前请先备份当前配置,并在测试环境验证效果

关键内核参数优化

# 内存管理优化
echo 'vm.swappiness=10' >> /etc/sysctl.conf
echo 'vm.vfs_cache_pressure=50' >> /etc/sysctl.conf  
echo 'vm.dirty_ratio=15' >> /etc/sysctl.conf
echo 'vm.dirty_background_ratio=5' >> /etc/sysctl.conf
echo 'vm.overcommit_memory=1' >> /etc/sysctl.conf
echo 'vm.overcommit_ratio=80' >> /etc/sysctl.conf

# 应用配置
sysctl -p

vm.swappiness

推荐值:10-20控制swap使用积极程度,降低值减少swap

vm.vfs_cache_pressure

推荐值:50-100控制内核回收文件系统缓存的倾向

vm.dirty_ratio

推荐值:10-20脏页比例阈值,影响写入性能

vm.overcommit_memory

推荐值:1内存超分配策略,1为启发式overcommit

JVM应用优化

# JVM堆内存调优示例
export JAVA_OPTS="-Xms4g -Xmx4g -XX:NewRatio=3 -XX:+UseG1GC 
                  -XX:MaxGCPauseMillis=200 -XX:+DisableExplicitGC
                  -XX:+HeapDumpOnOutOfMemoryError"

数据库优化

# MySQL innodb调优
echo 'innodb_buffer_pool_size=70%' >> /etc/mysql/my.cnf
echo 'innodb_log_file_size=512M' >> /etc/mysql/my.cnf
echo 'innodb_flush_method=O_DIRECT' >> /etc/mysql/my.cnf

nginx/apache调优

# nginx worker进程调优
worker_processes auto;
worker_connections 65535;
worker_rlimit_nofile 65535;

建立监控脚本

#!/bin/bash
# 缺页异常监控脚本
while true; do
    MAJFLT=$(sar -B 1 1 | tail -1 | awk '{print $5}')
    if (( $(echo "$MAJFLT > 50" | bc -l) )); then
        echo "$(date): High major page faults: $MAJFLT/s" >> /var/log/pagefault.log
        # 触发告警机制
        echo "High page fault detected" | mail -s "System Alert" admin@company.com
    fi
    sleep 60
done

性能基线建立

正常基线指标

Major faults < 10/sMemory usage < 80%Swap usage < 20%

告警阈值

Major faults > 50/sMemory usage > 90%I/O wait > 30%

关键监控工具

Prometheus + GrafanaZabbixNagios

立即响应

• 检查系统负载和内存使用 • 识别占用内存最多的进程 • 清理不必要的缓存

短期缓解

• 重启占用内存过多的服务 • 调整swap策略 • 临时增加交换空间

中期优化

• 应用程序代码优化 • 数据库查询优化 • 系统参数精细调优

长期规划

• 硬件升级评估 • 架构优化设计 • 容量规划制定

同分类 · 其他命令文档