服務器宕機緣由不少,資源不足、應用、硬件、系統內核bug等,如下一個小例子linux

服務器宕機了,首先得知道服務器宕機的時間點,而後分析日誌查找緣由ios

1.last reboot 此命令能夠查看主機起來的時間,不是宕機的時間web

 

 

reboot system boot 2.4.21-27.ELsmp Mon Sep 16 02:28 (07:02) //這個是主機起來的時間算法

 

2.sar -u -f /var/log/sa/sa16 |more 查看歷史cpu狀況緩存

 

 

01:10:00 AM all 12.18 0.00 3.90 36.97 46.95服務器

01:20:00 AM all 25.21 0.00 2.39 24.43 47.96網絡

01:30:00 AM all 3.72 0.00 4.03 44.92 47.32ide

01:40:00 AM all 1.65 0.00 2.45 47.59 48.31工具

01:50:00 AM all 31.85 0.00 2.86 18.03 47.26性能

02:00:00 AM all 48.40 0.00 2.01 2.46 47.13 //這裏纔是主機宕機的時間,要看宕機緣由看着個時間點的日誌

Average: all 10.77 0.00 2.00 14.76 72.47

 

02:28:07 AM LINUX RESTART

 

02:30:00 AM CPU %user %nice %system %iowait %idle

02:40:00 AM all 0.44 0.00 1.11 0.90 97.55

02:50:00 AM all 0.94 0.00 1.03 0.36 97.67

 

Sep 16 02:00:02 ilearndb snmpd[1138]: [smux_accept] accepted fd 11 from 10.0.1.145:46748

Sep 16 02:01:53 ilearndb modprobe: modprobe: Can't locate module eth2

Sep 16 02:01:53 ilearndb last message repeated 3 times

Sep 16 02:05:04 ilearndb snmpd[1138]: [smux_accept] accepted fd 11 from 10.0.1.145:46824 //系統裏面看到2:05分還有日誌,說明2:00的時候主機hang住了,sar已經取不了數據

 

在看sar的數據,發現(用到了swap,而且使用率在上升),是內存不足致使的主機hang住了。

# sar -r -f sa16|more

12:00:00 AM kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad

12:10:00 AM 27784 2027668 98.65 14012 1668488 7436568 411176 5.24 70372

12:20:00 AM 22880 2032572 98.89 15292 1673892 7436576 411168 5.24 70536

12:30:01 AM 22068 2033384 98.93 16280 1672976 7436576 411168 5.24 70536

12:40:00 AM 22848 2032604 98.89 17760 1671660 7436576 411168 5.24 70540

12:50:00 AM 23048 2032404 98.88 18744 1670228 7436576 411168 5.24 70580

01:00:00 AM 27328 2028124 98.67 19616 1664684 7436648 411096 5.24 70572

01:10:00 AM 18760 2036692 99.09 8424 1714120 7418172 429572 5.47 28584

01:20:00 AM 18584 2036868 99.10 14596 1731984 7413060 434684 5.54 17520

01:30:00 AM 22208 2033244 98.92 2436 1739972 7421352 426392 5.43 17520

01:40:00 AM 18448 2037004 99.10 3940 1742296 7421444 426300 5.43 17600

01:50:00 AM 17880 2037572 99.13 6480 1727696 7410060 437684 5.58 18028

02:00:00 AM 18124 2037328 99.12 10916 1718740 7408268 439476 5.60 17644

Average: 21663 2033789 98.95 12375 1699728 7425990 421754 5.37 45003

 

02:28:07 AM LINUX RESTART

 

02:30:00 AM kbmemfree kbmemused %memused kbbuffers kbcached kbswpfree kbswpused %swpused kbswpcad

02:40:00 AM 1517792 537660 26.16 27452 393360 7847744 0 0.00 0

02:50:00 AM 1337060 718392 34.95 29020 562108 7847744 0 0.00 0

03:00:00 AM 1330228 725224 35.28 30468 563964 7847744 0 0.00 0

03:10:00 AM 1218940 836512 40.70 31964 668272 7847744 0 0.00 0

03:20:00 AM 1218008 837444 40.74 33016 670572 7847744 0 0.00 0

03:30:00 AM 1208612 846840 41.20 34072 673436 7847744 0 0.00 0

03:40:00 AM 1200904 854548 41.57 34212 678896 7847744 0 0.00 0

03:50:00 AM 1201228 854224 41.56 35204 679216 7847744 0 0.00 0

 

 

能夠考慮給主機增長1G內存。


附:性能瓶頸分析

