我有一个工作队列,使用子进程生成外部第三方应用程序。我想控制这些进程消耗的服务器的总资源量。其中一些外部应用程序也会因为未知原因而挂起,并通过重新启动进行修复。
有什么好方法:
基本上我需要能够用我生成的线程来控制我放在服务器上的负载。
希望有一个包或库可以为我做这一切吗?
答案 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() >>>