Linux Swap故障之 swapoff failed: Cannot allocate memory

swap分区关闭

准备调整Linux下的swap分区的使用率。

在Linux下执行 swapoff -a -v报如下错误:

swapoff: /dev/mapper/cryptswap1: swapoff failed: Cannot allocate memory

上述错误原因分析:

  从上述的信息可以看出,当前Linux系统把/dev/mapper/cryptswap1这个设备当做了交换分区,如果当前改交换分区使用的容量大于系统当前剩余的内存,就会报这个错误,因为在关闭交换分区的时候,需要把分区的数据全部写入到内存,如果内存容量不足,就会导致这个错误。

解决:

方法1:释放内存缓存

# sync ; echo 3 > /proc/sys/vm/drop_caches  #先把内存数据回写到磁盘,然后释放内存缓存

drop_caches接受的参数是123,分别清空pagecache、slab对象、pagecahce和slab对象

从 https://github.com/torvalds/linux/blob/master/Documentation/sysctl/vm.txt 可以找到对该文件参数的解释:

drop_caches

Writing to this will cause the kernel to drop clean caches, as well as
reclaimable slab objects like dentries and inodes.  Once dropped, their
memory becomes free.

To free pagecache:
    echo 1 > /proc/sys/vm/drop_caches
To free reclaimable slab objects (includes dentries and inodes):
    echo 2 > /proc/sys/vm/drop_caches
To free slab objects and pagecache:
    echo 3 > /proc/sys/vm/drop_caches

dirty状态的内存缓存不会被释放,如果要释放尽可能多的内存缓存,先执行命令sync,减少dirty状态的内存缓存。如果要disable,输入参数4,注意0不被接受:

上述方法可能不会成功,当你的swap分区使用太多的时候。

方法2:允许内存overcommit

overcommit_memory用来控制“用户空间申请内存时,是否进行内存容量判断(overcommit判断)以及是否批准:

When this flag is 0, the kernel attempts to estimate the amount
of free memory left when userspace requests more memory.

When this flag is 1, the kernel pretends there is always enough
memory until it actually runs out.

When this flag is 2, the kernel uses a "never overcommit"
policy that attempts to prevent any overcommit of memory.
Note that user_reserve_kbytes affects this policy.

设置的值为2表示不允许overcommit,这时候如果停掉swap,那么可用内存减少,用户空间的内存申请就可能触发overcommit被拒绝。

参考

https://www.lijiaocn.com/%E9%97%AE%E9%A2%98/2019/02/27/linux-swap-off-fail.html

原文地址:https://www.cnblogs.com/yjt1993/p/11163679.html

时间: 2024-10-09 04:36:57

Linux Swap故障之 swapoff failed: Cannot allocate memory的相关文章

安装composer后报错proc_open(): fork failed - Cannot allocate memory

1.问题描述: 在linux服务器使用composer 安装插件时,出现“proc_open(): fork failed - Cannot allocate memory” 也就是提示“提示内存不足”,我们可以通过创建swap分区解决这个问题. 2.解决方法: 先运行 free -m 看下空间是多少 在命令行环境依次运行以下三条命令 dd if=/dev/zero of=/var/swap.1 bs=1M count=1024 mkswap /var/swap.1 swapon /var/sw

关于阿里云ESC上go语言项目编译6l: running gcc failed: Cannot allocate memory

前段时间将自己的阿里云服务器上的系统由centos 6.5换为了ubuntu 14,其他的硬件配置都没有发生改变,将服务器上的数据恢复并且重新安装了golang的编译环境后,发现使用go build编译稍微大一点的golang项目就会报错: /usr/local/go/pkg/tool/linux_amd64/6l: running gcc failed: Cannot allocate memory 一直想不通为啥换了个系统就会报这个错,字面意思是gcc分配内存失败,应该是内存不够用,机器配置

mprotect() failed: Cannot allocate memory

遇到这个问题是在测试项目的性能时发现的,每个对象分配一页大小的空间然后mprotect() 保护起来,当系统分配3W多个页的时候会出现这个问题. google到在一份邮件列表中也曾提到该问题.https://sourceware.org/ml/libc-help/2010-04/msg00026.html 摘抄部分如下: ----------------------------------------------------------------------------------------

解决Zend OPcache huge_code_pages: mmap(HUGETLB) failed: Cannot allocate memory报错

前几日看到鸟哥介绍的 <让你的PHP7更快之Hugepage>, 于是想试试手给服务器加上,参照格式安装好扩展,调整好配置文件,然后重启php-fpm,结果启动一直报Zend OPcache huge_code_pages: mmap(HUGETLB) failed: Cannot allocate memory 看字面意思是无法分配内存?怎么会呢,机器内存还是很充足的,这点排查掉了.后面查找相关资料得到,是因为系统Hugepage不够,一般系统Hugepage是没有开启的,可以通过下面命令查

Failed to allocate memory: 8

Failed to allocate memory: 8This application has requested the Runtime to terminate it in an unusual way.Please contact the application's support team for more information. 解决办法直接在新建模拟器的时候把它的内存RAM设置在1024以下就可以,最好设置成512 如图:

Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory 8

过程中,增大对应AVD的内存为2G后,结果无法启动AVD了: [2012-12-18 18:01:38 – Emulator] Failed to allocate memory: 8 [2012-12-18 18:01:38 – Emulator] [2012-12-18 18:01:38 – Emulator] This application has requested the Runtime to terminate it in an unusual way. [2012-12-18 1

解决Failed to allocate memory: 8转

解决Failed to allocate memory: 8 昨天换了x64的Win7,发现在Eclipse上启动模拟器的时候存在问题,当设置的模拟器分辨率大于400×800的时候会出现 Failed to allocate memory: 8This application has requested the Runtime to terminate it in an unusual way.Please contact the application's support team for m

fork failed.: Cannot allocate memory

在做压力测试时候: [[email protected] ok]# webbench -c 5000 -t30 http://10.100.0.61/ Webbench - Simple Web Benchmark 1.5 Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software. Benchmarking: GET http://10.100.0.61/ 5000 clients, running 30 sec. Speed=1

【Linux】 -bash-4.2#问题和Cannot allocate memory

1,最近在实际使用linux的过程中中,遇到了一个小问题 在之前,看到根目录“/”下多了一个“~”目录,看到别的服务器都没有,于是忍不住rm -rf ~了.运行了10来秒,感觉不对劲,用时太长了,应该是个小文件才对,赶紧停了. 然后第二天重新连接这个服务器时,发现命令行头[[email protected] ~]变成了-bash-4.2#,一直不明白是什么鬼.今天终于忍不住百度了,原来是"/root"目录下,以".bash”开头的文件都被干掉了. 解决办法:运行下面的命令.就