Python:根据负载,时间等监视和终止/限制生成的进程

时间:2009-10-31 16:53:48

标签: python

我有一个工作队列,使用子进程生成外部第三方应用程序。我想控制这些进程消耗的服务器的总资源量。其中一些外部应用程序也会因为未知原因而挂起,并通过重新启动进行修复。

有什么好方法:

  • 在python中监控整体服务器负载(例如,vmstat的平均负载或等效值)
  • 监控我产生的进程的CPU负载?
  • 如果他们花费太长时间或花费太多的cpu,我已经催生的流程会被杀死?

基本上我需要能够用我生成的线程来控制我放在服务器上的负载。

希望有一个包或库可以为我做这一切吗?

3 个答案:

答案 0 :(得分:4)

标准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 :(得分:1)

至于管理CPU,您需要使用nice启动您的流程。

要监控系统负载以及与当前正在运行的流程相关的其他统计信息,您可以查看/proc directory of pseudo-devices

答案 2 :(得分:1)

在python中监控整体服务器负载(例如,vmstat的平均负载或等效值)?

>>> 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

监控我产生的进程的CPU负载?

>>> proc.get_cpu_percent()
0.0

如果他们花费的时间过长或占用过多的CPU,我会催生这些过程吗?

>>> proc.kill()
>>>
相关问题