oom killer(Out of memory: Kill process 解决)

2024-05-11 09:00:08 :17

oom killer(Out of memory: Kill process 解决)

本文目录

Out of memory: Kill process 解决

环境:Centos7 现象:Linux测试服务器上部署了很多程序mysql、mongodb、java等等。程序操作mongodb经常进程被杀死的情况,导致业务中断,mongodb 的logs无提示信息。查看系统日志message后,发现对应时间点,系统自动kill掉了mongodb进程,如下 Out of memory: Kill process 5372 (mongod) score 130 or sacrifice child Killed process 5372 (mongod), UID 0, total-vm:2539052kB, anon-rss:2117096kB, file-rss:0kB, shmem-rss:0kB Linux 分配内存策略 Linux内核根据应用程序的要求来分配内存,由于进程实际上并不会将分配的内存全部使用,所以,为了提高性能,内核采用了一种过度分配内存(over-commit-memory)的策略,来间接利用进程的空闲内存,提高内存的使用效率。一般来说,这没问题。但如果大多数进程都耗光自己的内存,就有麻烦了。因此此时,所有应用程序的内存之和大于物理内存。所以,必须杀掉一部分进程,一般来说,是选内存占用最大的进程杀掉。 挑选原理 挑选的过程由linux/mm/oom_kill.c里的 oom_badness() 函数决定,挑选的算法很直接:是那个最占用内存的进程。 /** test 2334 1.6 2.1 623800 4876 ? Ssl 09:52 0:00 /usr/sbin/test 0 当然,也可以完全关闭 OOM killer,但线上生产环境最好不要这么做。 OOM_killer是Linux自我保护的方式,当内存不足时不至于出现太严重问题,有点壮士断腕的意味 在kernel 2.6,内存不足将唤醒oom_killer,挑出/proc/《pid》/oom_score最大者并将之kill掉 为了保护重要进程不被oom-killer掉,我们可以:echo -17 》 /proc/《pid》/oom_adj,-17表示禁用OOM 我们也可以对把整个 系统 的OOM给禁用掉: sysctl -w vm.panic_on_oom=1 (默认为0,表示开启) sysctl -p 值得注意的是,有些时候 free -m 时还有剩余内存,但还是会触发OOM-killer,可能是因为进程占用了特殊内存地址 平时我们应该留意下新进来的进程内存使用量,免得系统重要的业务进程被无辜牵连 可用 top M 查看最消耗内存的进程,但也不是进程一超过就会触发oom_killer 参数/proc/sys/vm/overcommit_memory可以控制进程对内存过量使用的应对策略 当overcommit_memory=0 允许进程轻微过量使用内存,但对于大量过载请求则不允许(默认) 当overcommit_memory=1 永远允许进程overcommit 当overcommit_memory=2 永远禁止overcommit 参考: https://www.cnblogs.com/yanqingxu/p/8316359.html

如何查看进程OOM killer

OOM Killer(Out of Memory Killer) 是当系统内存严重不足时 linux 内核采用的杀掉进程,释放内存的机制。

OOM Killer 通过检查所有正在运行的进程,然后根据自己的算法给每个进程一个 badness 分数,拥有最高 badness 分数的进程将会在内存不足时被杀掉。

它打分的算法如下:

  • 某一个进程和它所有的子进程都占用了很多内存的将会打一个高分。

  • 为了释放足够的内存来解决这种情况,将杀死最少数量的进程(最好是一个进程)。

  • 内核进程和其他较重要的进程会被打成相对较低的分。

上面打分的标准意味着,当 OOM killer 选择杀死的进程时,将选择一个使用大量内存,有很多子进程且不是系统进程的进程。

简单来讲,oom-killer 的原则就是损失最小、收益最大,因此它会让杀死的进程数尽可能小、释放的内存尽可能大。在数据库服务器上,MySQL 被分配的内存一般不会小,因此容易成为 oom-killer 选择的对象。

“既然发生了 OOM,那必然是内存不足,内存不足这个问题产生原因很多。

首先第一个就是 MySQL 自身内存的规划有问题,这就涉及到 mysql 相应的配置参数。

另一个可以想到的原因就是一般部署 MySQL 的服务器,都会部署很多的监控和定时任务脚本,而这些脚本往往缺少必要的内存限制,导致在高峰期的时候占用大量的内存,导致触发 Linux 的 oom-killer 机制,最终 MySQL 无辜躺枪牺牲。”

如何分析linux的oom-killer信息

-HUP是发送HUP信号给进程1234,然后标准输出重定向到killout.txt,标准错误重定向到killerr.txt,2是标准错误的file handler,1是标准输出

oom killer

Linux内核为了提高内存的使用效率采用过度分配内存(over-commit memory)的办法,造成物理内存过度紧张进而触发OOM机制来杀死一些进程回收内存。 该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽会把该进程杀掉。 Linux在内存分配路径上会对内存余量做检查,(1)如果检查到内存不足,则触发OOM机制。(2)OOM首先会对系统所有进程(出init和内核线程等特殊进程)进行打分,并选出最bad的进程;然后杀死该进程。(3)同时会触发内核oom_reaper进行内存收割。(4)同时内核还提供了sysfs接口系统OOM行为,以及进程OOM行为。然后借用一个示例来分析OOM时内存状态。 1. 关于OOM 内核检测到系统内存不足,在内存分配路径上触发 out_of_memory() ,然后调用 select_bad_process() 选择一个’bad’进程 oom_kill_process() 杀掉,判断和选择一个‘bad’进程的过程由 oom_badness() 决定。 Linux下每个进程都有自己的OOM权重,在/proc/《pid》/oom_adj里面,范围是-17到+15,取值越高,越容易被杀掉。 2. OOM触发路径 在内存分配路径上,当内存不足的时候会触发kswapd、或者内存规整,极端情况会触发OOM,来获取更多内存。 在内存回收失败之后,__alloc_pages_may_oom是OOM的入口,但是主要工作在out_of_memory中进行处理。 由于Linux内存都是以页为单位,所以__alloc_pages_nodemask是必经之处。 static inline struct page * __alloc_pages_may_oom(gfp_t gfp_mask, unsigned int order,     const struct alloc_context *ac, unsigned long *did_some_progress) {     struct oom_control oc = {---------------------------------------------------------OOM控制参数。         .zonelist = ac-》zonelist,         .nodemask = ac-》nodemask,         .memcg = NULL,         .gfp_mask = gfp_mask,         .order = order,     };     struct page *page;     *did_some_progress = 0;     /*     * Acquire the oom lock.  If that fails, somebody else is     * making progress for us.     */     if (!mutex_trylock(&oom_lock)) {         *did_some_progress = 1;         schedule_timeout_uninterruptible(1);         return NULL;     }     page = get_page_from_freelist(gfp_mask | __GFP_HARDWALL, order,                     ALLOC_WMARK_HIGH|ALLOC_CPUSET, ac);-----------------------------再次使用高水位检查一次,是否需要启动OOM流程。     if (page)         goto out;     if (!(gfp_mask & __GFP_NOFAIL)) {----------------------------------------------__GFP_NOFAIL是不允许内存申请失败的情况,下面都是允许失败的处理。         /* Coredumps can quickly deplete all memory reserves */         if (current-》flags & PF_DUMPCORE)             goto out;         /* The OOM killer will not help higher order allocs */         if (order 》 PAGE_ALLOC_COSTLY_ORDER)---------------------------------------order超过3的申请失败,不会启动OOM回收。             goto out;         /* The OOM killer does not needlessly kill tasks for lowmem */         if (ac-》high_zoneidx 《 ZONE_NORMAL)             goto out;         if (pm_suspended_storage())             goto out;         /* The OOM killer may not free memory on a specific node */         if (gfp_mask & __GFP_THISNODE)             goto out;     }     /* Exhausted what can be done so it’s blamo time */     if (out_of_memory(&oc) || WARN_ON_ONCE(gfp_mask & __GFP_NOFAIL)) {-------------经过上面各种情况,任然需要进行OOM处理。调用out_of_memory()。         *did_some_progress = 1;         if (gfp_mask & __GFP_NOFAIL) {             page = get_page_from_freelist(gfp_mask, order,                     ALLOC_NO_WATERMARKS|ALLOC_CPUSET, ac);-------------------------对于__GFP_NOFAIL的分配情况,降低分配条件从ALLOC_WMARK_HIGH|ALLOC_CPUSET降低到ALLOC_NO_WATERMARKS|ALLOC_CPUSET。             /*             * fallback to ignore cpuset restriction if our nodes             * are depleted             */             if (!page)                 page = get_page_from_freelist(gfp_mask, order,                     ALLOC_NO_WATERMARKS, ac);--------------------------------------如果还是分配失败,再次降低分配标准,从ALLOC_NO_WATERMARKS|ALLOC_CPUSET降低到ALLOC_NO_WATERMARKS。真的是为了成功,节操越来越低啊。         }     } out:     mutex_unlock(&oom_lock);     return page; } 4.3 OOM处理:对进程打分以及杀死最高评分进程 out_of_memory函数是OOM机制的核心,他可以分为两部分。一是调挑选最’bad‘的进程,二是杀死它。 bool out_of_memory(struct oom_control *oc) {     unsigned long freed = 0;     enum oom_constraint constraint = CONSTRAINT_NONE;     if (oom_killer_disabled)----------------------------------------------------在freeze_processes会将其置位,即禁止OOM;在thaw_processes会将其清零,即打开OOM。所以,如果在冻结过程,不允许OOM。         return false;     if (!is_memcg_oom(oc)) {         blocking_notifier_call_chain(&oom_notify_list, 0, &freed);         if (freed 》 0)             /* Got some memory back in the last second. */             return true;     }     if (task_will_free_mem(current)) {----------------------------------------如果当前进程正因为各种原因将要退出,或者释放内存,将当前进程作为OOM候选者,然后唤醒OOM reaper去收割进而释放内存。         mark_oom_victim(current);         wake_oom_reaper(current);         return true;---------------------当前进程由于自身原因将要推出,OOM则将其标注为TIF_MEMDIE状态;然后唤醒OOM Reaper去处理。不需要经过下面的打分和杀死流程。     }     if (oc-》gfp_mask && !(oc-》gfp_mask & (__GFP_FS|__GFP_NOFAIL)))-----------如果内存申请掩码包括__GFP_DS或__GFP_NOFAIL,则不进行OOM收割。         return true;     constraint = constrained_alloc(oc);--------------------------------------未定义CONFIG_NUMA返回CONSTRAINT_NONE。     if (constraint != CONSTRAINT_MEMORY_POLICY)         oc-》nodemask = NULL;     check_panic_on_oom(oc, constraint);--------------------------------------检查sysctl_panic_on_oom设置,以及是否由sysrq触发,来决定是否触发panic。     if (!is_memcg_oom(oc) && sysctl_oom_kill_allocating_task &&--------------如果设置了sysctl_oom_kill_allocating_task,那么当内存耗尽时,会把当前申请内存分配的进程杀掉。         current-》mm && !oom_unkillable_task(current, NULL, oc-》nodemask) &&         current-》signal-》oom_score_adj != OOM_SCORE_ADJ_MIN) {         get_task_struct(current);         oc-》chosen = current;         oom_kill_process(oc, "Out of memory (oom_kill_allocating_task)");         return true;     }     select_bad_process(oc);-------------------------------------------------遍历所有进程,进程下的线程,查找合适的候选进程。即得分最高的候选进程。     /* Found nothing?!?! Either we hang forever, or we panic. */     if (!oc-》chosen && !is_sysrq_oom(oc) && !is_memcg_oom(oc)) {------------如果没有合适候选进程,并且OOM不是由sysrq触发的,进入panic。         dump_header(oc, NULL);         panic("Out of memory and no killable processes...\n");     }     if (oc-》chosen && oc-》chosen != (void *)-1UL) {         oom_kill_process(oc, !is_memcg_oom(oc) ? "Out of memory" :                 "Memory cgroup out of memory");----------------------------杀死选中的进程。         schedule_timeout_killable(1);     }     return !!oc-》chosen; }select_bad_process()通过oom_evaluate_task()来评估每个进程的得分,对于进程1、内核线程、得分低的进程直接跳过。 static void select_bad_process(struct oom_control *oc) {     if (is_memcg_oom(oc))         mem_cgroup_scan_tasks(oc-》memcg, oom_evaluate_task, oc);     else {         struct task_struct *p;         rcu_read_lock();         for_each_process(p)----------------------------------------------遍历系统范围内所有进程线程。             if (oom_evaluate_task(p, oc))                 break;         rcu_read_unlock();     }     oc-》chosen_points = oc-》chosen_points * 1000 / oc-》totalpages; } static int oom_evaluate_task(struct task_struct *task, void *arg) {     struct oom_control *oc = arg;     unsigned long points;     if (oom_unkillable_task(task, NULL, oc-》nodemask))-------------------进程1以及内核线程等等不能被kill的线程跳过。         goto next;     if (!is_sysrq_oom(oc) && tsk_is_oom_victim(task)) {         if (test_bit(MMF_OOM_SKIP, &task-》signal-》oom_mm-》flags))             goto next;         goto abort;     }     if (oom_task_origin(task)) {         points = ULONG_MAX;         goto select;     }     points = oom_badness(task, NULL, oc-》nodemask, oc-》totalpages);------对进程task进行打分。     if (!points || points 《 oc-》chosen_points)---------------------------这里保证只取最高分的进程,所以分数最高者被选中。其他情况则直接跳过。         goto next;     /* Prefer thread group leaders for display purposes */     if (points == oc-》chosen_points && thread_group_leader(oc-》chosen))         goto next; select:     if (oc-》chosen)         put_task_struct(oc-》chosen);     get_task_struct(task);     oc-》chosen = task;--------------------------------------------------更新OOM选中的进程和当前最高分。     oc-》chosen_points = points; next:     return 0; abort:     if (oc-》chosen)         put_task_struct(oc-》chosen);     oc-》chosen = (void *)-1UL;     return 1; } 在oom_badness()中计算当前进程的得分,返回选中进程的结构体,以及进程得分ppoints。 oom_badness()是给进程打分的函数,可以说是核心中的核心。最终结果受oom_score_adj和当前进程内存使用量综合影响。 oom_score_adj为OOM_SCORE_ADJ_MIN的进程不参加评选。进程的oom_score_adj值在/proc/xxx/oom_score_adj中。 mm-》flags为MMF_OOM_SKIP的进程不参加评选。 处于vfork()中的进程不参加评选。 进程的得分取决于其消耗的RSS部分内存(文件映射内存MM_FILEPAGES、匿名映射内存MM_ANONPAGES、shmem内存MM_SHMEMPAGES)、匿名交换内存MM_SWAPENTS、PTE页表所占内存、PMD页表所占内存。 具有root权限的进程只取其97%的得分参加评选。 所以进程得分points=process_pages + oom_score_adj*totalpages/1000;如果是root权限的进程points=process_pages*0.97 + oom_score_adj*totalpages/1000。 在oom_score_adj都为0(默认值)的情况下,最终得分跟进程自身消耗的内存有关;消耗的内存越大越容易被Kill。 oom_score_adj每降低1,可以多获得系统内存资源的1/1000使用量。反之,每增加1,则少获得系统内存资源1/1000使用量。 unsigned long oom_badness(struct task_struct *p, struct mem_cgroup *memcg,               const nodemask_t *nodemask, unsigned long totalpages) {     long points;     long adj;     if (oom_unkillable_task(p, memcg, nodemask))-------------------------------如果进程不可被杀,直接跳过。         return 0;     p = find_lock_task_mm(p);------------找到进程p,并使用task_lock()锁上。     if (!p)         return 0;     /*     * Do not even consider tasks which are explicitly marked oom     * unkillable or have been already oom reaped or the are in     * the middle of vfork     */     adj = (long)p-》signal-》oom_score_adj;--------------------------------------获取当前进程的oom_score_adj参数。     if (adj == OOM_SCORE_ADJ_MIN ||             test_bit(MMF_OOM_SKIP, &p-》mm-》flags) ||             in_vfork(p)) {         task_unlock(p);         return 0;--------------------------------------------------------------如果当前进程oom_score_adj为OOM_SCORE_ADJ_MIN的话,就返回0.等于告诉OOM,此进程不参数’bad’评比。     }     /*     * The baseline for the badness score is the proportion of RAM that each     * task’s rss, pagetable and swap space use.     */     points = get_mm_rss(p-》mm) + get_mm_counter(p-》mm, MM_SWAPENTS) +         atomic_long_read(&p-》mm-》nr_ptes) + mm_nr_pmds(p-》mm);-----------------可以看出points综合了内存占用情况,包括RSS部分、swap file或者swap device占用内存、以及页表占用内存。     task_unlock(p);     /*     * Root processes get 3% bonus, just like the __vm_enough_memory()     * implementation used by LSMs.     */     if (has_capability_noaudit(p, CAP_SYS_ADMIN))------------------------------如果是root用户,增加3%的使用特权。         points -= (points * 3) / 100;     /* Normalize to oom_score_adj units */     adj *= totalpages / 1000;--------------------------------------------------这里可以看出oom_score_adj对最终分数的影响,如果oom_score_adj小于0,则最终points就会变小,进程更加不会被选中。     points += adj;-------------------------------------------------------------将归一化后的adj和points求和,作为当前进程的分数。     /*     * Never return 0 for an eligible task regardless of the root bonus and     * oom_score_adj (oom_score_adj can’t be OOM_SCORE_ADJ_MIN here).     */     return points 》 0 ? points : 1; }https://www.cnblogs.com/arnoldlu/p/8567559.html#oom_badness

