2009-06-24 33 views
2

我試圖檢查一個網站是否正常運行。我目前正在使用Perl中的UserAgent庫以超時1的方式執行此操作。不過,對我而言,它仍然太慢。檢查一個網站是用Perl還是C啓動的最快方法是什麼?

我每隔五分鐘就從cron調用腳本。有很多鏈接需要檢查,腳本需要超過五分鐘才能完成執行。所以,我需要一個更有效的方法來做到這一點。它甚至可以在C.

回答

9

以下方式來加速它:

  1. 只是檢查,如果我們能在插座設置爲80端口目標服務器的,真的不發送GET HTTP請求,或者只發送一個簡單的HEAD請求。
  2. 使用多線程使其更快。
4

捲曲的解決方案-I http://hostname

第一行包含503或404,如果服務暫無數據或頁面沒有找到。

時間收益率本作捲曲-I http://www.google.com

real 0m0.125s 
user 0m0.004s 
sys  0m0.004s 

這對於捲曲-I http://www.google.cmo

real 0m0.120s 
user 0m0.004s 
sys 0m0.004s 
+0

其實我試圖用wget的,它的工作速度非常快現有的網站,但不得不等待斷開的鏈接。但我也會嘗試捲曲。 – systemsfault 2009-06-24 13:50:33

4

如果有很多的鏈接,我建議你做的節目multi-threadedfork()它幾次。這樣,你可以期待速度的提高。

+0

不幸的是,我的Perl不用多線程編譯,但我會檢查多進程選項 – systemsfault 2009-06-24 13:48:56

+2

即使沒有線程化的Perl,也可以使用線程。 ``使用叉;` - http://search.cpan.org/perldoc?forks – 2009-06-24 13:51:21

+0

噢好吧,這些知識也會對其他事情有所幫助。 Thanx Alan。但是在寫入文件時它會起作用嗎? – systemsfault 2009-06-24 13:58:10

3

從網絡獲取資源通常會涉及相當多的延遲。

正如Alan Haggai Alavi所建議的,您可能希望將工作分成幾個並行線程/進程。 Parallel::ForkManager模塊的文檔甚至有一個應該能夠建立的例子。

8

這很慢,可能是因爲你在按順序進行。

考慮使用LWP::Parallel::UserAgent - 它將同時運行多個請求。

0

我不知道一大堆C(褻瀆!),也不Perl的,但我怎麼看它,我會嘗試以下方法:

  • 一個線程做寫文件。這個線程會有一個可以寫入它的命令的地址。
  • 每個站點要檢查一個線程。線程可以使用任何方法適合您最常見的其他答案,然後通過可觸發的事件向主線程報告。

2CTS

相關問題