Latest News

Home » Linux主機伺服器 » Unix 系統管理員的 N 種武器

Unix 系統管理員的 N 種武器

Unix 系統管理員的 N 種武器

Plan the work, work the plan 先從效能檢查小工具著手
檢視系統負載摘要 – w, top, free(linux) 准實時更新的系統負載摘要 – top, vmstat, iostat 程式檢視 – top, ps, lsof 程式追蹤 – strace (truss), ltrace 網路連線情況 – netstat, lsof 檔案開啟情況 – lsof, fuser Linux下萬金油 – ls, cat (with /proc)
檢視歷史 – sar 以下是一些小 tip 1. Linux 下多數人會使用 netstat -ant |wc -l 或 netstat netstat -ant|grep EST |wc -l
這樣的指令來檢視現用的連線的摘要情況。

netstat 掃瞄很費時間,快速、準確、在系統反應慢的時候尤其有利的方法 # cat /proc/net/sockstat
2. 檢視現用的系統負載最簡單的指令是 w,這個指令在高負載,系統反應慢的情況下最可靠
3. strace -p 很強大,沒有日誌的情況下,它可以用來瞭解程式究竟在做什麼 4. lsof 也很強大,lsof -n -i TCP:80 和 netstat -natp |grep :80 的效果基本相同,但揭示出額外的東西
5. top 不會排序,就不算會用,常用的排序是按記憶體用量排序和CPU使用時間排序,分別是按 M 和 P。按 s 可以改變更新間隔。
按 h 可以看說明。 轉自校內王劍的日誌 Unix 系統管理員的 n 種武器 (1)這些工具的使用順序應該是這樣的

1. 首先,看一下系統摘要,結合系統的用途,作出調查方向的初步判斷。
系統用途可以用 ps 看一下完整的程式清單;

2. 確定方向後,使用工具檢視具體的問題;

3. 使用工具尋找引起該具體問題的原因; 經驗多了以後,第二步有時候可以省去,但注意可能會誤入歧途。
更新:有些是 linux specific 的,註明一下 Unix 系統管理員的 n 種武器
(2)網路關聯的工具 網路連線情況 – netstat, lsof 路由表 – route, ip(linux), netstat 檢視和配置網路介面 – ifconfig, ip(linux) 網路卡裝置配置 – ethtool & mii-tool (linux) 網路鏈路質量檢查 – ping, mtr, traceroute 網路包檢查 – tcpdump, wireshark 流量監控 – iftop, iptraf, jnettop 萬用TCP連線測試工具 – telnet, netcat (nc), openssl s_client 流量管理和控制 – tc (linux) 防火牆設定 – iptables(linux) DNS查詢工具 – host, nslookup, dig Linux 下的萬金油 – cat, echo (with /proc) 檢視歷史 – sar 下面是一些小 tip 1. netstat 的 -p 參數很有用,它可以顯示 socket 對應的程式的 pid 和 程式名,我常常使用 netstat -ntlp 和 netstat -nulp 來檢查守護程式

2. 檢查路由表,netstat -nr 和 route -n 是差不多的,不過列有些差別。有些系統上 route 指令不能用來檢視路由表,必須用 netstat -r。Linux 上,route -ne 等於 netstat -nr

3. ip 是個強大的指令,它可以用來檢查和配置介面 IP 位址、檢查和配置路由 ip addr … ip route … Linux的進階路由功能必須用 ip 指令來實現 (ip rule + ip route)

4. telnet 除了連線 telnet 服務外,還可以建立一個 tcp 連線並和伺服器互動,這個功能和 netcat 相同。openssl s_client -connect server:port 用於建立 SSL 連線(耶,你可以和 https 服務互動)

5. tc 一般用來對流量進行優先級劃分或做流量限制。在測試中可以用 tc qdisc change dev eth0 root netem …… 來模擬網路延時和丟包等情況。
在 10ms 延時和 0ms 延時的情況下,系統負載能力有質的區別。

