Python:根据负载、时间等监控和终止/限制子进程

4 投票
3 回答
2164 浏览
提问于 2025-04-15 15:33

我有一个工作队列,它会启动一些外部的第三方应用程序,使用的是子进程。我想控制这些进程消耗我服务器的资源量。有些外部应用程序有时会因为未知原因卡住,重启一下就能解决。

我想知道怎么做:

  • 用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() 等等。

撰写回答