一、CPU占用最高的10個進程
$ ps axww -o user,pid,pcpu,pmem,start,time,comm | head -1;ps axww -o user,pid,pcpu,pmem,start,time,comm | grep -v PID | sort -nr -k 3 | head
$ ps aux|head -1;ps aux|grep -v PID|sort -rn -k +3|head
$ ps auxw|head -1;ps auxw|sort -rn -k3|head -10
二、內(nèi)存占用最高的10個進程
$ ps axww -o user,pid,pcpu,pmem,start,time,comm | head -1 ;ps axww -o user,pid,pcpu,pmem,start,time,comm | grep -v PID | sort -nr -k 4 | head
$ ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head
$ ps auxw|head -1;ps auxw|sort -rn -k4|head -10
三、虛擬內(nèi)存使用最多的前10個進程
$ ps auxw|head -1;ps auxw|sort -rn -k5|head -10
四、統(tǒng)計當前連接數(shù)
$ ss -an | grep -v "State" | awk '{++S[$1]} END {for(a in S) print a, S[a]}'
$ netstat -tan | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
五、當前連接數(shù)最多的10個進程
$ ss -tnp | grep -v "State" | awk '{print $6}' | awk -F '"' '{print $2}' | awk '{++S[$1]} END {for(a in S) print a, S[a]}' | sort -nr -k2 | head
$ netstat -tnp | grep -v "Active" | grep -v "TIME_WAIT" | grep -v "State" | awk -F '/' '{print $NF}' | awk '{++S[$1]} END {for(a in S) print a, S[a]}' | sort -nr -k2 | head
六、Linux 運維命令掌握
Linux 下面日常運維使用的命令有太多了,根據(jù)個人的情況進行適當?shù)挠洃洝?br>
系統(tǒng)負載:top ,uptime,nmon,dstat 等
網(wǎng)絡(luò):ss,netstat,route,diag,ping,ip,lsof 等
io:dd,iostat,fio,nmon,dstat,pvs,lvs,vgs 等
內(nèi)存:free,dstat等
進程:ps,lsof 等
配置:lscpu,lspci,dmidecode,lsscsi,udev 等
設(shè)備識別:echo '---' ,rescan-scsi-bus.sh 等
診斷:strace,ltrace等
比如還有find 如何結(jié)合xargs ,tree的使用,lsblk 等等,還有很多很多,需要長期的積累,當然主要使用還是配置查看,LVM設(shè)置,網(wǎng)絡(luò)
還有很多成熟的開源和商業(yè)產(chǎn)品進行管理,在此不一一列舉,感覺可自行百度和google。
目前主流的python,ruby這些語言工具可以根據(jù)自身情況選擇一個掌握。
七、診斷工具
在日常的運維過程當中,不免要進行所謂的性能或者故障方面問題的診斷,工具和手段包羅萬象,在此我列舉一些日常使用的一些工具用于參考,
Pstack truss pmap gdb strace strace -o ssh.strace -Ttt -p 1983
ipcs 共享內(nèi)存 ipcrm
ldd
logsave logsave /tmp/logsave.log ls 紀錄命令的輸出到文件
lastlog 紀錄用戶最后的登錄時間 lastb顯示用戶錯誤登錄的紀錄
logwatch 監(jiān)控分析日志信息
grpck /etc/group
pwck /etc/passwd
pidstat pidof
iostat -xdm 1
blockdev
curl 訪問web 測試 比lynx好一點
八、用vmstat分析系統(tǒng)I/O情況
$ vmstat -n 3 (每個3秒刷新一次)
-bi:從塊設(shè)備讀入的數(shù)據(jù)總量(讀磁盤)(KB/S)
-bo:寫入到塊設(shè)備的數(shù)據(jù)總量(寫磁盤)(KB/S)
隨機磁盤讀寫的時候,這2個值越大(如超出1M),能看到CPU在IO等待的值也會越大
十、sar
sar [options] [-A] [-o file] t [n]
在命令行中,n 和t 兩個參數(shù)組合起來定義采樣間隔和次數(shù),t為采樣間隔,是必須有
的參數(shù),n為采樣次數(shù),是可選的,默認值是1,-o file表示將命令結(jié)果以二進制格式
存放在文件中,file 在此處不是關(guān)鍵字,是文件名。options 為命令行選項,sar命令
的選項很多,下面只列出常用選項:
-A:所有報告的總和。
-u:CPU利用率
-v:進程、I節(jié)點、文件和鎖表狀態(tài)。
-d:硬盤使用報告。
-r:內(nèi)存和交換空間的使用統(tǒng)計。
-g:串口I/O的情況。
-b:緩沖區(qū)使用情況。
-a:文件讀寫情況。
-c:系統(tǒng)調(diào)用情況。
-q:報告隊列長度和系統(tǒng)平均負載
-R:進程的活動情況。
-y:終端設(shè)備活動情況。
-w:系統(tǒng)交換活動。
-x { pid | SELF | ALL }:報告指定進程ID的統(tǒng)計信息,SELF關(guān)鍵字是sar進程本身的統(tǒng)計,ALL關(guān)鍵字是所有系統(tǒng)進程的統(tǒng)計。
用sar進行CPU利用率的分析
sar -u 2 10
Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/28/2009
07:40:17 PM CPU %user %nice %system %iowait %steal %idle
07:40:19 PM all 12.44 0.00 6.97 1.74 0.00 78.86
07:40:21 PM all 26.75 0.00 12.50 16.00 0.00 44.75
07:40:23 PM all 16.96 0.00 7.98 0.00 0.00 75.06
07:40:25 PM all 22.50 0.00 7.00 3.25 0.00 67.25
07:40:27 PM all 7.25 0.00 2.75 2.50 0.00 87.50
07:40:29 PM all 20.05 0.00 8.56 2.93 0.00 68.46
07:40:31 PM all 13.97 0.00 6.23 3.49 0.00 76.31
07:40:33 PM all 8.25 0.00 0.75 3.50 0.00 87.50
07:40:35 PM all 13.25 0.00 5.75 4.00 0.00 77.00
07:40:37 PM all 10.03 0.00 0.50 2.51 0.00 86.97
Average: all 15.15 0.00 5.91 3.99 0.00 74.95
在顯示內(nèi)容包括:
%user:CPU處在用戶模式下的時間百分比。
%nice:CPU處在帶NICE值的用戶模式下的時間百分比。
%system:CPU處在系統(tǒng)模式下的時間百分比。
%iowait:CPU等待輸入輸出完成時間的百分比。
%steal:管理程序維護另一個虛擬處理器時,虛擬CPU的無意識等待時間百分比。
%idle:CPU空閑時間百分比。
在所有的顯示中,我們應(yīng)主要注意%iowait和%idle,%iowait的值過高,表示硬盤存在I/O瓶頸,%idle值高,表示CPU較空 閑,如果%idle值高但系統(tǒng)響應(yīng)慢時,有可能是CPU等待分配內(nèi)存,此時應(yīng)加大內(nèi)存容量。%idle值如果持續(xù)低于10,那么系統(tǒng)的CPU處理能力相對 較低,表明系統(tǒng)中最需要解決的資源是CPU。
用sar進行運行進程隊列長度分析:
sar -q 2 10
Linux 2.6.18-53.el5PAE (localhost.localdomain) 03/28/2009
07:58:14 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
07:58:16 PM 0 493 0.64 0.56 0.49
07:58:18 PM 1 491 0.64 0.56 0.49
07:58:20 PM 1 488 0.59 0.55 0.49
07:58:22 PM 0 487 0.59 0.55 0.49
07:58:24 PM 0 485 0.59 0.55 0.49
07:58:26 PM 1 483 0.78 0.59 0.50
07:58:28 PM 0 481 0.78 0.59 0.50
07:58:30 PM 1 480 0.72 0.58 0.50
07:58:32 PM 0 477 0.72 0.58 0.50
07:58:34 PM 0 474 0.72 0.58 0.50
Average: 0 484 0.68 0.57 0.49
runq-sz 準備運行的進程運行隊列。
plist-sz 進程隊列里的進程和線程的數(shù)量
ldavg-1 前一分鐘的系統(tǒng)平均負載(load average)
ldavg-5 前五分鐘的系統(tǒng)平均負載(load average)
ldavg-15 前15分鐘的系統(tǒng)平均負載(load average)
順便說一下load avarage的含義
load average可以理解為[size=+0]每秒鐘CPU等待運行的進程個數(shù).
在Linux系統(tǒng)中,sar -q、uptime、w、top等命令都會有系統(tǒng)平均負載load average的輸出,那么什么是系統(tǒng)平均負載呢?
系統(tǒng)平均負載被定義為在特定時間間隔內(nèi)運行隊列中的平均任務(wù)數(shù)。如果一個進程滿足以下條件則其就會位于運行隊列中:
- 它沒有在等待I/O操作的結(jié)果
- 它沒有主動進入等待狀態(tài)(也就是沒有調(diào)用'wait')
- 沒有被停止(例如:等待終止)
例如:
$ uptime
20:55:40 up 24 days, 3:06, 1 user, load average: 8.13, 5.90, 4.94
命令輸出的最后內(nèi)容表示在過去的1、5、15分鐘內(nèi)運行隊列中的平均進程數(shù)量。
一般來說只要每個CPU的當前活動進程數(shù)不大于3那么系統(tǒng)的性能就是良好的,如果每個CPU的任務(wù)數(shù)大于5,那么就表示這臺機器的性能有嚴重問題。對 于上面的例子來說,假設(shè)系統(tǒng)有兩個CPU,那么其每個CPU的當前任務(wù)數(shù)為:8.13/2=4.065。這表示該系統(tǒng)的性能是可以接受的。