服務器常見問題排查思路
服務器問題 排查思路
一.盡可能搞清楚問題的前因后果
1.故障是什么時候發現的?
2.故障的表現是什么?無響應?報錯?
3.最后一次對整個平台進行更新的內容是什么(代碼、服務器等)
二.當前有誰在,做過什么操作
1. w/who
2. last
3. history
三.現在運行的進程有什么
1. pstree -a //以樹狀圖顯示進程間的關系
2. ps -aux
3. netstat -n -o -a |grep 443 |wc -l 查看各端口連接數
netstat -n -o -a |grep 80 |wc -l
4.netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 查看http的進程數
四.監聽的網絡服務
1. netstat -nalp
2.netstat -ntlp
3.netstat -nulp
-n或--numeric 直接使用IP地址,而不通過域名服務器。
-a或--all 顯示所有連線中的Socket。
-l或--listening 顯示監控中的服務器的Socket。
-p或--programs 顯示正在使用Socket的程序識別碼和程序名稱。
-t或--tcp 顯示TCP傳輸協議的連線狀況。
-u或--udp 顯示UDP傳輸協議的連線狀況。
五. 內存 CPU 磁盤空間
1.內存
(1) free -m

第一行 : 內存總數 已使用內存數 空閑內存數 廢棄內存數 緩存內存數 緩存內存數
第二行:
- buffers/cache: 已使用內存數 (指的第一行中的used – buffers – cached)
+ buffers/cache: 空閑內存數(指的第一行中的free + buffers + cached)
第三行: 指交換分區
Linux的Swap類似於Windows的虛擬內存,就是把一部分硬盤空間虛擬成內存使用,用來解決內存容量不足的問題。如果有使用到Swap,說明服務器該升級配置了。
2.CPU
(1)uptime

系統時間 系統運行時間 已登錄用戶的數量 系統的平均負載量: 過去一分鍾 五分鍾 十五分鍾
注:有一種說法,當load avarage <3 系統良好,大於5 則有嚴重的性能問題
(2)top

第一行同uptime
第二行為進程的信息
總進程數 正在運行的進程數 睡眠進程數 停止進程數 僵屍進程數
第三行為CPU信息
us: 用戶空間占用CPU百分比
sy 內核空間占用CPU百分比
ni 用戶進程空間內改變過優先級的進程占用CPU百分比
id 空閑CPU百分比 //比較重要
wa 等待輸入輸出的CPU時間百分比
第四、五行為內存信息
Mem : 8169876 k total , 7686472 k used , 483404 k free , 35272 k buffers
物理內存總量 使用的物理內存總量 空閑內存總量 用作內核緩存的內存量
Swap : 4096532 k total , 160 k used , 4096372 k free , 2477532 k cached
交換分區總量 使用的交換區總量 空閑交換區總量 緩沖的交換區總量
3.磁盤空間
(1) df -h 顯示目前在Linux系統上的文件系統的磁盤使用情況統計

文件系統的名稱 總內存 使用中的內存 可使用的內存 使用的內存占總內存的百分比 掛載點
(2) du -sh* 查看當前文件夾下所有目錄大小

六.io性能/
1.iotop

讀取速度 寫入速度
2. dstat --top-mem --top-io --top-cpu 查看當前占用內存、io、CPU最高的進程信息

一、解決500錯誤:
1、500錯誤指的是服務器內部錯誤,也就是服務器遇到意外情況,而無法履行請求。
2、500錯誤一般有幾種情況:
(1)web腳本錯誤,如php語法錯誤,lua語法錯誤等。
(2)訪問量大的時候,由於系統資源限制,而不能打開過多的文件
3、一般分析思路:
(1)查看nginx error log ,查看php error log
(2)如果是too many open files,修改nginx的worker_rlimit_nofile參數,使用ulimit查看系統打開文件限制,修改/etc/security/limits.conf
(3)如果是腳本的問題,則需要修復腳本錯誤,並優化代碼
(4)各種優化都做好,還是出現too many open files,那就要考慮做負載均衡,把流量分散到不同服務器上去了
二、解決502,504錯誤
1、使用nginx代理,而后端服務器發生故障;或者php-cgi進程數不夠用;php執行時間長,或者是php-cgi進程死掉;已經fastCGI使用情況等都會導致502、504。
2、502 是指請求的php-fpm已經執行,但是由於某種原因而沒有執行完畢,最終導致php-fpm進程終止。
一般來說,與php-fpm.conf的設置有關,也與php的執行程序性能有關,網站的訪問量大,而php-cgi的進程數偏少。針對這種情況的502錯誤,只需增加php-cgi的進程數。
具體就是修改/usr/local/php/etc/php-fpm.conf文件,將其中的max_children值適當增加。
這個數據要依據你的VPS或獨立服務器的配置進行設置。一般一個php-cgi進程占20M內存,你可以自己計算下,適量增多。
/etc/init.d/php-fpm restart 然后重啟一下.
3、504 表示超時,也就是客戶端所發出的請求沒有到達網關,請求沒有到可以執行的php-fpm。與nginx.conf的配置也有關系。
