部分SWAP 内存知识

[root@ZHXDB2 ~]# free -m
total used free shared buffers cached
Mem: 16050 15567 483 0 202 5240
-/+ buffers/cache: 10123 5926
Swap: 18047 167 17880

还有5926M内存,应该不是问题。
对于167M的swap使用应该如何解释?

从我目前了解到LINUX 内存知识来说

1 LINUX 系统为了保证 未来 某个进程申请内存量的需求 必须保留多少空闲内存. 为此 会把某些进程不常用的页面 放到 SWAP上

FREE -M
公式计算:
TOTAL –> USED+FREE (16050=15567+483) 第一行; 按内存分配上看
TOTAL –> USED+FREE (16050=10123+5926) 第二行; 按实际使用上看

第二行的值
USED:10123=15567-202-5240
FREE:5926=483+202+5240

2 内存是否紧张 看SWAP的页面是否会频繁地调入内存中. 当前可以使用VMSTAT 来查看. 历史的可以用SAR来查看,具体参数

2.1 vmstat

vmstat 1 100
procs ———–memory———- —swap– —–io—- –system– —–cpu—–
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 778616 22848 102556 0 0 0 0 12 6 0 0 100 0 0
0 0 0 778616 22848 102556 0 0 0 0 10 8 0 0 100 0 0
0 0 0 778616 22848 102556 0 0 0 0 15 12 0 1 99 0 0
0 0 0 778616 22848 102556 0 0 0 0 19 21 0 0 100 0 0

Swap
si: Amount of memory swapped in from disk (kB/s). 虚拟内存的页导入(从SWAP DISK导入RAM)
so: Amount of memory swapped to disk (kB/s). 虚拟内存的页导出.

!/bin/bash

LogName=”/var/log/sa/sadate --date='yesterday' +%d
sar -q -r LogNamesarqWLogName

内存和交换空间监控
sar -r
输出项说明:
kbmemfree 可用的空闲内存数量,单位为 KB
kbmemused 已使用的内存数量(不包含内核使用的内存),单位为 KB
%memused 已使用内存的百分数
kbbuffers 内核缓冲区(buffer)使用的内存数量,单位为 KB
kbcached 内核高速缓存(cache)数据使用的内存数量,单位为 KB
kbcommit:保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap)
%commit:这个值是kbcommit与内存总量(包括swap)的一个百分比.
Linux 2.6.32-504.23.4.el6.x86_64 (oraclemain) 06/27/16 x86_64 (8 CPU)

00:00:01 kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit
00:10:01 1007260 31873136 96.94 254128 27907488 13547280 25.16

系统交换活动信息监控
sar -W:
pswpin/s:每秒系统换入的交换页面(swap page)数量
pswpout/s:每秒系统换出的交换页面(swap page)数量
Linux 2.6.32-504.23.4.el6.x86_64 (oraclemain) 06/27/16 x86_64 (8 CPU)

[root@cnetos5 ~]# sar -B
Linux 2.6.18-53.el5 (cnetos5) 01/22/2008

12:00:01 AM pgpgin/s pgpgout/s fault/s majflt/s
12:10:01 AM 0.00 4.17 9.74 0.00
12:20:01 AM 0.00 2.71 2.24 0.00
12:30:01 AM 0.00 2.69 2.25 0.00
Average: 0.00 3.17 4.07 0.00
输出项说明:
pgpgin/s 每秒钟从磁盘读入的系统页面的 KB 总数
pgpgout/s 每秒钟向磁盘写出的系统页面的 KB 总数
fault/s 系统每秒产生的页面失效(major + minor)数量
majflt/s 系统每秒产生的页面失效(major)数量

