繁体   English   中英

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

[英]Python: Monitoring and killing/throttling spawned processes based on load, time, etc

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

什么是好方法:

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

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

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

函数来得到平均负载,并杀死进程是在标准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()等)

至于管理CPU,你会想用nice来启动你的进程。

要监视系统负载和与当前正在运行的进程相关的其他统计信息,您可以查看伪设备/ proc目录

在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()
>>>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM