2013-03-04 58 views
2

我在我的網站上有下面的PHP。XML通過FTP和Memcache突然減緩我的PHP網站....從今天開始

$xml = $my_memcache->load('the_xml'); 
if(empty($xml)){ 
     $username = 'username'; 
     $password = 'password'; 
     $host = 'ftp.thirdpartysite.co.uk'; 
     $file = 'file.xml'; 
     $xml = file_get_contents("ftp://$username:[email protected]$host/$file"); 

     $my_memcache->save($xml, 'the_xml' , array(), '1800'); 

} 
$php_array = $this->parseXml($xml); 

$html = $this->gatherHtml($php_array); 
return $html; 

它查找鍵/值的memcache。 它如果找不到密鑰,它將執行FTP獲取內容,然後將其保存到memcache 5分鐘。我只希望1位用戶每5分鐘爲所有用戶完成此操作。 最後,它使用我的'parseXml()'函數將XML解析爲一個php數組,然後使用我的'gatherHtml()'將PHP數組轉換爲HTML並返回該數組。

它已經工作了很長時間,但突然間開始讓我的網站變得非常慢。很長一段時間我沒有更改過代碼。我在2臺服務器上負載均衡,內部交換機的出站帶寬也有所增加。 我已經檢查了負載,並且它在低線程下也不會像最大線程下的平均DOS攻擊。

任何想法請(FTP,memcache,PHP,XML)?

+0

你必須找出哪些部分是緩慢的正是 - 的FTP,或內存緩存的一部分。 – 2013-03-04 15:01:24

+0

檢查ftp是不是劫持。可能是一個DNS查找,可能是一個遠程服務器故障(例如,試圖做你的IP反向DNS查找),等等等等等等。無論什麼時候你依賴遠程服務,當你身邊沒有什麼改變時,總是認爲它是遠程服務的錯誤。 – 2013-03-04 15:04:48

+0

什麼都沒有改變網絡或DNS端發話給管理員和文件是在那裏的FTP。我的代碼沒有改變。 – 2013-03-04 15:12:37

回答

2


那麼,如果它沒有它聽起來像它可能是一些關閉的第三方DNS或網絡層,在這種情況下,XML文件。
如果XML的大小已經增加,那麼現在可能會超過的最大1MB大小的Memcache值。來源here。我建議通過FTP客戶端(如Filezilla)(或通過命令行)來檢查。

如果文件大於1MB,則可能發生以下情況。

網站慢:
如果是這樣的話,不僅會在每次用戶不只是沒有在緩存中找到的關鍵,也將敲定Memcache的嘗試和存儲,每次都會失敗,時間的文件太大,必須在完成用戶頁面請求之前等待Memcache 超時

帶寬高:
我注意到您使用內存緩存,可能有每個Web服務器上的一個節點?如果這是真的,那麼數據可能會嘗試跨兩個Memcache節點寫入,可能會導致內部交換機上的帶寬峯值。 要確認這一點,請嘗試使用tcpdump來檢查Memcache是​​否是高帶寬的罪魁禍首。

#tcpdump -vvxXs 1500 -i bond0 'port 11211' 

用你所謂的NIC替代bond0。

可能的解決辦法:
嘗試,然後再解析XML一旦你有你需要寫/存儲什麼Memcache中。這應確保您始終保持Memcache的最大值不超過1MB。

$php_array = $my_memcache->load('the_php'); 
if(empty($php_array)){ 
     $username = 'username'; 
     $password = 'password'; 
     $host = 'ftp.thirdpartysite.co.uk'; 
     $file = 'file.xml'; 
     $xml = file_get_contents("ftp://$username:[email protected]$host/$file"); 

     $php_array = $this->parseXml($xml); 

     $my_memcache->save($php_array, 'the_php' , array(), '1800'); 
} 

$html = $this->gatherHtml($php_array); 
return $html; 

不知道如果這就是正確的,但希望幫助

+0

哈哈在ftp區域的文件是1.5mb。複製你的解決方案代碼,似乎已經排序。謝謝:) – 2013-03-04 15:32:37

+0

高興。此外,如果您正在使用Memcache> = 1.4.2,則可以配置值的最大值。請參閱1.4.2發行說明。 'HTTP:// code.google.com/P /分佈式緩存/維基/ ReleaseNotes142' – 2013-03-04 15:34:26