2013-02-26 8 views
5

Obecnie używam Pythona os.getloadavg() zorientować bieżącego obciążenia na serwerze (Centos 6.3)Get obciążenie na chwilę w czasie lub getloadavg() dla mniejszego okresu w Pythonie na Linux (CentOS)

Według dokumentacja python, os.getloadavg() "Zwraca liczbę procesów w systemie uruchomić kolejkę uśrednionej w ciągu ostatniego 1, 5 i 15 minut":

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. 

Pytanie:

  • Czy to możliwe, aby uzyskać liczbę procesów w kolejce uruchamiania systemu w obecnej chwili?
  • Jeśli nie, to czy możliwe jest uzyskanie średniej z krótszego okresu czasu: , np. Ostatnich 5 lub 10 sekund?

Powodem, dla którego pytam, jest to, że uzyskuję średnie obciążenie, a jeśli jest zbyt wysokie, zabijam niektóre procesy. Może to potencjalnie wystąpić wiele razy na minutę, więc jestem zaniepokojony, że zbyt wiele procesów zostanie zabitych, zanim średnia 1-minutowa się podniesie.

Dzięki!

+0

Czy 1 minuta średnia przesuwane okno lub uruchomić co minutę? Jeśli jest to okno przesuwne, możesz zastosować do niego różnicę po początkowym czasie oczekiwania wynoszącym 1 minutę, a to daje oszacowanie nowych zadań co każde n-sekundowe wybranie obciążenia. – Arcturus

+0

O ile mi wiadomo, średnie są utrzymywane przez jądro (przynajmniej w systemie Linux). Prawdopodobnie nie można uzyskać średnich dla krótszych czasów trwania. Jednak powinno być możliwe uzyskanie bieżącej liczby uruchomionych procesów. Ale to niekoniecznie będzie równe liczbie procesów w kolejce uruchamiania systemu, która ma bardzo technicznie precyzyjną definicję. – entropy

Odpowiedz

4

Według Documentation/filesystems/proc.txt w źródłach jądra Linux 3.5, można pobrać liczbę procesów aktualnie uruchomionych od /proc/stat:

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

Ten sam numer jest dostępny w /proc/loadavg:

>>> print int(open("/proc/loadavg").next().split()[3].split('/')[0]) 
6 
Powiązane problemy