如何优雅地使用Linux系统OOM ( Out Of Memory Killer)

Linux内核根据服务器上当前运行应用的需要来分配内存。因为这通常是预先发生的,所以应用并不会使用所有分配的内存。这将会导致资源浪费,Linux内核允许超分内存以提高内存使用效率。Linux内核允许超分内存,比如总共8G内存,可以分给10个进程各1G,这通常没问题。但问题发生在太多应用一起占用内存,有8个进程各占了1G,剩下两个进程要喝西北风了。 由于内存不足,服务器有崩溃的风险。The  server runs the risk of crashing because it  ran out of memory。为了防止服务器到达这个临近状态,内核中有一个OOM Killer杀手进程。To prevent the server from reaching  that critical state, the kernel also contains a process known as the OOM Killer。内核利用这个杀手进程开始屠杀那些非必要进程,以便服务器正常运行。The kernel uses this  process to start killing non-essential  processes so the server can remain  operational. 当你认为这一切都不是问题时,因为OOM Killer只杀掉那些非必要的,不是用户需要的进程。举例,两个应用(Apache和MySQL)通常先被杀掉,因为占用大量的内存。但这将导致一个web网站立马瘫痪了。 当尝试找到为什么一个应用程序或进程被OOM killer杀掉时,有很多地方可以找到一个进程如何被杀掉以及被杀掉的原因。 $ grep -i kill /var/log/messages* host kernel: Out of Memory: Killed process 5123 (exampleprocess) The capital K in Killed tells you that the process was killed with a -9 signal, and this typically is a good indicator that the OOM Killer is to blame. $ free -lhThe -l switch shows high and low memory  statistics, and the -h switch puts the output  into gigabytes for easier human readability. You can change this to the -m switch if you  prefer the output in megabytes. 同时该命令会给出Swap内存使用信息。注意:free命令给出某个时刻得数据,需要多执行几次才能知道内存动态的占用情况。$ vmstat -SM 10 20 20次,每次间隔10秒给出内存使用情况。 top 默认输出CPU的使用情况,不过你可以在top后再按下shift + M,你将得到内存的使用情况。配置文件/etc/sysctl.conf: sysctl vm.panic_on_oom=1 sysctl kernel.panic=X echo “vm.panic_on_oom=1” 》》 /etc/sysctl.conf echo “kernel.panic=X” 》》 /etc/sysctl.conf 大多数情况下,内存不足时每次都重启是不合适的。 既可以保护一些重要进程不被OMM killer杀掉,又可以让不重要的进程更容易杀掉: echo -15 》 /proc/(PID)/oom_adj (不被杀) echo 10 》 /proc/(PID)/oom_adj (更易杀) pstree -p | grep "process" | head -1 在某些情况下,豁免进程可能导致意外的行为变化,取决于系统和资源配置。假如内核无法杀死一个占用大量内存的进程,将杀死其他进程,包括那些重要的操作系统进程。 由于OOM killer可调节的有效范围在-16到+15之间,设置为-17将豁免一个进程,因为在OOM killer调节范围之外。通常的规则是这个参数越大越容易被杀死豁免一个进程的命令是 echo -17 》 /proc/(PID)/oom_adj 警告:不建议用于生产环境。 假如重启,修改进程优先级,豁免一个进程不足够好,有个风险的选项:将oom killer 功能关闭。 这一选项参数将有如下影响: 4.1) 严重的内核恐慌kernel panic 4.2) 系统挂住system hang-up 4.3) 一个完整的系统崩溃system crash 为什么关闭有风险呢呢?该功能避免自己因资源而跑飞了。如果你关闭此功能,将不能避免内存耗尽。考虑此项时请极度慎重。 sysctl vm.overcommit_memory=2 echo “vm.overcommit_memory=2” 》》 /etc/sysctl.conf

