Re: [請益] 取得CPU使用率

看板PHP作者 (任性)時間15年前 (2010/03/27 13:26), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《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
文章代碼(AID): #1BhPRtsY (PHP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1BhPRtsY (PHP)