当Linux内存耗尽时,该如何处理?

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

当内存不足时会发生什么,结果很简单,linux的内存用完了,无法申请缓冲区,内核会挑选进程将其杀死,一般情况下,杀死正在申请内存的程序。频繁的进行磁盘swap操作,经常会出现这类问题,或是并发处理时启动的进程数过多。

出现内存耗尽的原因很简单,你申请的内存大小,超过了可用的虚拟内存的大小,注意是虚拟内存(内存并不是唯一的,交换分区也可以提供内存)

探究oom(out of memory)

首先运行下面的程序,不断申请大量内存:

#include <stdio.h>
#include <stdlib.h>
#define MEGABYTE 1024*1024
int main(int argc, char *argv[])
{
        void *myblock = NULL;
        int count = 0;
        while (1)
        {
                myblock = (void *) malloc(MEGABYTE);
                if (!myblock) break;
                printf("Currently allocating %d MB\n", ++count);
        }
        exit(0);
}

上面的程序运行一会就会出现oom,现在运行另外一个程序,不断申请内存,并且将其填充1。

#include <stdio.h>
#include <stdlib.h>
#define MEGABYTE 1024*1024
int main(int argc, char *argv[])
{
        void *myblock = NULL;
        int count = 0;
        while(1)
        {
                myblock = (void *) malloc(MEGABYTE);
                if (!myblock) break;
  
linux内核中内存耗尽OOM killer 内存严重不足,页分配器在多次尝试直接回收失败后,就会调用内存耗尽OOMkiller,选择杀死进程,释放内存。先看一段oom输出的错误在应用程序开发会出现内存泄露,如上述所示,杀死net_process进程信息。在内核中是如何处理的呢?...... 阅读详情

相关推荐

Linux服务器内存耗尽,Docker无法操作该怎么处理

今天我们来聊聊如何应对Linux服务器内存耗尽导致的Docker服务失效问题,并提供解决方案。希望通过这篇文章,不仅能帮你快速找到方法,还能带给你一些趣味,避免焦头烂额的同,学会用冷静和策略应对服务器崩溃的“危机”。

wjianwei666的专栏 143

Linux内存耗尽

也许你很少遇到这种情况,但是当你遇到的候就会知道哪里出错了。

feboak的博客 9779

Linux系统性能瓶颈:当物理内存和Swap都耗尽

我们的目的是深入了解在Linux系统里,当物理内存和Swap都用光的候,系统会遇到什么样的性能问题,以及怎么去解决这些问题。范围主要聚焦在Linux系统中内存相关的知识,包括物理内存和Swap的工作原理、耗尽的表现以及对应的处理方法。接下来,我们会先解释物理内存和Swap这些核心概念,再讲讲它们之间的关系。然后会介绍系统在内存耗尽的算法原理和操作步骤,用数学模型来分析问题。还会有项目实战,给大家展示实际的代码案例。之后会说说在哪些场景下会遇到这个问题,推荐一些有用的工具和资源。

操作系统内核探秘的博客 1294

linux内存和磁盘空间不足解决办法

linux内存和磁盘空间不足解决办法

qq_47150350的博客 1万+

如何处理Linux系统中内存不足的问题?

1. 首先,通过命令`free -m`查看当前Linux系统的内存使用情况,包括总内存数、已使用的内存数和空闲的内存数。- 清除回收slab分配器中的对象(包括目录项缓存和inode缓存):`echo 2 > /proc/sys/vm/drop_caches`- 清除pagecache和slab分配器中的缓存对象:`echo 3 > /proc/sys/vm/drop_caches`。6. 对于编译过程中出现的内存不足问题,除了上述方法外,也可以尝试优化编译参数,减小编译过程中的内存使用。

xu_yun_linux的博客 1339

java 缓存清理echo_如何在Linux上清理内存缓存、缓冲与交换空间详解

如何在Linux上清理内存缓存、缓冲与交换空间与其他类型的操作系统一样,GNU/Linux已经有效的实现了内存管理,甚至更加优秀。但是如果任何进程正在吃光你的内存,并且你想清理它,Linux提供了一种刷新或清除内存缓存的方法。如何在Linux中清除缓存?每个Linux系统都有三个选项可以在不中断任何进程或服务的情况下清除缓存。1 只清除页面缓存(pagecache)# sync; echo 1 &...

weixin_33344147的博客 991

Linux内存耗尽,改如何处理

内存不足会发生什么,结果很简单,linux内存用完了,无法申请缓冲区,内核会挑选进程将其杀死,一般情况下,杀死正在申请内存的程序。两个程序退出的原因都是因为空间不够了,然而程序1的退出因为malloc的失败,而程序2的退出则是因为内核所谓的oom killer 将其杀死了。出现内存耗尽的原因很简单,你申请的内存大小,超过了可用的虚拟内存的大小,注意是虚拟内存内存并不是唯一的,交换分区也可以提供内存)上面的程序运行一会就会出现oom,现在运行另外一个程序,不断申请内存,并且将其填充1。

m0_74282605的博客 1198

Linux下释放权限,Linux下swap耗尽该怎么办?如何释放swap?

Linux下交换内存耗尽如何查看及如何处理。以及查看shell脚本描述。交换内存不足,启动应用会报内存不足。1、启动应用内存不足,直接Linux命令行top查看下。swap used100%,0free。2、reboot服务器能有效的释放swap,可是很多情况下是不能重启服务器的。这就要弄明白是什么占着内存。查看下/proc目录下内容,发现很多数字命名的目录,这些就是Linux的进程了。...

weixin_42357256的博客 475

linux中swap目录是放什么的,Linux下swap耗尽该怎么办?如何释放swap?

Linux下交换内存耗尽如何查看及如何处理。以及查看shell脚本描述。交换内存不足,启动应用会报内存不足。启动应用内存不足,直接Linux命令行top查看下。swap used100%,0free。reboot服务器能有效的释放swap,可是很多情况下是不能重启服务器的。这就要弄明白是什么占着内存。查看下/proc目录下内容,发现很多数字命名的目录,这些就是Linux的进程了。要让进程...

weixin_42186015的博客 251

故障重现(内存篇1), JAVA进程内存不够突然挂掉模拟

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34344403的博客 248

线程没有分离导致内存资源耗尽

线程创建之后启动运行不做分离处理,在结束如果没有Join,则线程占用的资源不会释放。这种情况下,如果您的应用频繁启动新的线程,最终会导致内存资源消耗完毕。Linux系统在进程资源耗尽,会主动Kill掉该进程。 ...

GregCheng的专栏 720

Linux内存mem和 swap详解,设置mem不可交换到swap

Linux的物理内存快要被耗尽,系统会把一些进程占用的内存转移到 swap 区,当物理内存被释放一部分,swap 区的一些内存占用又慢慢回到 mem 区,但是 mem 区却不再是之前的负荷状态,而是有一部分 free 的内存!4)swap 是内存不够,磁盘虚拟出来的内存,磁盘主要是 I/O 级别的操作,并不是系统内核级别的操作,处理速度跟 mem 区不是一个等级。3)当 Men 区的资源进行释放,被挪到 swap 的内存并不会全部回来,随着系统或者程序的唤醒才会慢慢回到 mem 区。

