十一假期結束以後,發現本身的博客不時出現數據庫鏈接失敗,經檢查是mysql中止運行了。以前出現過這樣的狀況,可是沒有那麼頻繁,因而就寫了一個檢查mysql進程的腳本,若是mysql進程中止了,就自動啓動mysql進程。可是此次的問題是,mysql剛一重啓,沒過多久就又掛了。php
因爲以前問題沒這麼嚴重,而十一期間有沒有對博客作什麼修改。我一度認爲是阿里雲的問題,不穩定或者逼低配置用戶升級(個人阿里雲是最低配置512M內存)。查看mysql的日誌,裏邊報有pthread_create returned 11,在網上查瞭解決方案,修改了ulimit -s,ulimit -u卻沒有任何做用。後來查看內存(free -m),只剩下可憐的三、4MB,因爲是隻有一個博客,實在不想去升級服務器。因而又按照網上的辦法關閉了mysql的innodb引擎,依然無濟於事。使用top命令查看,發現有不少個php-fpm進程,而且佔據了大量內存。我嘗試將php-fpm重啓,發現很快又產生大量php-fpm進程,內存迅速被耗盡。嘗試修改了php-fpm的配置,依然沒有做用。mysql
當我查看了nginx的訪問日誌以後,才真正找到問題所在,有一個IP不停地刷項目根目錄下的xmlrpc.php文件,因此php-fpm的進程就會一直滿負荷運行,將系統資源耗盡。nginx
根據關鍵字xmlrpc.php百度了一下,原來這是攻擊wordpress博客的一種常見方式,網上有三種解決方案,第一種是屏蔽 XML-RPC (pingback) 的功能,add_filter('xmlrpc_enabled', '__return_false');第二種方法就是經過.htaccess屏蔽xmlrpc.php文件的訪問;第三種一樣的是修改.htaccess文件,若是有用戶訪問xmlrpc.php文件,讓其跳轉到其餘不存在的頁面,下降自身網站的負擔。sql
因爲個人網站用不到xmlrpc的功能,因此我就簡單暴力的把這個文件改了個名字,這樣一來非法的訪問就直接被nginx阻止了,問題獲得解決,內存的佔用一下就下來了。數據庫
除非註明,文章均爲( 江上輕煙 )原創,轉載請保留連接: http://www.zhizhi123.com/?p=308服務器