Linux进程突然被杀掉(OOM killer),查看系统日志

一个命令: 这个命令需要用户处于root权限才能看,执行之后可以看到: 简单说一下: total-vm就是进程使用的虚拟内存大小,其中部分内容映射到RAM本身,也就是主存,被分配和使用也就成了RSS。 部分RSS在实际内存块里面分配,成了anon-rss,叫做匿名内存。还有映射到设备和文件的RSS内存卡,叫做file-rss。 比如说: 你用vim指令打开一个巨大的文件,那么file-rss将会很高。 如果你用malloc()动态分配很大部分的内存,并且真的使用了它,那么anon-rss也会很高。 但是!!如果你使用malloc()分配了大量的内存,但是不去用它!那么total-vm将会变得更高,但是因为内存过量使用,不会使用真正的内存,那么rss值会很低。 可以看到上述信息,发现进程被杀掉了。 那么杀掉它的原因是什么呢? 首先确定,当报出OOM的时候,系统的内存已经不足了,于是linux会决定杀掉进程,但是linux采用的策略并非是杀掉最占用内存的进程(Android是这样)。 linux会给每个进程评分:oom_score 根据这个评分去kill,决定这个分数的因素除了内存占用大小之外,还有内存增加的速率,比如说kylin,当执行Task构建Cube的时候,内存的占用会突然爆发式增长!发现这时候的分数老高了!然后就把它kill了。 https://stackoverflow.com/questions/18845857/what-does-anon-rss-and-total-vm-mean

