Ничего не работало для меня !!
Итак, я написал сценарий для мониторинга использования памяти. Сначала попробуйте очистить кеш оперативной памяти, если потребление памяти увеличит порог. Вы можете настроить этот порог в скрипте. Если даже тогда потребление памяти не будет ниже порогового значения, оно начнет уничтожать процессы на единицу в порядке убывания объема памяти до тех пор, пока потребление памяти не будет ниже порогового значения. Я установил его по умолчанию 96%. Вы можете настроить его, изменив значение переменной RAM_USAGE_THRESHOLD в скрипте.
Я согласен с тем, что уничтожение процессов, которые потребляют высокую память, не является идеальным решением, но лучше убить ОДНОЕ приложение, а не потерять ВСЕ работу !! сценарий отправит вам уведомление на рабочем столе, если использование ОЗУ увеличит порог. Он также уведомит вас, если он убьет любой процесс.
#!/usr/bin/env python
import psutil, time
import tkinter as tk
from subprocess import Popen, PIPE
import tkinter
from tkinter import messagebox
root = tkinter.Tk()
root.withdraw()
RAM_USAGE_THRESHOLD = 96
MAX_NUM_PROCESS_KILL = 100
def main():
if psutil.virtual_memory().percent >= RAM_USAGE_THRESHOLD:
# Clear RAM cache
mem_warn = "Memory usage critical: {}%\nClearing RAM Cache".\
format(psutil.virtual_memory().percent)
print(mem_warn)
Popen("notify-send \"{}\"".format(mem_warn), shell=True)
print("Clearing RAM Cache")
print(Popen('echo 1 > /proc/sys/vm/drop_caches',
stdout=PIPE, stderr=PIPE,
shell=True).communicate())
post_cache_mssg = "Memory usage after clearing RAM cache: {}%".format(
psutil.virtual_memory().percent)
Popen("notify-send \"{}\"".format(post_cache_mssg), shell=True)
print(post_cache_mssg)
if psutil.virtual_memory().percent < RAM_USAGE_THRESHOLD:
print("Clearing RAM cache saved the day")
return
# Kill top C{MAX_NUM_PROCESS_KILL} highest memory consuming processes.
ps_killed_notify = ""
for i, ps in enumerate(sorted(psutil.process_iter(),
key=lambda x: x.memory_percent(),
reverse=True)):
# Do not kill root
if ps.pid == 1:
continue
elif (i > MAX_NUM_PROCESS_KILL) or \
(psutil.virtual_memory().percent < RAM_USAGE_THRESHOLD):
messagebox.showwarning('Killed proccess - save_hang',
ps_killed_notify)
Popen("notify-send \"{}\"".format(ps_killed_notify), shell=True)
return
else:
try:
ps_killed_mssg = "Killed {} {} ({}) which was consuming {" \
"} % memory (memory usage={})". \
format(i, ps.name(), ps.pid, ps.memory_percent(),
psutil.virtual_memory().percent)
ps.kill()
time.sleep(1)
ps_killed_mssg += "Current memory usage={}".\
format(psutil.virtual_memory().percent)
print(ps_killed_mssg)
ps_killed_notify += ps_killed_mssg + "\n"
except Exception as err:
print("Error while killing {}: {}".format(ps.pid, err))
else:
print("Memory usage = " + str(psutil.virtual_memory().percent))
root.update()
if __name__ == "__main__":
while True:
try:
main()
except Exception as err:
print(err)
time.sleep(1)
Сохраните код в файле say save_hang.py. Запустите скрипт как:
sudo python save_hang.py
Обратите внимание, что этот скрипт совместим только для Python 3 и требует установки пакета tkinter. вы можете установить его как:
sudo apt-get install python3-tk
Надеюсь, это поможет ...
Альтернативой док-станции является апплет dockbarx, убедитесь, что вы устанавливаете дополнительные темы, чтобы получить темы единства (при условии, что вы используете Ubuntu 10.10, 'apt-get install ubuntu-netbook')
Это PPA link: https://launchpad.net/~dockbar-main/+archive/ppa
Вы можете найти более полезную информацию о dockbarx: https://launchpad.net/~dockbar-main / + архив / ppa И обязательно ознакомьтесь с этим форумом форума Ubuntu: http://ubuntuforums.org/showthread.php?p=9968108