2011-12-07 15 views
6

मैं एक बेंचमार्क वर्ग है कि उपयोगकर्ता, स्मृति की खपत और इस तरह .... और कोड के अंत मेंcpu_get_usage?

$timer->checkpoint('1'); 

समय के लिए कुछ कोड की जाँच करने के लिए उदाहरण के लिए सम्मिलित करने के लिए अनुमति देता है बनाया है, तो वह/वे इसका परीक्षण करना चाहता है कि उसे

$result=$timer->result(); 

यह सार्वजनिक फ़ंक्शन परिणाम() जैसे कुछ डेटा देता है जैसे उदाहरण स्मृति उपयोग (memory_get_peak_usage का उपयोग करके) और समय की खपत (microtime())।

यह सब मेरे लिए ठीक काम करता है।

लेकिन मैं पर मौजूदा अंतर्निहित PHP कार्यों के संयोजन का उपयोग कैसे कर सकता हूं, एक मान प्राप्त करें जिसे सीपीयू खपत माना जा सकता है?

अंतर्निहित कार्यों का उपयोग करके कोड के एक निश्चित टुकड़े पर कितना समय व्यतीत किया गया है, इसकी गणना करना काफी आसान रहा है, लेकिन मुझे एक निश्चित तरीके से सीपीयू खपत कैसे प्राप्त करने के तरीके के बारे में सोचने में परेशानी हो रही है कोड का टुकड़ा

+0

इस मदद करता है:

function stopwatch(){ static $time=0; $prev=$time; $time=microtime(true); return $time-$prev; } 
मोटे के

, इस तरह उपयोग करने के लिए नहीं है? http://stackoverflow.com/questions/4705759/how-to-get-cpu-usage-and-ram-usage-without-exec –

+0

वास्तव में नहीं। मैंने एसओ के माध्यम से शोध किया है और बहुत सारे googled है, और मुझे लगता है कि मैं एक समाधान के लिए आया था ... मैं अभी इसे बना रहा हूँ और जब मैं कर रहा हूँ मैं पोस्ट करने जा रहा हूँ जो मैंने करने की कोशिश की है। मैं उम्मीद में यह PHP कार्य का उपयोग कर रहा हूं कि यह काम करेगा - Getrusage –

+0

ru_utime- प्रक्रिया समय का उपयोग किया गया है, जिसमें सेकंड समय में उपयोगकर्ता समय की मात्रा वाला एक स्ट्रक्चर टाइमवॉल फ़ील्ड है। उपयोगकर्ता समय कर्नेल सिस्टम कॉल के बजाए, उपयोगकर्ता प्रोग्राम को निष्पादित करने में CPU समय व्यतीत होता है। ru_stime- एक संरचना समय क्षेत्र जिसमें सिस्टम समय की मात्रा होती है, सेकंड में, प्रक्रिया का उपयोग किया जाता है। सिस्टम समय सीपीयू समय प्रक्रिया की ओर से सिस्टम कॉल निष्पादित करने में व्यतीत होता है। ये दो मान हैं जिन्हें आप एक सरणी से प्राप्त करते हैं जो getrusage() फ़ंक्शन (अंतर्निहित PHP) में हैं। मूल रूप से आपको उस समय प्रोसेसर खपत प्राप्त करने के लिए सिस्टम समय को सिस्टम समय के साथ विभाजित करना होगा। –

उत्तर

5

अपने ही सवाल का जवाब देने से नफरत है, लेकिन मैं अनुसंधान के एक बहुत कुछ किया है, और यहाँ मैं जाना ... मैं मूल रूप से क्या किया यह था ...

 $dat=getrusage(); 
     foreach ($dat as $key => $val) { 
      $usertime= $dat['ru_utime.tv_usec']; 
      $systemtime= $dat['ru_stime.tv_usec']; 
      $finalresultcpu= ($systemtime + $usertime); 
     } 
     $this->_cpuTrackers[$name]=$finalresultcpu; 
     return $this; 
               } 

आप देख सकते हैं मैं एक इस्तेमाल किया Getrusage PHP अंतर्निहित फ़ंक्शन। जो जानकारी के पूरे समूह के साथ एक सरणी देता है, जिसमें से अधिकांश मेरे लिए बहुत बेकार था, ru_utime.tv_usec (उपयोगकर्ता समय) और ru_stime.tv_usec (सिस्टम समय) को छोड़कर। यह देखने के लिए कि स्क्रिप्ट कितनी सीपीयू पावर खपत है, हमें 'उपयोगकर्ता समय' और 'सिस्टम समय' मानों को देखने की आवश्यकता है और जैसा कि आप कोड में देख सकते हैं, वास्तव में एक सीपीयू उपयोग करने के लिए इसे जोड़ें।

+1

अपने स्वयं के प्रश्न का उत्तर देने के लिए यह पूरी तरह से वैध है _and_ इसे स्वीकार करें। [इसके लिए भी एक बैज है] (http://stackoverflow.com/badges/14/self-learner)। :) – Herbert

+0

धन्यवाद हरबर्ट ...थोड़ी देर में पीठ पर एक नल रखना अच्छा लगता है: -D। यह विशेष रूप से आपके जैसे जानकारियों से प्राप्त करने के लिए चापलूसी कर रहा है –

+0

* जानकार व्यक्ति :-) –

0
function cpu_usage(){ 
    static $R=0; 
    $r=$R; 
    $R=getrusage(); 
    $R= $R['ru_utime.tv_sec']*1000000+$R['ru_utime.tv_usec']+ 
     $R['ru_stime.tv_sec']*1000000+$R['ru_stime.tv_usec']; 
    return $R-$r; 
} 

उपयोग:

cpu_time(); // optionally initiating, to measure time from this point, 
      // not from the script's beginning 
// doing some stuff here 
echo cpu_time()." elapsed\n"; 
// doing yet some stuff here 
echo cpu_time()." elapsed\n"; 

सरल मामलों में यह एक ही देता है microtime के रूप में, लेकिन कम परिशुद्धता के साथ। microtime के लिए एक ही समारोह:

stopwatch(); 
f(); // some function, which calls `stopwatch` in itself too 
echo stopwatch();