linux oom 内存超过多少会被kill

OOM_killer是Linux自我保护的方式,当内存不足时不至于出现太严重问题,有点壮士断腕的意味在kernel 2.6,内存不足将唤醒oom_killer,挑出/proc/《pid》/oom_score最大者并将之kill掉 为了保护重要进程不被oom-killer掉,我们可以:echo -17 》 /proc/《pid》/oom_adj,-17表示禁用OOM我们也可以对把整个系统的OOM给禁用掉:sysctl -w vm.panic_on_oom=1 (默认为0,表示开启)sysctl -p 值得注意的是,有些时候 free -m 时还有剩余内存,但还是会触发OOM-killer,可能是因为进程占用了特殊内存地址 平时我们应该留意下新进来的进程内存使用量,免得系统重要的业务进程被无辜牵连可用 top M 查看最消耗内存的进程,但也不是进程一超过就会触发oom_killer参数/proc/sys/vm/overcommit_memory可以控制进程对内存过量使用的应对策略当overcommit_memory=0 允许进程轻微过量使用内存,但对于大量过载请求则不允许(默认)当overcommit_memory=1 永远允许进程overcommit当overcommit_memory=2 永远禁止overcommitref:http://www.2cto.com/os/201309/247081.html

linux出现out of memory是什么问题

