Web服務器的急救工具箱 |
發布時間: 2012/8/9 15:43:13 |
就像家庭中90%的維修活都能用螺絲刀和扳手來完成,Web服務器也不例外。讓我們來看看這些工具。
1、服務器響應緩慢 如果服務器響應緩慢,需要做的第一件事情就是判斷問題來自服務器還是網絡,第一個工具就是uptime。 uptime 會顯示服務器的平均負載,如果最后的這個數字高于 2 或者 3 ,問題的原因就在于有一些進程占用系統太多資源。如果這個數字不是很高,你就需要考慮網絡的因素了。 如果看到的高的負載的話,就需要使用 top 命令來確定那些進程在消耗系統資源。 top 命令缺省顯示10條進程,當然你可以使用 top N 來指定需要查看的進程數。 更加詳細的進程列表可以使用 ps -auxw 命令 比較 Web 進程的“硬”限制(Apache 編譯時的限制)和“軟”限制(httpd.conf的限制),如果兩者的數字接近,那么你就要考慮升級硬件或者重新編譯 Apache 了。 2、未授權登錄 如果擔心有非法用戶闖入系統,最簡單的辦法就是用 w 命令來檢查。 如果真的看到有非法用戶在你的系統上,可以立即 kill 他的進程, 用 vipw 命令把他的口令修改為“*”,或者把 shell 改為 /sbin/nologin。 3、服務不能啟動或者崩潰 如果 Web 服務器不能啟動或者啟動時崩潰,就需要使用 apachectl 命令來找到原因。首先用 apachectl configtest 命令檢查 httpd.conf 的合法性。但是 apachectl 并不是萬能的。如果問題依然不能解決,我們就應該檢查錯誤日志。另外,apachectl 檢查 /var/run/httpd.pid 文件來找到原來的進程,如果進程號不同,apachectl stop 命令不會工作。這種情況下就需要使用 ps 命令來 kill 對應的進程。 4、網絡檢測 查找因為網絡問題引起的原因時,第一個簡單的命令就是 ping。 如果 ping 的結果看起來很正常,或許就需要使用比較大的包來試一下,ping 的缺省包大小為 56 字節,我們用 -s 指定包大小為 2048 字節來試一下。采用大的包之后,返回時間延長很正常,但是非常長的時間返回或者包丟失就顯示網絡有問題了。 5、交叉信號 如果懷疑服務器和交換機之間的網絡配置有問題,可以采用 netstat -finet 命令來顯示打開的端口以及連機的外部服務。 如果你關心自己的服務器是否遭到攻擊,就會顯示內核的內存使用超常,可以采用 netstat 的 -m 參數來查看。 如果你發現 httpd 的負載不是很重,但是網絡資源占用的內存還是很大的話,可以考慮關閉一些服務和端口。 6、網絡問題 如果網絡發生了問題,就需要使用 ifconfig 命令來檢查網卡是否正常。這個命令會顯示網卡的 IP 地址,掩碼,雙工,速率等。 常見的問題是網卡的速率或者雙工設置和交換機端口不一致。特別是設置了“autosense” 選項,但是卻沒有成功。 可以采用 ifconfig down eth0 [options] 來關閉。 7、權限問題 有些稀奇古怪的問題,很可能來自沒有剩余空間。可以采用 df 命令來檢查剩余的硬盤空間。一個簡單的例子,就是 PHP 的session 無效了,原因就是寫入 session 的文件系統 /tmp 已經滿了。 有些問題就是沒有設置好權限,常見的問題就是沒有為 CGI 腳本設置 x 權限,沒有為一些目錄設置 rx 權限。 8、常見的懷疑對象 如果有問題發生,其實第一件事就應該是檢查系統日志:/var/log/messages。 如果不能在 /var/log/ 目錄找到有些日志文件,可以查看 /etc/syslog.conf 的配置。 對于 Apache 來說,就需要檢查 [apache_dir]/logs/error _log 來確定不能啟動的原因。 以上是筆者應對Web 服務器應急措施的一些個人經驗,如果你有好的經驗,筆者熱情歡迎您的交流。 本文出自:億恩科技【www.artduck.net】 |