5

目前,我正在使用 Pythonos.getloadavg()来了解服务器上的当前负载(Centos 6.3)

根据 python 文档,os.getloadavg()“返回系统运行队列中在过去 1、5 和 15 分钟内平均的进程数”:

http://docs.python.org/2/library/os.html#os.getloadavg

os.getloadavg()
返回系统运行队列中在过去 1、5 和 15 分钟内的平均进程数,如果无法获得平均负载,则引发 OSError。

问题:

  • 是否可以在当前时刻获取系统运行队列中的进程数?
  • 如果没有,是否有可能在更短的时间内获得平均值,比如最后 5 秒或 10 秒?

我问的原因是因为我得到了平均负载,那么如果它太高,就会杀死一些进程。这可能每分钟发生很多次,所以我担心在 1 分钟的平均值赶上之前会杀死太多的进程。

谢谢!

4

1 回答 1

4

根据Linux 3.5 内核源代码中的Documentation/filesystems/proc.txt,您可以从以下位置检索当前运行的进程数/proc/stat

>>> for l in open("/proc/stat"):
...   l = l.split()
...   if l[0] == 'procs_running':
...     result = int(l[1])
... 
>>> print result
6
>>> 

相同的号码可用于/proc/loadavg

>>> print int(open("/proc/loadavg").next().split()[3].split('/')[0])
6
于 2013-03-03T05:24:01.017 回答