有两种方法可以解决这个问题1、如果可能,请升级到64位系统。这是最好的解决办法,因为所有的内存都将成为low memory。如果你在这种情况下耗尽了low memory,那就真的是out of memory了。2、如果受限于必须使用32位系统,最好的解决办法是使用hugemem内核。这种内核以不同的方式分割low/high memory,而且在大多数情况下会提供足够多的low memory到high memory的映射。在大多数案例中,这是一个很简单的修复方法:安装hugemem kernel RPM包,然后重启即可。如果运行hugemem内核也不可能,你可以尝试将/proc/sys/vm/lower_zone_protection 的值设置为250甚至更多。这将让内核愿意保护low memory,从而在分配内存时多考虑从high memory分配。据我所知,此选项从2.6.x内核才开始可用。必要的是,您可能需要通过一些实验来找到您系统环境中最适合的值。可以使用下面方法快速的设置和检查改值: # cat /proc/sys/vm/lower_zone_protection # echo "250" 》 /proc/sys/vm/lower_zone_protection 在 /etc/sysctl.conf 中加入设置,以便启动就生效:vm.lower_zone_protection = 250作为最后的努力,你可以关闭oom-killer。这个选项可以导致系统挂起,所以请小心使用(风险自负)!查看当前oom-killer的状态: # cat /proc/sys/vm/oom-kill 关闭/打开oom-killer: # echo "0" 》 /proc/sys/vm/oom-kill # echo "1" 》 /proc/sys/vm/oom-kill 当进程该被oom-killer杀死却没有被杀死时,相关信息会记录到 /var/log/messages:"Would have oom-killed but /proc/sys/vm/oom-kill is disabled"

