如何在OOM杀手杀戮或Linux上的内存低之前得到通知?

时间:2014-05-05 09:12:34

标签: linux memory-management kernel

当我的应用程序使用太多内存或系统内存不足时,我想从linux系统收到通知。我做了一些搜索,一些解决方案需要修补内核并观察文件,如/ dev / MEM-通知。 是否有标准系统信号发送到应用程序?我正在使用GTK2.0,有没有GTK方法来解决这个问题?

3 个答案:

答案 0 :(得分:1)

一种方法是运行查找内存不足情况的脚本并提醒您。本文有几个不错的脚本:https://askubuntu.com/questions/234292/warning-when-available-ram-approaches-zero

该文章中的代码需要针对您使用的任何Linux风格进行修改(它假设是桌面ubuntu),但它是一个有用的起点:

#!/bin/bash

#Minimum available memory limit, MB
THRESHOLD=400

#Check time interval, sec
INTERVAL=30

while :
do

    free=$(free -m|awk '/^Mem:/{print $4}')
    buffers=$(free -m|awk '/^Mem:/{print $6}')
    cached=$(free -m|awk '/^Mem:/{print $7}')
    available=$(free -m | awk '/^-\/+/{print $4}')

    message="Free $free""MB"", buffers $buffers""MB"", cached $cached""MB"", available $available""MB"""

    if [ $available -lt $THRESHOLD ]
        then
        ### MODIFY THIS NOTIFICATION METHOD FOR YOUR OS 
        notify-send "Memory is running out!" "$message"
    fi

    echo $message

    sleep $INTERVAL

done

答案 1 :(得分:1)

最近的内核不再发送SIGTERM了。只有SIGKILL被发送到该进程。因此,无法从内核接收触发器。

答案 2 :(得分:0)

也许这会有所帮助:https://www.kernel.org/doc/gorman/html/understand/understand016.html

  

13.4杀死所选程序

     

选择任务后,将再次遍历列表和每个进程   与所选进程共享相同的mm_struct(即它们是   线程)发送一个信号。如果进程有CAP_SYS_RAWIO   功能,SIGTERM被发送给进程一个机会   干净利落地退出,否则发送SIGKILL。

可以挂钩SIGTERM而不是SIGKILL。无论如何,如果OOM杀手正在运行,你就会遇到更大的问题。

或许也许您可以自我监控应用程序的内存密集度,如果它太高则退出。