ghx的博客 1221

linux 内存管理 (二) 内存的动态申请和释放

上一章我们了解到,我们所有的内存都是通过 buddy 算法来的,因为 buddy 是直面最底层的内存,它底下会拆分为 1页 2页 4页 8页 .....等等的内存组合。 申请内存,最底层的API ,都是buddy 级别的API ,get_free_pages page_alloc 都是 buddy级别的API ,但是 buddy 级别的申请都很大,最小都是1页, 我们在应用程序或者内核中,经常会用到 申请 16/32个字节,但是这样你底层给它申请1页,不就浪费了吗 基于这样的原理,l...

只有自己觉到悟到的,才是自己的。 3419

linux+mmap父子通信_77%的Linux运维人员都不懂的内核问题

前言之前在实习,听了 OOM 的分享之后,就对 Linux 内核内存管理充兴趣,但是这块知识非常庞大,没有一定积累,不敢写下,担心误人子弟,所以经过一个一段间的积累,对内核内存有一定了解之后,今天才写下这篇博客,记录以及分享。【OOM - Out of Memory】内存溢出内存溢出的解决办法:1、等比例缩小图片2、对图片采用软引用,及进行 recycle( ) 操作。3、使用加载图片框架...

weixin_32141253的博客 135

Linux系统卡死后紧急处理

前言:Linux系统卡死了的情况有很多,最常见的是系统负载过高导致的。还可以运行内存耗用极大的程序(如虚拟机),也会迅速提升系统负载。注意:不能再试图依赖任何图形界面的东西,如 Gnome的系统监视器,只会继续加重这种卡死的局面。有系统负载过大,程序不能及响应,很容易死机。个人用户强行关机再重启就OK。但是对于需要全天工作提供服务的服务器来说,强行关机不仅会导致服务器停止工作,同造成未同步的...

weixin_30929011的博客 1315

linux内核OOM源码分析

Out Of Memory(OOM),即内存耗尽,当系统中内存耗尽,如果不做处理,将处于崩溃的边缘,因为无内核资源可用,而系统运行刻都可能需要申请内存。这,内核需要采取一定的措施来防止系统崩溃,这就是我们熟知的OOM流程,其实就是要回收一些内存,而走到OOM流程,已经基本说明其它的回收内存的手段都已经尝试过了(比如回收cache),这里通常只能通过kill进程来回收内存了,而选择被kill...

nuistcc的专栏 1455

这些难搞的内存问题你都懂了吗?

关注、星标公众号,直达精彩内容作者:罗道文的私房菜http://luodw.cc/2016/08/13/linux-cache/前言之前在实习,听了 OOM 的分享之后,就对 Linux 内核内存管理充兴趣,但是这块知识非常庞大,没有一定积累,不敢写下,担心误人子弟,所以经过一个一段间的积累,对内核内存有一定了解之后,今天才写下这篇文章记录,分享。这篇文章主...

李肖遥的专栏 337
上一篇: 一文讲述,什么是pci总线原理?
下一篇: 一文搞懂 , Linux内核—— 同步管理(上)
csbmww
博客等级 码龄4年 29粉丝 43原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值