CPU資源的過分使用,會形成系統中出現大量的等待進程,致使應用程序響應緩慢,而進程的大量增長又會致使系統內存資源的增長,當物理內存耗盡時,系統會使用虛擬內存,而虛擬內存的使用又會形成磁盤IO的增長並加大CPU的開銷。

一、查看cpu是不是瓶頸

可使用不少工具:topas、vmstat、sar、top(命令的使用網上有不少資料介紹)

目前大部分CPU在同一時間只能運行一個線程,超線程的處理器能夠在同一時間處理多個線程,所以能夠利用超線程特性提升系統性能。

在linux系統下只有運行SMP內核才能支持超線程,可是安裝的CPu數量越多,從超線程得到的性能提高越少。

另外linux內核會將多核的處理器當作多個單獨的CPU來識別,例如,兩個4核的CPU會被當成8個單個CPU,從性能角度講,兩個4核的CPU總體性能要比8個單核CPU低25%-30%。

可能出現CPU瓶頸的應用有郵件服務器、動態web服務器等。

CPU物理個數 》cat /proc/cpuinfo |grep "physicalid" |sort |uniq |wc -l

查看cpu幾核 》cat /proc/cpuinfo |grep"cores"|uniq

邏輯cpu個數 》cat /proc/cpuinfo|grep processor|wc –l

 

CPU型號查看 》dmidecode |grep -B5 -A5 -i cpu

 

vmstat 虛擬內存統計

例: vmstat 2 3

輸出項的解釋以下:

procs

* r列表示運行和等待cpu時間片斷的進程數,這個值若是長期大於系統cpu個數,說明cpu不足
* b列表示在等待資源的進程數,好比正在等待IO或者內存交換等等

 

memory

* swap列表示切換到交換區的內存大小(KB爲單位),若是swap的值不爲0或者比較大,只要si和so長期爲0,通常不是性能問題
* free列表示當前空閒的物理內存數量(以KB爲單位)
* buff列表示buffers cache的內存數量,通常對塊設備的讀寫才須要緩衝
* cache列表示page cached的內存數量,通常做爲文件系統進行緩存,頻繁訪問的文件都會被緩存。若是cache值較大,說明緩存文件較多,若是此時io中的bi比較小,說明文件系統效率比較好。

 

swap

* si列表示由磁盤調入內存,也就是由內存進入內存交換區的內存大小,單位KB/秒
* so列表示由內存調入磁盤,也就是由內存交換區進入內存的大小,單位KB/秒。
在通常狀況下,si、so的值都爲0,若是si、so值長期不爲0,則表示系統內存不足,須要增長系統內存。

 

io

io項顯示磁盤讀寫狀況
bi列表示從塊設備讀入數據的總量(即讀磁盤)(kb/s)
bo列表示寫到塊設備的數據總量(即寫磁盤)(kb/s)
bi+bo的參考值爲1000,若是超過1000,並且wa值較大,則表示系統磁盤IO有問題,應該考慮提升磁盤的讀寫性能。

 

system

顯示採集間隔內發生的中斷數
in列表示在某一時間間隔內觀測到的每秒設備中斷數
cs列表示每秒產生的上下文切換次數
上面的兩個值越大,由內核消耗的CPU時間越多。

 

CPU

顯示了CPU的使用狀態,此列是關注的重點。
us列顯示了用戶進程消耗的CPU時間百分比。us的值比較高時,說明用戶進程消耗的CPU時間多,可是若是長期大約50%,就須要考慮優化算法或程序。
sy列顯示了內核進程消耗的CPU時間百分比。sy的值較高時,說明內核消耗的CPU資源不少。
根據經驗,us+sy的參考值爲80%,若是us+sy大約80%,說明可能存在CPU資源不足。
id列顯示了CPU處在空閒時間的時間百分比。
wa列顯示了IO等待所佔用的CPU時間百分比。wa值越高,說明IO等待越嚴重。根據經驗,wa的參考值爲20%,若是wa超過20%,說明IO等待嚴重,引發IO等待的緣由多是磁盤大量隨機讀寫形成的,也多是磁盤或者磁盤控制器的帶寬瓶頸(主要是塊操做)形成的。
綜上所述,在對CPU的評估中,須要重點注意procs項中r列的值和CPU項中us、sy和id列的值。

 

 

好: user%+sys%<70%

壞: user%+sys%=85%

糟糕: user%+sys%>=90%



 

二、查看內存是否瓶頸

內存不足時,可使用工具觀察到頻繁使用虛擬內存,虛擬內存能夠緩解物理內存的不足,可是虛擬內存的過多佔用會致使應用程序的性能明顯降低。

服務器內存查看 》dmidecode |grep -B5 -A5 -i memory |grep Size

free命令