<think>好的,我现在需要回答用户关于Linux系统中共享内存(SHM)与交换分区(swap)的关系及配置方法的问题。首先,我需要确认自己对这两个概念的理解是否准确。 共享内存(SHM)是进程间通信的一种方式,允许多个进程访问同一块内存区域,这样可以高效地共享数据。而交换分区(swap)是磁盘上的一块空间,当物理内存不足时,操作系统会将部分内存数据暂时存储到swap中,以释放物理内存供其他进程使用。接下来,用户想知道它们之间的关系以及如何配置。 首先,我需要回忆一下Linux内存管理的基本机制。共享内存属于IPC(进程间通信)资源,通常通过shmget等系统调用来创建。这部分内存会被计入系统的内存使用中,当物理内存不足时,系统可能会将部分内存页面换出到swap,包括共享内存部分。因此,共享内存swap之间存在交互,尤其是在内存紧张的情况下。 然后是配置方面的问题。共享内存的大小可以通过内核参数进行设置,比如shmmax和shmall。而swap的配置则涉及创建swap文件或分区,并调整swappiness参数来控制系统使用swap的倾向。需要明确这些参数的作用和如何调整它们。 接下来要考虑用户可能的实际应用场景。例如,数据库系统(如Oracle、Redis)经常使用共享内存,如果配置不当,可能导致频繁使用swap,进而影响性能。因此,如何合理分配共享内存大小和调整swap策略是关键。 此外,需要验证一些技术细节。例如,共享内存是否会被交换到swap?根据Linux内存管理机制,所有的内存页,包括共享内存,都可能被换出,除非使用mlock锁定。因此,默认情况下,SHM占用的内存是可以被交换的,这会影响性能,特别是在高负载时。 关于配置方法,可能需要具体步骤,比如修改/etc/sysctl.conf中的参数,使用sysctl命令临时调整,或者通过ipcs和ipcrm管理共享内存swap部分则需要介绍swapon、swapoff以及创建swap文件的方法。 同时,需要引用提供的参考资料。例如,引用[2]提到write-combining和内存操作优化,这可能与swap的性能影响相关。但用户的问题更侧重于配置和交互,可能需要结合系统管理方面的知识。 最后,生成相关问题时要围绕SHM和swap的关系、配置优化、性能影响等方面展开,确保问题有针对性,帮助用户深入理解。 现在,我需要将这些思考整理成一个结构清晰、分点明确的回答,确保符合用户的要求:使用中文,正确使用LaTeX格式,添加引用标识,并生成相关问题。</think>### Linux共享内存(SHM)与交换分区(swap)的关系及配置方法 #### 一、核心概念 1. **共享内存(SHM)** 共享内存是进程间通信(IPC)的一种方式,允许多个进程直接访问同一块物理内存区域。其特点包括: - 高效性:无需数据复制,适合高频数据交换。 - 生命周期:由内核管理,进程结束后若未显式释放,可能残留(需通过`ipcrm`命令清理)[^3]。 - 配置参数: - `kernel.shmmax`:定义单个共享内存段的最大大小(字节),例如设置为`2GB`: $$ \text{shmmax} = 2147483648 $$ - `kernel.shmall`:系统可分配的共享内存总页数(依赖页大小,通常为4KB)。 2. **交换分区(swap)** swap是磁盘上的存储空间,用于在物理内存不足时暂存内存页。其作用包括: - 缓解内存压力:通过换出非活跃内存页,避免OOM(Out-of-Memory)错误。 - 休眠支持:系统休眠时需足够swap空间保存内存状态。 - 关键参数: - `vm.swappiness`:取值范围0–100,值越高系统越倾向于使用swap(默认60)。 例如,降低swap使用倾向: $$ \text{swappiness} = 10 $$ #### 二、SHM与swap的交互 - **内存换出机制**: 共享内存默认会被计入系统可用内存。当物理内存紧张时,内核可能将SHM的页面换出到swap,可能导致性能下降(如数据库场景)[^2]。 - **锁定内存避免换出**: 可通过`mlock()`系统调用锁定共享内存,阻止其被换出,但需注意权限限制(`CAP_IPC_LOCK`)。 #### 三、配置方法 1. **共享内存配置** - **临时调整**: ```bash sysctl -w kernel.shmmax=2147483648 # 设置shmmax为2GB sysctl -w kernel.shmall=2097152 # 总共享内存页数(8GB,假设页大小4KB) ``` - **永久生效**: 编辑`/etc/sysctl.conf`,添加以下行后执行`sysctl -p`: ``` kernel.shmmax = 2147483648 kernel.shmall = 2097152 ``` 2. **swap配置优化** - **调整swappiness**: ```bash sysctl -w vm.swappiness=10 # 降低swap使用倾向 ``` - **添加swap文件**: ```bash fallocate -l 4G /swapfile # 创建4GB文件 chmod 600 /swapfile mkswap /swapfile swapon /swapfile # 启用swap文件 ``` - **持久化配置**: 在`/etc/fstab`中添加: ``` /swapfile none swap defaults 0 0 ``` #### 四、应用场景与注意事项 - **数据库系统**:如Oracle、Redis依赖共享内存,需增大`shmmax`并降低`swappiness`以避免频繁换出[^4]。 - **性能监控**: 使用`free -h`查看内存swap使用情况,`ipcs -m`检查共享内存状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值