集群报警 :Cloudera 建议将 /proc/sys/vm/swappiness 设置为最大值 10

Cloudera建议将/proc/sys/vm/swappiness值设为10以优化集群性能,避免因交换导致的运行状况不良。当前设置为30,可通过sysctl命令临时更改,并编辑/etc/sysctl.conf实现重启后持久化设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Cloudera 建议将 /proc/sys/vm/swappiness 设置为最大值 10。当前设置为 30。使用 sysctl 命令在运行时更改该设置并编辑 /etc/sysctl.conf,以在重启后保存该设置。您可以继续进行安装,但 Cloudera Manager 可能会报告您的主机由于交换而运行状况不良。以下主机将受到影响

 

问题:

Centos 7 下安装CDH,群集安装时出现的警告:

解决方法:

临时修改:

sysctl vm.swappiness=10
cat /proc/sys/vm/swappiness

这里我们的修改已经生效,但是如果我们重启了系统,又会变成60.

永久修改:

/etc/sysctl.conf 文件里添加如下参数:

vm.swappiness=10

或者:

echo 'vm.swappiness=10'>> /etc/sysctl.conf

可点左上角按钮

<think>我们正在讨论如何调整Linux系统的内存管理策略,特别是关于页面回收的行为。用户提到了`/proc/sys/vm/swappiness`参数,并希望了解如何调整该参数以优化文件页(file pages)和匿名页(anonymous pages)的回收策略。 在Linux内存管理中,当物理内存不足时,内核需要回收一些页面来释放内存。页面主要分为两种类型: 1. **文件页(File pages)**:这些是缓存的文件数据(如page cache)。因为文件数据在磁盘上有备份,所以回收这些页面时,如果页面是干净的(未被修改),可以直接丢弃(因为可以从磁盘重新读取);如果是脏的(被修改过),则需要先写回磁盘再回收。 2. **匿名页(Anonymous pages)**:这些是进程的堆栈数据等,没有文件备份。回收匿名页时,必须将其写入交换分区(swap)或交换文件,因为数据没有其他地方存储。 `swappiness`参数控制内核在回收页面时,对匿名页和文件页的回收倾向。具体来说: - `swappiness`值范围是0到100。 - 较高的值(如60)表示内核更倾向于回收匿名页(即更积极地使用交换空间)。 - 较低的值(如10)表示内核更倾向于回收文件页(即尽可能保留匿名页在内存中,而通过清理文件缓存来释放内存)。 根据引用[1]和引用[2]: - 当`swappiness=0`时,系统会尽量避免使用交换空间,除非内存严重不足(例如,避免OOM killer被触发)。 - 当`swappiness=100`时,系统会非常积极地使用交换空间。 引用[2]特别提到,Cloudera建议将`swappiness`设置为1~10,以避免在内存使用还比较充足时就过早地使用交换空间(因为交换操作会降低性能)。 在Linux内核中,页面回收的核心逻辑是通过一个称为“kswapd”的内核线程实现的。它会根据内存压力(即内存不足的程度)和`swappiness`设置来决定回收匿名页和文件页的比例。 具体来说,内核使用以下公式来计算回收匿名页和文件页的成本,并据此决定回收哪种页面更划算: $$ \text{anon\_cost} = \frac{\text{swappiness}}{100} \times \text{anon\_access\_cost} $$ $$ \text{file\_cost} = \frac{100 - \text{swappiness}}{100} \times \text{file\_access\_cost} $$ 其中,`anon_access_cost`和`file_access_cost`分别代表访问匿名页和文件页的代价(通常匿名页的访问代价更高,因为如果被换出,再次访问时需要从磁盘读回,而文件页则可能已经在page cache中)。 因此,调整`swappiness`实际上是在调整这两种页面回收的权重。当`swappiness`较低时,回收文件页的成本(file_cost)会相对较低,因此内核更倾向于回收文件页;反之,则更倾向于回收匿名页。 ### 调整建议 1. **对于需要高性能的服务器(如数据库、Hadoop节点)**:建议将`swappiness`设置为较低的值(如1-10),因为: - 这些应用通常有大量的文件I/O,因此page cache(文件页)对性能很重要,但回收文件页(特别是干净页)的代价相对较低(因为可以直接丢弃,下次访问时再读入)。 - 避免交换匿名页(如应用堆内存)可以防止因交换导致的性能下降(因为交换I/O通常比文件I/O更慢,且会增加延迟)。 2. **对于桌面系统或交互式应用**:可以保留默认值(通常为30)或稍高一些,因为: - 桌面应用可能更倾向于将不常用的匿名页换出,以保留更多的文件缓存(从而加快应用启动和文件访问速度)。 - 但也要注意,过高的`swappiness`可能导致系统响应变慢(因为频繁交换)。 ### 调整方法 - **临时调整**(立即生效,重启后失效): ```bash sudo sysctl vm.swappiness=10 ``` - **永久调整**: 编辑`/etc/sysctl.conf`文件,添加或修改: ``` vm.swappiness=10 ``` 然后运行`sudo sysctl -p`使其生效。 ### 其他相关参数 除了`swappiness`,还有其他几个参数可以影响页面回收行为,它们位于`/proc/sys/vm/`目录下: - **`vfs_cache_pressure`**:控制内核回收用于缓存目录项(dentry)和inode对象的内存的速度。默认值100,增加该值会使得内核更倾向于回收这些缓存(可能导致文件系统操作变慢)。 - **`min_free_kbytes`**:系统保留的最小空闲内存(以KB为单位)。当内存低于这个阈值时,内核会开始更积极地回收内存。 - **`zone_reclaim_mode`**:控制内存区域(NUMA架构中)的回收策略。 ### 监控工具 调整后,可以使用以下工具监控内存和交换使用情况: - `free -m`:查看内存和交换使用总量。 - `vmstat 1`:查看每秒的页面交换(si/so)情况。 - `sar -r 1`:查看内存使用率。 - `sar -B 1`:查看页面回收和交换活动。 ### 总结 通过调整`swappiness`参数,可以优化Linux系统在内存压力下回收文件页和匿名页的策略。对于服务器应用,建议设置为较低的值(如10),以避免不必要的交换操作,从而提升性能。同时,需要结合监控工具观察系统行为,确保调整达到预期效果。 §§相关问题§§ 1. 如何监控Linux系统的swap使用情况和页面回收活动? 2. 除了swappiness,还有哪些内核参数可以优化内存回收行为? 3. 在NUMA系统中,内存回收策略有哪些不同?如何调整? 4. 如何诊断因内存回收导致的性能问题?</think>### Linux 内存管理优化:调整 swappiness 控制文件页与匿名页回收策略 在 Linux 内存管理中,`/proc/sys/vm/swappiness` 参数直接影响内核回收**文件页(File Pages)** 和**匿名页(Anonymous Pages)** 的策略。这两类页面的回收机制差异显著,需针对性优化: #### 1. **文件页 vs 匿名页的核心区别** | **特性** | **文件页 (File Pages)** | **匿名页 (Anonymous Pages)** | |----------------|---------------------------------------------|--------------------------------------------| | **数据来源** | 文件系统缓存 (Page Cache) | 进程堆/栈等动态内存 | | **磁盘备份** | 有 (原始数据在磁盘) | 无 | | **回收代价** | 低 (干净页可直接丢弃,脏页需写回磁盘) | 高 (必须写入 Swap 分区) | | **回收优先级** | 受 `swappiness` 间接控制 | 直接受 `swappiness` 控制 | #### 2. **swappiness 如何影响回收策略** `swappiness` 值 ($S$) 通过以下机制控制回收行为: - **匿名页回收倾向**: $$ \text{匿名页回收权重} = S $$ 值越高,内核越**优先回收匿名页**(触发 Swap 操作)[^1][^2] - **文件页回收倾向**: $$ \text{文件页回收权重} = 100 - S $$ 值越低,内核越**优先回收文件页**(清理 Page Cache)[^1][^2] **典型场景对比**: - `S=30` (默认): 内存压力大时,匿名页回收概率 ≈30%,文件页回收概率 ≈70% - `S=10` (推荐优化值): 匿名页回收概率 ≈10%,文件页回收概率 ≈90% → **显著减少 Swap I/O**[^2] #### 3. **优化策略与建议值** | **应用场景** | **推荐值** | **原因说明** | |-----------------------|------------|-----------------------------------------------------------------------------| | 数据库/大数据服务 | $1-10$ | 减少 Swap 延迟,优先通过 Page Cache 回收释放内存[^2] | | 高 I/O 负载服务器 | $10-20$ | 平衡文件页回收与匿名页保留,避免频繁磁盘写入 | | 桌面/交互式系统 | $30-60$ | 允许适度 Swap 换取更多可用内存 | | 内存极度受限设备 | $>80$ | 激进回收匿名页避免 OOM,但可能引发卡顿 | > ℹ️ **验证公式**:当总内存为 $M$ GB,`swappiness=S` 时,Swap 启动阈值 ≈ $M \times (1 - S/100)$[^2] #### 4. **操作步骤:永久优化配置** ```bash # 1. 查看当前值 cat /proc/sys/vm/swappiness # 2. 临时修改(立即生效) sudo sysctl vm.swappiness=10 # 3. 永久修改(编辑配置文件) echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf # 4. 应用配置 sudo sysctl -p ``` #### 5. **监控与调优验证** - **监控 Swap 活动**: ```bash vmstat 1 # 关注 si/so 列(Swap In/Out) sar -B 1 # 查看页面回收速率 ``` - **检查内存分布**: ```bash cat /proc/meminfo | grep -E 'AnonPages|Cached' ``` - **调优依据**: - 若 `pgscank` (kswapd 主动扫描) 持续高位 → 需降低 `swappiness` - 若 `oom_kill` 事件增多 → 需适当提高 `swappiness` #### 6. **进阶:协同调优参数** - **`vfs_cache_pressure`**: 控制文件系统缓存回收强度(默认 100),建议值 $50-100$ ```bash echo "vm.vfs_cache_pressure=50" >> /etc/sysctl.conf ``` - **`min_free_kbytes`**: 设置内存保留阈值(避免 OOM),计算公式: $$ \text{推荐值} = \sqrt{\text{总内存}} \times 16\text{KB} $$ - **`zone_reclaim_mode`**: NUMA 架构下控制本地内存回收策略(通常设为 0 或 1)[^3] > ⚠️ **关键实践**:在数据库等场景中,将 `swappiness=10` 与 `echo 1 > /proc/sys/vm/drop_caches`(定时清理 Page Cache)结合使用,可最大化保留匿名页[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值