oom killer(Out of memory: Kill process 解决)

本文编辑:admin
oom killer ,memo

更多文章:


三星手机fold4(三星fold4怎么关机)

三星手机fold4(三星fold4怎么关机)

本文目录三星fold4怎么关机三星fold2和fold4屏幕区别三星fold4韩版跟国行的区别三星fold4怎么截屏图片三星fold4怎么关机可以长按三星折叠手机fold的电源键(开关机),知道屏幕出现关机按钮,点击即可关机。三星fold4

2024年6月12日 01:00

米10是什么时候上市的了(小米10是什么时候上市的)

米10是什么时候上市的了(小米10是什么时候上市的)

本文目录小米10是什么时候上市的小米6到小米10几年小米10什么时候发布上市小米10什么时候上市小米十什么时候能出小米10出来多久了小米10是什么时候上市的小米10的上市时间为2020年2月13日。小米10是小米公司旗下的一款手机,小米称这

2024年9月17日 01:10

n700a系新干线(新干线N700与700系有什么区别,N代表什么)

n700a系新干线(新干线N700与700系有什么区别,N代表什么)

本文目录新干线N700与700系有什么区别,N代表什么日本新干线有发生过哪些重大高铁安全事故吗现在的高铁最快的记录是多少N700系的构造N700系的简介日本新干线的速度是多少中国高铁与日本新干线轨距是否一致东京去大阪的新干线问题 追加分~新

