Как узнать сколько ОЗУ и частоты процессора потребляет определенный php-скрипт?

Discussion in 'PHP' started by polig2, 21 May 2015.

  1. polig2

    polig2 Member

    Joined:
    9 May 2015
    Messages:
    98
    Likes Received:
    17
    Reputations:
    0
    Как узнать сколько ОЗУ и частоты процессора потребляет определенный php-скрипт?

    На сервере debian, ubuntu, centos..в общем на linux.

    Htop не катит, т.к. он показывает общую нагрузку, да?
     
  2. Cthulchu

    Cthulchu Elder - Старейшина

    Joined:
    22 Nov 2007
    Messages:
    405
    Likes Received:
    722
    Reputations:
    85
    как раз htop я и хотел посоветовать. щас перепроверю, но по моему, хтоп может показывать по процессам, если по дефолту этого не делает.

    да, вот они, апачики:

    [​IMG]

    пхп капсулируется апачем. Он же установлен как модуль апача, следовательно родительский процесс всегда будет виден снаружи, но все инстансы апача видны.
     
    #2 Cthulchu, 21 May 2015
    Last edited: 21 May 2015
  3. polig2

    polig2 Member

    Joined:
    9 May 2015
    Messages:
    98
    Likes Received:
    17
    Reputations:
    0
    мне нужно посмотреть, не сколько потребляют процесс веб-сервера, а именно процесс самого файла, например, index.php.

    Т.е. что-то в виде таблицы
    index.php | 1.6 mb ОЗУ | 0.01 Ghz
     
  4. Cthulchu

    Cthulchu Elder - Старейшина

    Joined:
    22 Nov 2007
    Messages:
    405
    Likes Received:
    722
    Reputations:
    85
    у "самих файлов" нету процессов.

    А, хотя, можно попробовать вот что-то такое:

    PHP:
    <?php
    <?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;
    }

    onRequestStart();

    $a 'Test';

    for(
    $i=0$i<10000$i++) {
      for(
    $j=0$j<1000$j++) {
        
    $a md5($a);
      }
    }

    $microtime=microtime(true)-PHP_TUSAGE;
    $cpuusage=getCpuUsage();
    echo 
    "<pre>
    Microtime: "
    .round($microtime,4)."
    CPU usage: 
    $cpuusage
    Calculated time: "
    .round($microtime*$cpuusage/100,4)."
    "
    ;
    ?>
    Но, имхо, это слишком коленочное решение.
     
  5. 1qoot1

    1qoot1 Member

    Joined:
    13 Jan 2014
    Messages:
    48
    Likes Received:
    10
    Reputations:
    1
    Блин..... Набор инстурментов из серии top.
    mytop
    htop
    apachetop
    и тд...
     
  6. smack

    smack Active Member

    Joined:
    25 Aug 2013
    Messages:
    210
    Likes Received:
    157
    Reputations:
    3
    в цпанели смотри.
     
  7. b3

    b3 Banned

    Joined:
    5 Dec 2004
    Messages:
    2,170
    Likes Received:
    1,155
    Reputations:
    202
    http://php.net/manual/ru/function.memory-get-usage.php
    http://php.net/manual/ru/function.sys-getloadavg.php

    Но этого будет мало если скрипт будет юзать допустим БД, тогда нужно делать логи процессов и смотреть примерно. Если же скрипт работает консольно через CLI к примеру, тогда эти функции хорошо помогут. Вообще не замарачивайтесь над этим, если не используете запросы в БД с кучей возвращенных записей или если не используете огромные массивы данных.