2009-11-30 89 views
2

更新:感謝給出的所有答案,但它們都是關於系統負載,而不是Apache。使用php監控Apache的負載

我的目標是理解,在我的php腳本(模板的)內,當apache具有高負載,並且最好是在lighttpd上分流一些流量時,這裏只是針對長輪詢並點亮apache加載。

嗨,大家好,在this question之後我已經開始在我的服務器上使用lighttpd進行長輪詢服務,以免在此類請求中核實apache和數據庫。

然後,我開始使用lighttpd也靜態內容(圖像,CSS,JS等)。

所以,實際上,我有Apache服務的example.com和lighttpd服務的polling.example.com,都使用memcache來減少數據庫命中。

在Apache中,我已經設置代理模塊代理的所有請求在polling.example.com/*

我們example.com/polling/*,我想知道是否有一種方法來檢索Apache中的Apache服務器負載,以便重定向lighttpd上的其他Ajax請求,如果apache具有高負載。

我的意思是,是這樣的:

<?php 
$apache_server_load = /*hot to retrieve this value?*/; 
if($apache_server_load >= $my_defined_max_load){ 
    $ajax_domain = '/polling'; 
}else{ 
    $ajax_domain = ''; 
} 
?> 
<script> 
    [...] 
    $.ajax({ 
     url: '<?php echo $ajax_domain; ?>/mypage.php', 
     [...] 
    }); 
    [...] 
</script> 

編輯 IM Debian的

運行

PS:我也一定會喜歡聽到的話,這個解決方案可以是一個很好的方法,但將是另一個問題..隨意評論,如果你喜歡。

回答

4

看看mod_status。一旦你得到了它成立,你要申請和解析

http://example.com/server-status?auto

你可能想緩存結果至少幾秒鐘,而不是重新做了同樣的要求爲每個請求進來。

+0

這就是我一直在尋找的! – Strae 2009-12-02 11:18:57

0

你沒有告訴任何有關你的系統。我假設你正在使用Linux或Unix。獲得當前負載的最好方法是執行uptime系統命令,該命令將給出一些狀態和負載平均值的命令。

這樣做的精確計算是依賴於系統的「高負荷」也取決於你的系統(多少個核心,是您的應用程序IO或CPU綁定...)因此,要獲得負載像

preg_match("#load average: ([0-9\.]+), ([0-9\.]+), ([0-9\.]+)#", `uptime`, $matches); 
print_r($matches); 

可能會訣竅。

+0

我在debian上運行 – Strae 2009-11-30 18:06:33

+0

這個工作,現在我需要檢查何時負載很高。謝謝! – Strae 2009-12-01 09:10:22

2

您可以通過使用php函數sys_getloadavg()找出一般的系統負載。這並不提供有關apache或lighttpd服務器的任何信息,但您可以瞭解整個服務器的負載情況。

+0

我更喜歡這種方式,是一樣的正常運行時間,但是PHP邊界 – Strae 2009-12-01 10:21:11