2024年9月13日 14:00

oneplus是什么品牌手机产地(一加是什么国家的品牌)

oneplus是什么品牌手机产地(一加是什么国家的品牌)

本文目录一加是什么国家的品牌oneplus是什么牌子1加手机是哪个国家的 1加手机是哪个国家的品牌oneplus是什么品牌手机一加手机是哪个国家的一加手机是哪个公司生产的一加是什么国家的品牌一加是中国手机品牌。一加手机成立于2013年,总部

2024年10月27日 12:10

怎么给电脑装两个系统(如何给电脑装两个系统)

怎么给电脑装两个系统(如何给电脑装两个系统)

如是两系统的安装盘都是带启动光盘可以不准备启动盘,如是两系统的安装盘都是带启动光盘可以不准备启动盘,而且盘符按F、G、H、I…这样排下去 用到的软件 DiskGenius 问题九:电脑如何做成双系统?如何备份? 你的问题是:双

2024年3月25日 17:00

百元以内的手机推荐(有没有比较好用的几百块钱的智能手机求推荐!谢谢!)

百元以内的手机推荐(有没有比较好用的几百块钱的智能手机求推荐!谢谢!)

本文目录有没有比较好用的几百块钱的智能手机求推荐!谢谢!几百块的手机哪款好用几百元手机排行榜几百块钱的小屏手机,方便携带,且性能够用的手机有哪些这几款几百元的手机,用个一两年不是问题,都是百元神机有没有比较好用的几百块钱的智能手机求推荐!谢

2024年5月26日 07:30

奔驰gl450油耗多少(08年奔驰gl450油耗)

奔驰gl450油耗多少(08年奔驰gl450油耗)

本文目录08年奔驰gl450油耗2022款加版奔驰gls450油耗奔驰gls450开到20个油耗奔驰gle4500的耗油多少奔驰GLS450 3.0T汽油百公里油耗多少奔驰gl450和gl550油耗15款奔驰gl450口碑怎么样奔驰GLS4

2024年5月9日 02:00

dell1440配置(dellInspiron1440可以更换CPU吗应该怎样选择)

dell1440配置(dellInspiron1440可以更换CPU吗应该怎样选择)

