Warning: include(/home/blog66rr/public_html/wp-content/plugins/hyper-cache/cache.php): failed to open stream: No such file or directory in /home/blog66rr/public_html/wp-content/advanced-cache.php on line 24

Warning: include(/home/blog66rr/public_html/wp-content/plugins/hyper-cache/cache.php): failed to open stream: No such file or directory in /home/blog66rr/public_html/wp-content/advanced-cache.php on line 24

Warning: include(): Failed opening '/home/blog66rr/public_html/wp-content/plugins/hyper-cache/cache.php' for inclusion (include_path='.:/opt/cpanel/ea-php70/root/usr/share/pear') in /home/blog66rr/public_html/wp-content/advanced-cache.php on line 24
php寄信功能導致web server的癱瘓 – unethost無限空間虛擬主機 技術分享部落格

php寄信功能導致web server的癱瘓

Service-Temporarily-Unavailable_wp

我們曾在之前介紹過自己安裝電子報系統:如何安裝phplist正體中文版(無痛安裝教學)
或是有專門的電子報發送平台:用Madmimi來發電子報

如果電子報會員,沒有超過一個基數(可能是五萬,十萬,或二十萬封),
將派報功能和web server擺同一部,可能並不會產生問題,但是量如果太大,
就要考慮獨立一台vps以上的規格,專門去發送。

請往下閱讀,可得知我們發生的狀況。

發生狀況(事後得知):
有一平台站長,其會員註冊已達近百萬人,
每月會固定發送電子報,給會員做新內容介紹。
在以往的發送中,會因為大量發送而吃掉大部份主機資源,
因而導致網站開啟不順,所以這次特定設定排程,
讓信件能夠批次處理,結果引起其他問題。
(發送程式是自己開發撰寫的)

在完成設定後,就造成網站斷斷續續的,
以及會秀出資源不足的錯誤訊息,
也就是: Service Temporarily Unavailable
不過我們在接手處理之時,並未被告知有這樣的發送。

如何檢查狀況?
在之前的介紹中,我們尋求快速解決,
會直接針對網頁的錯誤狀況去作下列查看及判斷:
1.主機資源(loading是否過高)
2.web log狀況(是不是有大量error)
3.主機client連線數
先針對幾個重點去檢查後,發現主機的連線數忽高忽低,
異常的連線,幾乎是一種攻擊,而且時間點剛好是離峰狀態,
並不會有特別大量連線,我們緊急架設了外部防火牆去防禦。

防火牆解決不了!!
網站前面套上防火牆,在我們一般處理中,幾乎是十拿九穩的,
但觀察15~30分鐘後又發現,連線數還是忽高忽低,
連線數一高,web馬上就異常,而且是很有規律性的,
這是超乎想像的跌破眼鏡,以為是遇到超級駭客了,
就連絡機房,著手幫server更換新ip,讓舊有的ip失效,
因駭客不知新ip,這樣攻擊點就會完全落在防火牆上。
更換好後,還是有規律性的斷線……

如何發現問題?
當這樣的處理後,已經不能用被攻擊的思路來解決,
就要重新檢查所有service的log(因時間問題,出動兩人查看),
並透過top觀察,到底哪一樣service在作怪,除php之外,
還發現exim被執行的過度頻繁,在往exim去查看,
原來有數十萬封信塞住了80 port,導致 web server斷線。

真正解決方式:
1.先將數十萬封信件快取砍掉。
2.查到寄信程式的路逕,並先將檔案凍結,使其無法啟用。
在觀察半小時,一切都相當正常,原來是該寄信程式引起的。

這個狀況下的思維:
1.雖然一般寄信是用 smtp port,偏偏這個是由php程式所開發,
所以同時也有使用到80 port在控制。
2.當排程設定時,其程式也啟用一個多線程的執行,結果查看80 port的
連線數,就幾乎暴滿(達使用上限),因而排擠到真正的web server的使用。
3.如果程式無法修改,最好使其獨立於一個設備中進行發送,
這樣才不會又影響到網站瀏覽。

結論:
因我們手邊有時同時處理不同事務,所以處理速度要快,
依據的是一套sop流程,如果發生新的問題,
又有別於原先的sop,這時就得在處理事件後,
在去修正內部sop的處理步驟。

(本篇教學由unethost.com客服撰寫)

延伸閱讀:如何備份Cpanel後台安裝的套裝程式?

安裝上述的軟體,我們提供虛擬主機試用,七天滿意保證,
功能完整使用不受限制,歡迎點我申請。