在Linux(CentOS)中,Python获取瞬时负载或短时间负载avg()
目前,我正在使用Python的os.getloadavg()
来了解服务器的当前负载情况(Centos 6.3)
。
根据Python的文档,os.getloadavg()
“返回系统运行队列中进程的数量,这个数量是过去1分钟、5分钟和15分钟的平均值”。
http://docs.python.org/2/library/os.html#os.getloadavg
os.getloadavg() Return the number of processes in the system run queue averaged over the last 1, 5, and 15 minutes or raises OSError if the load average was unobtainable.
问题:
- 有没有办法获取当前瞬间系统运行队列中的进程数量?
- 如果不行,能不能获取更短时间内的平均值,比如过去5秒或10秒的平均?
我之所以问这个,是因为我在获取负载平均值后,如果发现负载太高,就会杀掉一些进程。这种情况可能在一分钟内发生很多次,所以我担心在一分钟的平均值更新之前,会有太多进程被杀掉。
谢谢!
1 个回答
4
根据Linux 3.5内核源代码中的文档/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