free是監控linux內存使用的指令。
[plain] view plain copy
  1. free -m

  2. total used free shared buffers cached

  3. Mem: 48291 33630 14660 0 24 22437

  4. -/+ buffers/cache: 11168 37122

  5. Swap: 0 0 0

free -m表示查看以M爲單位的內存使用狀況,重點須要關注free列與cached列的輸出值。
由輸出能夠得知,系統共有48G內存,系統空閒內存還有14660MB,其中buffer cache佔了24MB,page cache站了22437MB。
由此可知系統緩存了不少的文件和目錄,對於應用程序來講還有37122MB內存能夠用,固然這37122MB內存包含了buffer cache和page cache的值,從swap項看出,交換分區還未使用,從應用的角度來講,系統的內存資源還很是充足。

vmstat命令能夠查看
好:SwapIn(si) = 0 SwapOut(so) = 0

壞:Per CPU with 10page/s

糟糕:more swap In & swap out




3. 磁盤IO性能

命令 iostat 可獲得相應的數值

好:iowait%<20%

壞:iowait% = 35%

糟糕:iowait%>=50%



4.網絡帶寬

 

查詢QLogic HBA卡 》lspci | grep -i Fibre

 

 

 

 

 

user%表示CPU處在用戶模式下的時間百分比

sys%表示CPU處在系統模式下的時間百分比

iowait%表示CPU等待輸入輸出完成時間的百分比

swap in表示虛擬內存的頁導入,從SWAP DISK交換到RAM

swap out表示虛擬內存的頁導出,從RAM交換到SWAP DISK

 

我的總結:

 

總結論:

操做建議:

 
 
 
 

序號

檢查點

檢查方法

判斷依據

結果判斷

 

1

系統的Uptime時間

uptime
last reboot

若是發現系統uptime時間很短,則須要檢查系統是否重啓過
檢查系統最近的重啓時間

   

2

檢查文件系統的使用率

df -h
du -hs * | sort -n (*用目錄路徑代替)

對於OS的文件系統,若是發現使用率高於90%就應該再進一步檢查是什麼緣由引發的文件系統使用率上漲。對於應用系統使用的文件系統,咱們重點在於發現有沒有文件系統使用率到達95%以上,如有,把狀況報告給相關的人員。

   

3

檢查網絡狀態

ping

網絡連通性檢查

   

ifconfig

檢查當前處於up狀態的網卡

   

mii-tool

link ok 顯示各個網卡所接鏈路的情況

   

ethtool eth[n]

查看指定網卡所接鏈路的情況

   

ls -al /etc/resolv.conf
ls -al /etc/nsswitch.conf

確保以上文件的權限是other可讀

   

cat /etc/hosts

主機名在hosts文件中只應該與機器的物理IP映射,若是出現有機器的浮動IP與主機映射就須要作進一步檢查

   

netstat –rn
ip route ls table f5
ip rule ls

正常狀況下應該只設置了網關,而沒有其它的靜態路由,若是在列表中發現有其它的路由,則須要確認是否正確

   

view /etc/sysconfig/network-scripts/ifcfg-eth*

先檢查子網掩碼設置是否正確
再檢查是否ip是否吻合

   

4

檢查ntp時間服務器設置

ntpq -p

正常狀況下應該有以下輸出信息:
[root@cnsz01pl0041 ~]# ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*10.0.16.238 118.143.17.82 2 u 24d 1024 0 3.684 0.247 0.000

   

5

進程狀態

ps –ef | grep defunct;ps -ef | wc -l;ps -ef | grep -v root | wc -l

若是系統中存在大量的殭屍進程則屬於異常的狀態須要檢查處理。若是隻是個別進程就不須要處理。

   

6

內存狀態

free -m

檢查內存使用狀況

   

7

swap狀態

swapon -s

查看swap使用百分比

   

8

檢查機器性能

vmstat

CPU:若是cpu的id字段長時間<10,該機器的CPU負載比較高
MEM:si和so字段頻繁>0,則說明該機器的內存使用比較緊張
DISK:若是bi和bo頻繁出現大數字,則說明該機器對磁盤的讀寫比較頻繁。

   

9

檢查磁盤性能

iostat

檢查iowait 時長是否過大?

   

10

檢查系統日誌

view /var/log/messages

能夠經過檢索error,fail,warn等字眼加快檢查的速度
關注syslog中關於IO過程的提示信息,有無IO中斷,IO丟失,SCSI reset等等

   

11

收集系統日誌

sosreport -a --batch

收集系統日誌

   

12

收集硬件日誌

DSET
smartCD

Dell PC Server :用DSET 工具收集硬件日誌
HP PC Server:視狀況用smartCD收集硬件日誌