戴尔Inspiron 灵越 1440(202)采用了Intel酷睿2双核T6600处理器(2.2GHz主频/2MB二级缓存/800MHz前端总线),戴尔Inspiron 灵越 1440(202)采用了Intel酷睿2双核T6600处理器(2

2024年3月31日 10:20

努比亚z7系列(努比亚Z7怎么拍星轨 nubia Z7系列手机拍摄星轨教程)

努比亚z7系列(努比亚Z7怎么拍星轨 nubia Z7系列手机拍摄星轨教程)

本文目录努比亚Z7怎么拍星轨 nubia Z7系列手机拍摄星轨教程努比亚Z7mini与Z9mini详细对比测评 值得买吗中兴努比亚z7的参数努比亚Z7系列真双4g吗努比亚Z7性比价怎么样努比亚Z7是4G手机吗努比亚Z7,Z7max和Z7mi

2024年9月20日 22:20

机械硬盘温度多少度正常?硬盘温度多少正常

机械硬盘温度多少度正常?硬盘温度多少正常

本文目录机械硬盘温度多少度正常硬盘温度多少正常电脑主板,CPU和硬盘温度是多少才算正常硬盘的温度正常的硬盘温度是多少笔记本硬盘温度达到60度sas硬盘温度西部数据2TB红盘出现坏道,求解决方法!机械硬盘温度多少度正常机械硬盘是一种电脑存储设

2024年10月16日 14:00

苹果7手机发烫是什么原因(请问苹果7手机用一会儿发烫什么原因)

苹果7手机发烫是什么原因(请问苹果7手机用一会儿发烫什么原因)

本文目录请问苹果7手机用一会儿发烫什么原因苹果7聊天手机发烫怎么办苹果7充电时打视频发烫怎么回事苹果7发烫是什么原因造成的苹果7手机电池发烫怎么回事苹果7发烫严重怎么办苹果7手机发烫怎么解决请问苹果7手机用一会儿发烫什么原因iPhone7发

2024年10月2日 03:30

索爱收款软件下载(索爱x8手机详细使用方法及软件下载方法)

索爱收款软件下载(索爱x8手机详细使用方法及软件下载方法)

本文目录索爱x8手机详细使用方法及软件下载方法索爱收款app老是出现广告索爱u1i下载软件索爱x8手机详细使用方法及软件下载方法直接点击安装就会自动把程序装在手机上了需要下载的软件,下载成功后点击安装,就直接安装在手机上了。如果需要找app

2024年5月13日 07:30

努比亚红魔5g评测(红魔5G这款游戏手机的处理器如何)

努比亚红魔5g评测(红魔5G这款游戏手机的处理器如何)

本文目录红魔5G这款游戏手机的处理器如何红魔5G手机的配置有多高红魔5G这款游戏手机的处理器如何努比亚这个品牌并不是每一个消费者都熟知,知道的往往都是手机迷,只是今年一款努比亚旗下的红魔5G成为市场的爆款,同时也扩大的努比亚的影响力。红魔5

2024年6月14日 18:30

sd卡无法删除文件和格式化(SD卡无法删除和格式化,请问怎么办)

sd卡无法删除文件和格式化(SD卡无法删除和格式化,请问怎么办)

本文目录SD卡无法删除和格式化,请问怎么办micro sd卡不能删除和格式化怎么办手机SD卡无法删除文件和格式化,怎么办为什么SD卡里的文件无法删除手机存储卡内容不能删除不了怎么办SD卡无法删除文件和格式化SD卡不能删除和格式化怎么办SD卡

2024年4月27日 23:10

开博尔c9四核刷机详细教程(开博尔c9八核安卓4.4怎么升级到6.0)

开博尔c9四核刷机详细教程(开博尔c9八核安卓4.4怎么升级到6.0)

本文目录开博尔c9八核安卓4.4怎么升级到6.0开博尔c9 变成2.2版本后怎么刷机开博尔C9怎么才能不ROOT删内置软件开博尔c9八核怎样获取 root授权开博尔机顶盒如何ROOT开博尔c9八核安卓4.4怎么升级到6.0手机若有了新的固件

2024年9月25日 06:00

小米play解账户锁(小米账号锁了,密码忘记了,怎么解啊)

小米play解账户锁(小米账号锁了,密码忘记了,怎么解啊)

输入正在使用的小米账号和密码点击“确定”,输入正在使用的“小米账号”和“密码”点击确定,小米手机忘记了账号密码怎么解锁方案一:在电脑端访问 i.xiaomi.com,小米手机账号被锁如何解锁小米账号锁住手机可以通过注销账号的方式来解除,小米

2024年3月22日 00:30

神舟笔记本怎么连接无线网(神舟笔记本怎么打开wifi)

神舟笔记本怎么连接无线网(神舟笔记本怎么打开wifi)

本文目录神舟笔记本怎么打开wifi神舟笔记本的无线网怎么用神舟笔记本怎么连接无线网络上网神舟笔记本电脑无线网络设置神州笔记本打开无线网络的快捷键是什么神舟笔记本电脑wifi,连接不上了,怎么办神舟笔记本电脑怎么连接wifi神舟战神的无线网卡

2024年9月12日 23:50

红米11pro价格一览表(红米+Note11pro换个外屏多少钱)

红米11pro价格一览表(红米+Note11pro换个外屏多少钱)

本文目录红米+Note11pro换个外屏多少钱红米note11pro充电口换多少钱红米Note11 Pro手机,大家觉得有哪些优势呢小米note11pro二手价格闲鱼到处都是红米11pro手机才1000元有什么猫腻红米+Note11pro换

2024年11月22日 23:20

康佳强制恢复出厂设置(康佳电视强制恢复出厂设置)

康佳强制恢复出厂设置(康佳电视强制恢复出厂设置)

康佳电视怎么强制恢复出厂设置康佳电视强制恢复出厂设置怎么操作,选好之后按下电源键确定即可清除所有数据恢复出厂设置即可,具体步骤:1、电视机恢复出厂设置需要用遥控器在电视上进行操作,康佳电视强制恢复出厂设置直接通过电视机的显示屏操作,2、 选

2024年2月23日 22:20

华硕k45vd拆机教程(华硕K45vd怎么拆机)

华硕k45vd拆机教程(华硕K45vd怎么拆机)

本文目录华硕K45vd怎么拆机华硕K45VD怎么拆机清理灰尘,好长时间了华硕K455LD4210后盖怎么拆华硕K45VD笔记本拆机教程是什么华硕x450v键盘拆卸教程(华硕x45vd拆键盘教程)华硕笔记本电脑K45VD主机电池在哪华硕A55

2024年9月21日 18:50