Python:根据负载、时间等监控和终止/限制子进程
我有一个工作队列,它会启动一些外部的第三方应用程序,使用的是子进程。我想控制这些进程消耗我服务器的资源量。有些外部应用程序有时会因为未知原因卡住,重启一下就能解决。
我想知道怎么做:
- 用Python监控整个服务器的负载情况(比如负载平均值或者vmstat的类似功能)?
- 监控我启动的进程的CPU负载?
- 如果我启动的进程运行时间太长或者占用CPU太高,怎么把它们杀掉?
总之,我需要能够控制我启动的线程对服务器造成的负载。
希望有一个包或者库可以帮我完成这些事情?
3 个回答
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() >>>
1
关于管理CPU的使用,你可以用nice来启动你的程序。
如果你想监控系统负载和其他与当前运行的程序相关的数据,可以看看/proc这个伪设备目录。
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()
等等。