5

os.getloadavg()現在、サーバーの現在の負荷を把握するためにPython を使用しています。(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 分間に何度も発生する可能性があるため、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 に答える