2011-12-07 14 views
6

Tôi đã tạo ra một lớp chuẩn cho phép người dùng để chèn ví dụcpu_get_usage trong php?

$timer->checkpoint('1'); 

để kiểm tra một số mã cho thời gian, tiêu thụ bộ nhớ và như vậy .... và ở phần cuối của mã nếu cô ấy/anh ấy muốn kiểm tra nó cô/anh ấy có để chèn

$result=$timer->result(); 

này đưa ra một số dữ liệu để kết quả public function() như ví dụ sử dụng bộ nhớ (sử dụng memory_get_peak_usage) và thời gian tiêu thụ (microtime()).

Tất cả điều này chỉ phù hợp với tôi.

Nhưng làm cách nào tôi có thể sử dụng kết hợp các hàm php dựng sẵn hiện có để nhận giá trị có thể được coi là mức tiêu thụ CPU? Nó đã được khá dễ dàng để tính toán bao nhiêu thời gian đã được chi cho một đoạn mã nhất định bằng cách sử dụng các chức năng được xây dựng trong, nhưng tôi đã gặp khó khăn suy nghĩ về một cách làm thế nào để có được mức tiêu thụ CPU cho một số đoạn mã.

+0

Liệu sự giúp đỡ này? http://stackoverflow.com/questions/4705759/how-to-get-cpu-usage-and-ram-usage-without-exec –

+0

Không thực sự. Tôi đã nghiên cứu thông qua SO và googled rất nhiều, và tôi nghĩ rằng tôi đã đến một giải pháp ... Tôi đang xây dựng nó ngay bây giờ và khi tôi làm xong tôi sẽ đăng những gì tôi đã cố gắng để làm. Tôi đang sử dụng hàm php này với hy vọng rằng nó sẽ hoạt động - getrusage –

+0

ru_utime— Một trường thời gian struct có chứa lượng thời gian người dùng, tính bằng giây, mà quá trình đã sử dụng. Thời gian của người dùng là thời gian CPU thực hiện chương trình người dùng, thay vì trong các cuộc gọi hệ thống hạt nhân. ru_stime— Một trường thời gian cấu trúc có chứa lượng thời gian hệ thống, tính bằng giây, mà quá trình đã sử dụng. Thời gian hệ thống là thời gian CPU đã thực hiện các cuộc gọi hệ thống thay mặt cho process.Đây là hai giá trị bạn nhận được từ một mảng trong một hàm getrusage() (được xây dựng trong PHP). Về cơ bản, bạn phải chia thời gian hệ thống với thời gian của người dùng để có được mức tiêu thụ bộ xử lý tại thời điểm đó. –

Trả lời

5

Hate để trả lời câu hỏi của riêng tôi, nhưng tôi đã làm rất nhiều nghiên cứu, và ở đây tôi đi ... Về cơ bản những gì tôi đã làm là này ...

 $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; 
               } 

Như bạn có thể thấy tôi đã sử dụng một getrusage php được xây dựng trong chức năng. Mà đưa ra một mảng với một bó toàn bộ thông tin, trong đó hầu hết là khá vô dụng với tôi, ngoại trừ ru_utime.tv_usec (thời gian người dùng) và ru_stime.tv_usec (thời gian hệ thống). Để xem dung lượng CPU đã tiêu thụ bao nhiêu, chúng ta cần xem các giá trị 'thời gian người dùng' và 'thời gian hệ thống' và như bạn có thể thấy trong mã, thêm nó để có được thời gian thực tế sử dụng cpu.

+1

Hoàn toàn hợp pháp để trả lời câu hỏi của riêng bạn _and_ chấp nhận câu hỏi đó. [Thậm chí còn có một huy hiệu cho nó] (http://stackoverflow.com/badges/14/self-learner). :) – Herbert

+0

Cảm ơn Herbert ...thật tuyệt khi bạn có thể chạm một lần vào mặt sau :-D. Nó đặc biệt tâng bốc để có được một từ một hiểu biết như chính mình –

+0

* người hiểu biết :-) –

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; 
} 

Cách sử dụng:

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"; 

Trong trường hợp đơn giản nó mang lại cho giống nhau, như microtime, nhưng với độ chính xác ít hơn. Chức năng tương tự cho microtime:

function stopwatch(){ 
    static $time=0; 
    $prev=$time; 
    $time=microtime(true); 
    return $time-$prev; 
} 

Trong thô, không sử dụng như thế này:

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