服務器遇到問題,從何下手?
不要急着衝向你的服務器, 在這之前, 你對它和具體的問題了解多少?
必須知道的
- 問題的確切症狀? 丟包? 錯誤?
- 問題什麼時候被發現?
- 可以重現麼?
- 有什麼規律(例如每小時發生一次)?
- 在服務器的最後一次改變(代碼, 服務配置, 內存)?
- 問題會影響客戶的哪個部分(登錄, 註銷, )?
- 有監控平臺麼? Munin, Zabbix, Nagios, NewRelic..
- 日志(集中化)? Loggly, Airbrake, Graylog
上面的最後兩項是最方便直觀的信息來源, 但也別期望太多;爲了搞定問題,繼續往下看
誰登陸了?
1 2 |
|
不是很重要, 但是你在找問題時不希望還有其他人在擺弄的服務器。廚房裏一個廚師足矣
之前做了哪些操作?
1
|
|
看歷史記錄總是好的;配合之前誰在操作的命令.
快速回憶一下, 你也許小要升級環境變量 HISTTIMEFORMAT
去跟蹤那些命令運行的時刻.沒什麼比調查一個過期命令列表更讓人沮喪的了。
正在運行哪些程序i?
1 2 |
|
如果覺得ps aux
太羅嗦, pstree -a
會給你一個漂亮的展示關於什麼正在運行以及誰調用了它
監聽服務
1 2 3 4 5 |
|
我更傾向分開運行這些命令, 主要是因爲不喜歡同時看所有的服務。雖然netstat -nalp
以可以做到。甚至我會省略數字化
選項(IPs是易讀點的)
確定正在運行的服務以及他們是否應該運行。尋找多個監聽端口。通過ps aux
的輸出匹配進程ID;這個是很有用的特別當你同時結束2~3個Java 或者 Erlang進程
CPU 和 RAM
1 2 3 4 |
|
這些命令回答以下問題:
– 還有空閒的內存? 還是正在交換區 ?
– 還有CPU剩餘麼? 服務器有多少CPU核心可用? 這些核心中是否有超載的?
– 哪個項目負載最多? 平均負載多少?
– 詳細了解命令man
,你懂的
– 这里还有一点如果cpu不高,但是服务里面响应时间很大,那么就是程序里的代码卡住,怎么找出哪里卡住,可以通过strace -p yourpid
先查看你的程序pid然后用此命令
Hardware
1 2 3 |
|
TODO: explain commands
IO 性能
1 2 3 4 |
|
這幾個是非常有用的命令去分析後臺性能;
- check 硬盤使用:
- 交換區目前有沒有使用
- 什麼程序再使用CPU: 系統? 用戶? stolen ?
dstat
一直是我的最愛. IO消耗? mysql 阻塞資源? php進程在使用的你io…
掛載點和文件系統
1 2 3 4 5 6 7 |
|
- 多少文件系統被掛載
- 過期的文件系統
- 硬盤空間是否有剩餘
- 大文件還沒有清除
- 如果硬盤有問題還有空間去加個分區?
內核,中斷, 網絡使用情況
1 2 3 4 5 |
|
TBC