在Linux(CentOS)中的Python中,在某个时刻获取加载,或在更短的时间段内获取getloadavg()

在Linux(CentOS)中的Python中,在某个时刻获取加载,或在更短的时间段内获取getloadavg(),python,linux,load,Python,Linux,Load,目前,我正在使用Python的os.getloadavg()了解服务器(Centos 6.3) 根据python文档,os.getloadavg()“返回过去1、5和15分钟内系统运行队列中的平均进程数”: os.getloadavg() 返回过去1、5和15分钟内系统运行队列中的平均进程数,如果无法获得平均负载,则返回OSError。 问题: 是否可以获取系统运行队列中的进程数 在当前时刻 如果没有,是否有可能在较短的时间内获得平均值 时间,比如最后5秒或10秒 我问这个问题的原因是因为

目前,我正在使用Python的
os.getloadavg()
了解服务器
(Centos 6.3)

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

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

  • 是否可以获取系统运行队列中的进程数 在当前时刻
  • 如果没有,是否有可能在较短的时间内获得平均值 时间,比如最后5秒或10秒
我问这个问题的原因是因为我得到的是平均负载,如果它太高,我会杀死一些进程。这种情况每分钟可能发生多次,因此我担心在1分钟的平均值赶上之前会有太多进程被终止

谢谢

根据Linux 3.5内核源代码中的说明,您可以从
/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

平均1分钟是滑动窗口还是每分钟运行?如果它是一个滑动窗口,您可以在1分钟的初始等待时间后对其应用差异,这将为您提供每n秒检查负载的新任务的估计值。据我所知,这些平均值由内核维护(至少在linux中)。所以你可能无法得到更短时间的平均值。但是,应该可以获取当前正在运行的进程数。但这不一定等于系统运行队列中的进程数,系统运行队列具有非常精确的技术定义。
>>> print int(open("/proc/loadavg").next().split()[3].split('/')[0])
6