2014-04-08 11 views
8

Chcę uzyskać użycie procesora i pamięci przez serwer za pomocą php. Skrypt powinien działać w systemie Windows i Linux.Jak uzyskać użycie procesora serwera i pamięci RAM za pomocą php?

Jak to zrobić?

+0

[ 'shell_exec'] (http://www.php.net/manual/en/function.shell-exec.php) powinien to zrobić lub spróbuj' var_dump ($ _ SERVER) 'dla mi nimal info –

+0

Czy odpowiedź na to pytanie jest tutaj? http://stackoverflow.com/questions/4705759/how-to-get-cpu-usage-and-ram-usage-without-exec –

+0

jest polecenie terminala, 'nice top' (lub po prostu' top'), które generuje wykorzystanie procesora i pamięci RAM. W połączeniu z shell_exec() i odrobiną parsowania danych wyjściowych powinno uzyskać to, czego szukasz. – roycable

Odpowiedz

14

Pierwsza funkcja zwróci użycie pamięci serwera:

function get_server_memory_usage(){ 

    $free = shell_exec('free'); 
    $free = (string)trim($free); 
    $free_arr = explode("\n", $free); 
    $mem = explode(" ", $free_arr[1]); 
    $mem = array_filter($mem); 
    $mem = array_merge($mem); 
    $memory_usage = $mem[2]/$mem[1]*100; 

    return $memory_usage; 
} 

funkcja ta zwróci użycie procesora serwera:

function get_server_cpu_usage(){ 

    $load = sys_getloadavg(); 
    return $load[0]; 

} 
+3

Podejrzewam, że oba te elementy działają tylko w systemach operacyjnych * nix. – halfer

+1

'sys_getloadavg()' zwraca 'load', co niekoniecznie oznacza użycie procesora. Obejmuje prędkości dysków itp. – kouton

+1

A jak uzyskać bieżące (nie średnie) użycie procesora? – zypro

4

Radziłbym użyciem PHP SNMP

http://www.php.net/manual/en/book.snmp.php

Zapewni to ujednolicone rozwiązanie dla systemu Windows i Linu x bez komplikacji z komendami exec.

Będziesz oczywiście trzeba zainstalować Windows SNMP demon/usługę na obu serwerach Windows i Linux

Dla Linuksa, wystarczy użyć Net-SNMP np CentOS

sudo yum install net-snmp 
sudo service snmpd start 
sudo chkconfig snmpd on 

Net-SNMP jest również dostępne dla systemu Windows:

http://www.net-snmp.org/

Powiązane problemy