linux内存清理和swap内存释放办法

本文介绍当Linux系统swap空间占用过高导致运行缓慢时的解决方法。首先通过sync命令同步缓存到磁盘,然后利用/proc/sys/vm/drop_caches清理缓存。文章还提供了调整sysctl.conf配置来优化内存使用的建议。

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

如果swap空间使用到30%以上,系统就变得很慢,如果物理内存够,就需要清理下。

先应该同步一下

[root@mysql172 ~]# sync

再执行
echo 1 > /proc/sys/vm/drop_caches

查看内存占用情况
[root@mysql172 ~]# free -m
            total       used       free     shared    buffers     cached
Mem:         12010       9433       2577          0          4         24
-/+ buffers/cache:       9404       2606
Swap:         4094        838       3256

swap还是使用中。。。求问该咋办。。。。 
swapoff -a;swapon -a
终于free -m看到swap为空了。

************************************************
Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches

频繁的文件访问会导致系统的Cache使用量大增
$ free -m
total used free shared buffers cached
Mem: 3955 3926 28 0 55 3459
-/+ buffers/cache: 411 3544
Swap: 5726 0 5726


free内存减少到几十兆,系统运行缓慢

运行sync将dirty的内容写回硬盘
$sync

通过修改proc系统的drop_caches清理free的cache
$echo 3 > /proc/sys/vm/drop_caches

drop_caches的详细文档如下:
Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.
To free pagecache:
* echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
* echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
* echo 3 > /proc/sys/vm/drop_caches
As this is a non-destructive operation, and dirty objects are notfreeable, the user should run "sync" first in order to make sure allcached objects are freed.
This tunable was added in 2.6.16.

修改/etc/sysctl.conf 添加如下选项后就不会内存持续增加
vm.dirty_ratio = 1
vm.dirty_background_ratio=1
vm.dirty_writeback_centisecs=2
vm.dirty_expire_centisecs=3
vm.drop_caches=3
vm.swappiness =100
vm.vfs_cache_pressure=163
vm.overcommit_memory=2
vm.lowmem_reserve_ratio=32 32 8
kern.maxvnodes=3

上面的设置比较粗暴,使cache的作用基本无法发挥。需要根据机器的状况进行适当的调节寻找最佳的折衷。

<think>好的,我现在需要回答用户关于Linux系统中共享内存(SHM)与交换分区(swap)的关系及配置方法的问题。首先,我需要确认自己对这两个概念的理解是否准确。 共享内存(SHM)是进程间通信的一种方式,允许多个进程访问同一块内存区域,这样可以高效地共享数据。而交换分区(swap)是磁盘上的一块空间,当物理内存不足时,操作系统会将部分内存数据暂时存储到swap中,以释放物理内存供其他进程使用。接下来,用户想知道它们之间的关系以及如何配置。 首先,我需要回忆一下Linux内存管理的基本机制。共享内存属于IPC(进程间通信)资源,通常通过shmget等系统调用来创建。这部分内存会被计入系统的内存使用中,当物理内存不足时,系统可能会将部分内存页面换出到swap,包括共享内存的部分。因此,共享内存swap之间存在交互,尤其是在内存紧张的情况下。 然后是配置方面的问题。共享内存的大小可以通过内核参数进行设置,比如shmmaxshmall。而swap的配置则涉及创建swap文件或分区,并调整swappiness参数来控制系统使用swap的倾向。需要明确这些参数的作用如何调整它们。 接下来要考虑用户可能的实际应用场景。例如,数据库系统(如Oracle、Redis)经常使用共享内存,如果配置不当,可能导致频繁使用swap,进而影响性能。因此,如何合理分配共享内存大小调整swap策略是关键。 此外,需要验证一些技术细节。例如,共享内存是否会被交换到swap?根据Linux内存管理机制,所有的内存页,包括共享内存,都可能被换出,除非使用mlock锁定。因此,默认情况下,SHM占用的内存是可以被交换的,这会影响性能,特别是在高负载时。 关于配置方法,可能需要具体步骤,比如修改/etc/sysctl.conf中的参数,使用sysctl命令临时调整,或者通过ipcsipcrm管理共享内存swap部分则需要介绍swapon、swapoff以及创建swap文件的方法。 同时,需要引用提供的参考资料。例如,引用[2]提到write-combining内存操作优化,这可能与swap的性能影响相关。但用户的问题更侧重于配置交互,可能需要结合系统管理方面的知识。 最后,生成相关问题时要围绕SHMswap的关系、配置优化、性能影响等方面展开,确保问题有针对性,帮助用户深入理解。 现在,我需要将这些思考整理成一个结构清晰、分点明确的回答,确保符合用户的要求:使用中文,正确使用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、付费专栏及课程。

余额充值