যখন উপলব্ধ র‌্যাম শূন্যের কাছাকাছি আসে তখন সতর্কতা


13

ওএস ক্র্যাশ করতে পারে এমন লোভী অ্যাপ্লিকেশনগুলির জন্য এটি মেমোরি সীমাবদ্ধ সমাধানগুলির ফলোআপ ? : ইউলিমিট এবং সিগ্রুপগুলি ব্যবহারকারী বান্ধব নয় এবং এর পাশাপাশি প্রতিটি নতুন (গ্রুপের) ট্যাবগুলির জন্য ক্রোম / ক্রোমিয়ামের মতো পৃথক প্রক্রিয়াগুলি তৈরি করা অ্যাপ্লিকেশনগুলির সাথে কাজ করবে না।

উইন্ডোজ by দ্বারা বাস্তবে ব্যবহৃত সহজ এবং কার্যকর সমাধানটি হ'ল মেমরির ওএস কম চলছে বলে ব্যবহারকারীকে সতর্ক করে দেওয়া। এই সাধারণ সতর্কতা পপ-আপটি আমাকে উইন্ডোজে লো-মেমোরিজনিত সিস্টেম হিমায়িত করতে বাধা দিয়েছে, আমি উবুন্টু ডিস্ট্রোজে তাদের চালিয়ে যেতে থাকি যে আমি লাইভ পরীক্ষা করছি (যেখানে র‌্যাম মাউন্টযুক্ত ডিস্কটি কেবলমাত্র 2 জিবি খায়)।

সুতরাং, ব্যবহারকারীকে স্বয়ংক্রিয়ভাবে সতর্ক করার কোনও উপায় আছে যে উপলব্ধ র‌্যাম শূন্যের কাছাকাছি চলেছে, ব্যবহারকারীকে কিছু স্মৃতি মনিটরিং গ্যাজেটের দিকে নজর রাখেনি? নিশ্চয়ই কঙ্কি তা করতে কনফিগার করা যায়?


2
চার বছর পরে দেখে মনে হচ্ছে পর্যায়ক্রমে চেকিংয়ের free -mউপায়।
ড্যান ড্যাসকলেসকু

উত্তর:


8

এই স্ক্রিপ্টগুলি পরীক্ষা করুন: সিস্টেমের মেমরিটি শেষ হয়ে গেলে অ্যাপ্লিকেশন / স্ক্রিপ্ট সতর্কতা দরকার

#!/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
        notify-send "Memory is running out!" "$message"
    fi

    echo $message

    sleep $INTERVAL

done

পিএইচপি:

#!/usr/bin/php
<?php
$alert_percent=($argc>1)?(int)$argv[1]:90;
//$interval=($argc>2):(int)$argv[2]:25;



//while(true)
//{
 exec("free",$free);

$free=implode(' ',$free);
preg_match_all("/(?<=\s)\d+/",$free,$match);

list($total_mem,$used_mem,$free_mem,$shared_mem,$buffered_mem,$cached_mem)=$match[0];

$used_mem-=($buffered_mem+$cached_mem);

$percent_used=(int)(($used_mem*100)/$total_mem);

if($percent_used>$alert_percent)
exec("notify-send 'Low Memory: $percent_used% used'");

//sleep($interval);
//}
exit();
?>

1
স্ক্রিপ্টটি ছোট অভিযোজন নিয়ে কাজ করে (আমি কেবল ব্যবহার করেছি available=$(free -m | grep Mem | awk '{print $7}'))। ক্রোন দিয়ে বিজ্ঞপ্তি-প্রেরণের কাজটি করতে, anmolsinghjaggi.wordpress.com/2016/05/11/… দেখুন
মুরশ

ভাষাটি যদি ইংরেজী না হয় তবে ফ্রি উইল স্থানীয়করণের পাঠ্য এবং পার্সিং ব্যর্থ হয়। তারপরে LANG=en_US.UTF-8বাশ স্ক্রিপ্টের শুরুতে যুক্ত করুন ।
ফ্রেডি শিলার

2

আর একটি স্ক্রিপ্ট যা আমি এই উদ্দেশ্যে লিখেছিলাম:

#!/bin/bash
# Copyright 2019, Mikko Rantalainen
# License: MIT X License

# Minimum available memory until warning, default to 10% of total RAM (MiB)
THRESHOLD=$(grep "MemTotal:" /proc/meminfo | awk '{ printf "%d", 0.1*$2/1024}')
INTERVAL=60s

echo "Emitting a warning if less than $THRESHOLD MiB of RAM is available..."

while true; do
    meminfo=$(cat /proc/meminfo)
    free=$(echo "$meminfo" | grep "MemFree:" | awk '{ printf "%d", $2/1024}')
    available=$(echo "$meminfo" | grep "MemAvailable:" | awk '{ printf "%d", $2/1024}')
    inactive=$(echo "$meminfo" | grep "Inactive:" | awk '{ printf "%d", $2/1024}')
    reclaimable=$(echo "$meminfo" | grep "SReclaimable:" | awk '{ printf "%d", $2/1024}')
    usable=$(echo "$free + $inactive / 2 + $reclaimable / 2" | bc)
    if test -z "$available"; then
        message="Current kernel does not support MemAvailable in /proc/meminfo, aborting"
        notify-send "Error while monitoring low memory" "$message"
        echo "$message" 1>&2
        exit 1
    fi

    message="Available: $available MiB