6. 謹慎使用 iptables。除非你正在配置一個防火牆,否則能不用就不用。在一個大的伺服器群裡,一個沒做公開記錄的 iptables 規則很可能造成大的損失,外帶人力浪費
7. mtr 比 traceroute 好
8. 檢查網路問題時,ping -f 可能比 ping 好:ping 不丟包,而 ping -f 才顯示出問題
9. 多數網路關聯指令都帶有 -n 參數(lsof 也有),禁用反向功能變數名查詢。反向功能變數名查詢很多時候會引起問題,諸如"tcpdump 為什麼抓不到包","ping 怎麼死了",而且很慢。用 -n 應該是下意識的,不需要別人提醒你,不過 mtr 例外,它的反向功能變數名查詢是異步的
10. tcpdump 必須熟悉,如果還沒把 tcpdump 的 man page 通讀一遍,趕緊的
11. 網線問題是你經常想不到但必須想的。ethtool 和 mii-tool 可以說明你瞭解現用的網線的連線狀態。ethtool 還用於配置一些網路卡驅動的參數,例如 TSO (Tcp segmentation offload),鏈路速度。強制設定網路卡鏈路速率能解決問題,但更多的是引起問題,如難以解釋的丟包。
12. sar -n XXX 可以用來瞭解歷史
13. DNS 查詢問題可能會引起一些看起來是網路問題的問題,例如瀏覽器慢,mysql 資料庫慢(如果沒關反向查詢) 網路故障診斷一般是這樣的順序
1. 網路是否中斷 (ping)
2. 是否丟包 (ping, ping -f, mtr)
3.1 路由是否正確 (route -n, ip route 等) 3.2 網線狀態 (ethtool)
3.3 tcpdump 或是 ifconfig 看看收發包的情況,比如異常流量(大量 icmp,arp,udp)
3.4 arp 表 3.5 iptables 規則 3.6 dns 在一些軟體配置上(如 lvs),要仔細檢查路由和 arp。
 
Unix 系統管理員的 n 種武器 (3)再來看看檔案、檔案系統關聯的指令 檔案系統的掛載 – mount, umount 檔案系統檢查 – fsck 檢查檔案狀態 – stat, ls 檢查開啟的檔案 – fuser, lsof 空間檢查 – df, du 尋找檔案 – find, locate, grep 檔案權限 – chown, chmod, (linux) lsattr, chattr, getacl, setacl 特殊檔案 – mknod, mkfifo, mkdir, rmdir 常用的壓縮、歸檔工具 – tar, cpio, gzip, bzip2, 7zip, unzip, unrar Linux 下萬金油 – cat, ls (with /proc) 下面是一些小 tip 1. mount 的 noatime 選項需要特別留意。在開啟檔案時,系統預設會更新檔案的 access time 時戳,如果對檔案的訪問模式是快速開啟、關閉大量不同的檔案,例如某些搜尋應用、news 伺服器等,即便應用是唯讀的,對 access time 的更新會引起可觀的磁碟寫入操作。noatime 關閉對 access time 的更新;
2. mount -o remount 在不卸載檔案系統的情況下重新設定掛載選項,比如 mount -o remount,noatime /some_mnt_point。在 nfs 伺服器宕機,程式僵死的情況下,可以用 remount 來修改 nfs 掛載選項 (mount -o remount,intr),使得程式可以被殺死
3. 對掛載上的檔案系統進行寫模式的 fsck 會造成檔案系統損壞
4. du 一個目錄,但不希望內含其子目錄上的掛載的檔案系統時,可以用 -x 來避免跨檔案系統。find 是 -xdev;gnu tar 是 –one-file-system
5. 有時候,在檔案被開啟的情況下刪除檔案,會造成"隱藏"的空間佔用,df 可以看見空間沒了,可是 du 檢查的結果是空間還有很多富餘,這個時候,可以用 lsof /path 來檢查,例如 # lsof /tmp COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME apache2 7184 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted) apache2 15216 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted) apache2 15313 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted) apache2 16041 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted) apache2 22031 root 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted) apache2 22778 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted) apache2 22781 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted) mysqld 29107 mysql 5u REG 8,8 0 12 /tmp/ibuA28pF (deleted) mysqld 29107 mysql 6u REG 8,8 0 13 /tmp/ibpTXuPw (deleted) mysqld 29107 mysql 7u REG 8,8 0 14 /tmp/ibQLeReo (deleted) mysqld 29107 mysql 8u REG 8,8 0 15 /tmp/ibNTdyEf (deleted) mysqld 29107 mysql 12u REG 8,8 0 16 /tmp/ib6kde56 (deleted) apache2 32516 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted) apache2 32517 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted) apache2 32558 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted) apache2 32560 www-data 15u REG 8,8 0 17 /tmp/.xcache.0.0.169170445.lock (deleted)
6.空間有富餘,權限也正確但無法寫入,可能是檔案系統的 inode 用完了,用 df -i 檢查。和 inode 有關的參數,ls 是 -i,find 是 -inum
7. Linux 下,當你沒有 lsof 可以用的時候,學會用 ls -l /proc//fd/。上面的 lsof 例子可以寫成 # ls -l /proc/*/fd |grep /tmp
8. find 不僅僅能按檔名搜尋,它還可以按類型-type、時戳 -atime/-ctime/-mtime、比較時戳 -newer、權限 -perm、大小 -size、所有者 -uid/-user 等條件來找檔案
9. locate 很好用,但它依賴於 updatedb 生成的資料庫,有些情況下,需要限制 updatedb 索引的檔案系統範圍。這時,要瞭解 locate 的局限性
10. 要理解,權限不止 wrx 這三個屬性 11. bzip2 壓縮率比 gzip 好,但對於上 G 的檔案,速度過分慢 以上是您的好友通過QQ信箱閱讀空間分享給您的。

About

發佈留言