Re: [請益] 取得CPU使用率
※ 引述《ckf (聽某嘴大富貴)》之銘言:
: 因為要在Windows上要取得CPU的使用率
: 故參考phpSysInfo(http://phpsysinfo.sourceforge.net/)
: 網頁部份透過jQuery每秒取得一次CPU使用率
: 經過長時間觀察發現httpd消耗的記憶體會慢慢增加
: 把這個部分的javascript code註解掉則不會
: 因為HTTP Request的部分跟一般沒什麼不同
: 所以懷疑是不是PHP使用new COM()的關係??
: 用了unset似乎也沒有用(記憶體還是會上升)
你可以用 memory_get_usage() 來得到目前記憶體用量
用法:
int memory_get_usage ( [ bool $real_usage = false ] )
例如:
memory_get_usage(TRUE) -> 表示總共用掉系統多少記憶體
memory_get_usage(FALSE) -> 表示 php 去 emalloc() 多少記憶體
回傳單位是 bytes
另外一開始觀察建議先用 memory_get_usage(FALSE);
因為它初始化就會要掉 256KB 系統記憶體,不夠再去和作業系統要
如果妳的 PHP 沒用到超過 256 KB,那畫面上會一直是 256KB 。
: 還請板上的大大指導 謝謝
: PHP Source Code:
: function loadavg ()
: {
: $objLocator = new COM("WbemScripting.SWbemLocator");
: $wmi = $objLocator->ConnectServer();
: $buffer = _GetWMI( $wmi , "Win32_Processor", array( "LoadPercentage" ) );
: $cpuload = array();
: for( $i = 0; $i < count( $buffer ); $i++ ) {
: $cpuload['avg'][] = $buffer[$i]["LoadPercentage"];
: }
: unset($objLocator);
: return $cpuload['avg'];
: }
: function _GetWMI($wmi, $strClass, $strValue = array() ) {
: $objWEBM = $wmi->Get($strClass);
: if( PHP_VERSION < 5 ) {
: $objProp = $objWEBM->Properties_;
: $arrProp = $objProp->Next($objProp->Count);
: $objWEBMCol = $objWEBM->Instances_();
: $arrWEBMCol = $objWEBMCol->Next($objWEBMCol->Count);
: } else {
: $arrProp = $objWEBM->Properties_;
: $arrWEBMCol = $objWEBM->Instances_();
: }
: foreach($arrWEBMCol as $objItem)
: {
: @reset($arrProp);
: $arrInstance = array();
: foreach($arrProp as $propItem)
: {
: eval("\$value = \$objItem->" .$propItem->Name .";");
: if( empty( $strValue ) ) {
: $arrInstance[$propItem->Name] = trim($value);
: } else {
: if( in_array( $propItem->Name, $strValue ) ) {
: $arrInstance[$propItem->Name] = trim($value);
: }
: }
: }
: $arrData[] = $arrInstance;
: }
: unset($objWEBM);
: return $arrData;
: }
在 function 裡面的東西處理完他就 GC 掉了, 有沒有 unset 其實沒差。
然後你可以安裝 XDebug 來追蹤看記憶體用量..
http://derickrethans.nl/xdebug-and-tracing-memory-usage.html
不過在這之前,先確認一下...
你的連線有 keep alive 嗎? connection timeout 是多少?
記憶體用量緩慢增加是或許因為連線越來越多也有可能。
你用 Windwos 可以看一下 httpd 跑了多少 Child Process 出來..
工作管理員 -> 處理程序 -> 顯示所有來自使用者的處理程序
要不然他不會全部顯示...
--
The Internet: where men are men, women are men, and children are FBI agents.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.220.104.63
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
PHP 近期熱門文章
PTT數位生活區 即時熱門文章