CPU информация

dakata__92

Super Moderator
Колеги, как под Windows да взема информацията за натоварване на процесора? Правя си клас за производителност на приложенията в които имам до момента доста статистическа информация и ми се искаше да добавя информация и за натоварването на процесора. Ако някой може да ми даде още идеи какво да добавя, като статистика нека сподели.

Код:
Array
(
    [execution_time] => Array
        (
            [benchmark_start] => 1461330681.827
            [benchmark_stop] => 1461330681.8387
            [execution_speed] => 0.011672019958496
            [max_execution_time] => 30
        )

    [memory] => Array
        (
            [disk_used_space] => 39.936584472656[GB]
            [disk_free_space] => 257.91497421265[GB]
            [disk_total_space] => 297.8515586853[GB]
            [in_use] => 142.65625[KB]
            [peak_use] => 146.03125[KB]
            [limit] => 128M
            [realpath_cache] => 15.96484375[KB]
        )

    [included_files] => Array
        (
            [0] => C:\xampp\htdocs\Classes\AppPerformance.php
        )

    [defined] => Array
        (
            [constants] => 
            [classes] => Array
                (
                    [137] => AppPerformance
                )

            [interfaces] => Array
                (
                )

            [traits] => Array
                (
                )

            [functions] => Array
                (
                )

        )

    [total] => Array
        (
            [lines_code] => 89
            [tokens] => Array
                (
                    [T_WHITESPACE] => 196
                    [T_STRING] => 59
                    [T_VARIABLE] => 51
                    [T_CONSTANT_ENCAPSED_STRING] => 45
                    [T_DOUBLE_ARROW] => 18
                    [T_OBJECT_OPERATOR] => 10
                    [T_ARRAY] => 9
                    [T_FUNCTION] => 6
                    [T_PUBLIC] => 5
                    [T_RETURN] => 5
                    [T_LNUMBER] => 4
                    [T_DIR] => 4
                    [T_AS] => 2
                    [T_FOREACH] => 2
                    [T_NEW] => 2
                    [T_ISSET] => 2
                    [T_IF] => 1
                    [T_PRINT] => 1
                    [T_COMMENT] => 1
                    [T_OPEN_TAG] => 1
                    [T_CLASS] => 1
                )

        )

)
 
lam3r4370 каза:
http://php.net/manual/fr/function.sys-getloadavg.php

Първият коментар
Колега, знам за тази функция но тя е за Linux, цитирайки текста и " Note: This function is not implemented on Windows platforms." ще разбереш защо питам за Windows.
:?:

http://php.net/manual/en/function.sys-getloadavg.php

Намерих доста функции в нета даже някои използват COM клас който нямам:
PHP:
function get_server_load() 
{
    $load=array();
    if (stristr(PHP_OS, 'win')) 
    {
        $wmi = new COM("Winmgmts://");
        $server = $wmi->execquery("SELECT LoadPercentage FROM Win32_Processor");  
        $cpu_num = 0;
        $load_total = 0;
        foreach($server as $cpu)
        {
            $cpu_num++;
            $load_total += $cpu->loadpercentage;
        }

        $load[]= round($load_total/$cpu_num);

    } 
    else
    {
        $load = sys_getloadavg();
    }
    return $load;
}
echo implode(' ',get_server_load());

Други пък ползват getrusage() функция която също нямам, тоест изобщо не се получава да пробвам тези опции.

PHP:
function onRequestStart() {
	$dat = getrusage();
	define('PHP_TUSAGE', microtime(true));
	define('PHP_RUSAGE', $dat["ru_utime.tv_sec"]*1e6+$dat["ru_utime.tv_usec"]);
}
 
function getCpuUsage() {
    $dat = getrusage();
    $dat["ru_utime.tv_usec"] = ($dat["ru_utime.tv_sec"]*1e6 + $dat["ru_utime.tv_usec"]) - PHP_RUSAGE;
    $time = (microtime(true) - PHP_TUSAGE) * 1000000;
 
    // cpu per request
    if($time > 0) {
        $cpu = sprintf("%01.2f", ($dat["ru_utime.tv_usec"] / $time) * 100);
    } else {
        $cpu = '0.00';
    }
 
    return $cpu;
}


Eто част от кодовете които открих, но уви идея си нямам как да ги подкарам като ми трещат грешки. Щом още на локалният ми трещат грешки че липсват и прочие то няма смисъл да ги приобщавам към класът. Чудех се още каква информация мога да кача към производителността на приложението за да се отчита но се чудя естествено и чакам някой ако има добро предложение да помисля над него.
 
lam3r4370 каза:
Затова ти казах първият коментар да погледнеш. Com класа не е ли вграден в php?
Ами явно не. С PHP Version 5.6.15 съм и направя ли инстанция на класът COM ми казва, че го нямам. Това директно означава, че явно не е вграден по дефаут в PHP.

Код:
Fatal error:  Class 'COM' not found
 
В php.ini
Код:
extension=php_com_dotnet.dll

Или виж това
http://www.blogbyben.com/2011/09/gotcha-of-day-detecting-cpu-usage-on.html
 
lam3r4370 каза:
В php.ini
Код:
extension=php_com_dotnet.dll

Или виж това
http://www.blogbyben.com/2011/09/gotcha-of-day-detecting-cpu-usage-on.html
Тази функция на "Прозореца" ми връща резултат някакъв, но дали е надеждна и какво точно се предполага че ми връща като стойност?
PHP:
function win_sys_current_cpu_usage() {
  $cmd = 'typeperf  -sc 1  "\Processor(_Total)\% Processor Time"';
  exec($cmd, $lines, $retval);
  if($retval == 0) {
    $values = str_getcsv($lines[2]);
    return floatval($values[1]);
  } else {
    return false;
  }
}
print_r(win_sys_current_cpu_usage());

Вади ми стойност но в проценти ли е какво символизира изобщо не разбрах от текста.
 
Трябва да ти връща моментния CPU usage, напиши командата във cmd-то и провери сам, php-то само я парсва
 

Back
Горе