Python: мониторинг и уничтожение / регулирование порожденных процессов в зависимости от нагрузки, времени и т. Д. - PullRequest
4 голосов
/ 31 октября 2009

У меня есть очередь рабочих, которые порождают внешние сторонние приложения, используя подпроцесс. Я хотел бы контролировать, сколько общих ресурсов моего сервера потребляют эти процессы. Некоторые из этих внешних приложений также имеют тенденцию зависать по неизвестным причинам, исправленные при перезапуске.

Какой хороший способ:

  • Отслеживать общую нагрузку на сервер (скажем, среднюю загрузку или эквивалент vmstat) в python?
  • Контролировать загрузку процессора процессами, которые я запускаю?
  • Уничтожить процессы, которые я породил, если они занимают слишком много времени или слишком много процессора?

По сути, мне нужно иметь возможность контролировать нагрузку, которую я помещаю на мой сервер, с помощью порожденных мной потоков.

Надеюсь, есть пакет или библиотека, которая сделает все это для меня?

Ответы [ 3 ]

4 голосов
/ 02 ноября 2009

Функции для получения средней загрузки и процесса уничтожения доступны в стандартной библиотеке Python (os.getloadavg(), os.kill(), subprocess.Popen.kill()). Есть пакет psutil для отдыха (psutil.Process.get_cpu_times(), psutil.Process.get_cpu_percent(), psutil.Process.get_memory_info(), psutil.Process.get_memory_percent() и более)

1 голос
/ 11 февраля 2010

Отслеживать общую нагрузку на сервер (скажем, среднюю загрузку или эквивалент vmstat) в python?

>>> import psutil, subprocess
>>> subp = subprocess.Popen('python', stdout=subprocess.PIPE, stderr=subprocess.PIPE)
>>> proc = psutil.Process(subp.pid)
>>> rss, vms =  proc.get_memory_info()
>>> print "Resident memory: %s KB" %(rss / 1024)
Resident memory: 136 KB
>>> print "Virtual memory: %s KB" %(vms / 1024)
Virtual memory: 356 KB
>>> print proc.get_memory_percent()
0.00324324118077

Контролировать загрузку процессора процессами, которые я запускаю?

>>> proc.get_cpu_percent()
0.0

Процессы убийства, которые я породил, если они занимают слишком много времени или слишком много процессора?

>>> proc.kill()
>>>
1 голос
/ 31 октября 2009

Что касается управления процессором, вы можете использовать nice для запуска ваших процессов.

Для мониторинга загрузки системы и другой статистики, связанной с запущенными в данный момент процессами, вы можете заглянуть в каталог / proc псевдоустройств .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...