Free: $free MiB
Maybe usable: $usable MiB"

    if [ "$available" -lt "$THRESHOLD" ]
        then
        notify-send -u critical "Low memory warning" "$message"
        echo "Low memory warning:"
    echo "$message"
    fi

    #echo "DEBUG: $message"
    sleep $INTERVAL
done

কেন কেন notify-sendসময়সীমা পরামিতি উপেক্ষা করা হয় : - / এবং কেন বিভাগ এবং স্টক আইকনগুলি সম্পর্কে কোনও দলিল নেই? এছাড়াও, নতুন লাইনগুলি উপেক্ষা করা হয় এবং বার্তাটি কেটে ফেলা হয়-u criticalএটি সমাধান করে
ড্যান ড্যাসকলেসকু

প্রযুক্তিগতভাবে notify-sendসময়সীমা উপেক্ষা করে না। এটি এমন প্রক্রিয়া যা সূচনাটিকে ইনপুট হিসাবে গ্রহণ করে এবং ডেস্কটপের উপরে প্রদর্শন করে যা সময়সীমা উপেক্ষা করার সিদ্ধান্ত নেয়। আরও দেখুন: unix.stackexchange.com/q/251243/20336
মিক্কো রেন্টালাইনেন

1

স্ক্রিপ্টের আপডেট হওয়া সংস্করণ যা প্রোপস-এনজি ৩.৩.১০ থেকে বিনামূল্যে নিয়ে কাজ করে

#!/bin/bash

#Minimum available memory limit, MB
THRESHOLD=400

#Check time interval, sec
INTERVAL=30

while :
do
    free_out=$(free -w -m)
    available=$(awk '/^Mem:/{print $8}' <<<$free_out)

    if (( $available < $THRESHOLD ))
        then
        notify-send -u critical "Memory is running out!" "Available memory is $available MiB"
        echo "Warning - available memory is $available MiB"    
    fi

    cat <<<$free_out
    sleep $INTERVAL
done

1

শীর্ষ 3 মেমরি-ক্ষুধার্ত প্রক্রিয়াগুলির বিশদ যুক্ত করতে উপরের স্ক্রিপ্টটি আপডেট করা হয়েছে। Https://github.com/romanmelko/ubuntu-low-mem-popup এ দেখুন

এখানে লিপি নিজেই:

#!/usr/bin/env bash

set -o errexit
set -o pipefail
set -o nounset

# If the language is not English, free will output localized text and parsing fails
LANG=en_US.UTF-8

THRESHOLD=500
INTERVAL=300
POPUP_DELAY=999999

# sleep some time so the shell starts properly
sleep 60

while :
do
    available=$(free -mw | awk '/^Mem:/{print $8}')
    if [ $available -lt $THRESHOLD ]; then
        title="Low memory! $available MB available"
        message=$(top -bo %MEM -n 1 | grep -A 3 PID | awk '{print $(NF - 6) " \t" $(NF)}')
        # KDE Plasma notifier
        kdialog --title "$title" --passivepopup "$message" $POPUP_DELAY
        # use the following command if you are not using KDE Plasma, comment the line above and uncomment the line below
        # please note that timeout for notify-send is represented in milliseconds
        # notify-send -u critical "$title" "$message" -t $POPUP_DELAY
    fi
    sleep $INTERVAL
done

অবদানের জন্য আপনাকে ধন্যবাদ। এখানে আরও ভাল অনুশীলন হ'ল আপনি উল্লেখ করা লিঙ্কটির বিষয়বস্তু সংক্ষিপ্ত করা (এই ক্ষেত্রে অনুলিপিটি)। এইভাবে, আপনার উত্তরটি বৈধ থাকবে লিংকটি অদৃশ্য হয়ে গেলেও।
মার্ক ভানহোমিসসেন

1

ক্র্যাম দ্বারা ডাকা হলে র‌্যাম উপলব্ধ , শতাংশ এবং ডেস্কটপ বিজ্ঞপ্তিগুলি ব্যবহার করে বৈকল্পিক (যেমন লুব স্ক্রিপ্টটি পুনরায় বুট করার পরে শুরু করতে হবে না):

#!/usr/bin/env bash

# dbus env var required when called via cron:
eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ | tr '\0' '\n')";

AVAIL_THRESHOLD=5

free_output=$(free)
mem_total=$(awk '/^Mem:/{print $2}' <<< $free_output)
mem_avail=$(awk '/^Mem:/{print $7}' <<< $free_output)
mem_avail_m=$(bc <<< "scale=1; $mem_avail/1024")
percent_avail=$(bc <<< "scale=1; $mem_avail*100 /$mem_total")
should_warn=$(bc <<< "$percent_avail < $AVAIL_THRESHOLD")

if (( $should_warn )); then
    notify-send "Memory warning - only $percent_avail% ($mem_avail_m MB) available"
else
    echo "Memory OK - $percent_avail% ($mem_avail_m MB) available"
fi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.