2014-05-05 35 views
0

當我的應用程序使用的內存太多或系統內存不足時,我想從linux系統收到通知。我已經完成了一些搜索,有些解決方案需要修補內核並觀察文件,例如/ dev/mem -通知。 是否有標準系統信號發送給應用程序?我正在使用GTK2.0,有GTK方式來解決這個問題嗎?如何在Linux上使用OOM殺手或內存不足時收到通知?

回答

0

也許這將是有益的:https://www.kernel.org/doc/gorman/html/understand/understand016.html

13.4查殺選擇的過程

一旦選定一個任務,列表走了一遍,每個進程 共享相同的mm_struct作爲選擇的過程(即它們是 線程)發送了一個信號。如果進程具有CAP_SYS_RAWIO 功能,則會發送SIGTERM以使進程有機會退出乾淨,否則會發送SIGKILL。

可以鉤住SIGTERM而不是SIGKILL。無論如何,如果OOM殺手正在運行,你會遇到更大的問題。

或者,您可以自行監控應用程序的內存密集度,如果過高,請退出。

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

最近的內核不再發送SIGTERM。只有SIGKILL被髮送到進程。因此,從內核收到觸發器是沒有辦法的。

相關問題