Linux Shell常用技巧(八)
十八.? 和系統運行狀況相關的Shell命令:
?? ?1.? Linux的實時監測命令(watch):
?? ?watch 是一個非常實用的命令,可以幫你實時監測一個命令的運行結果,省得一遍又一遍的手動運行。該命令最為常用的兩個選項是-d和-n,其中-n表示間隔多少秒執行一次"command",-d表示高亮發生變化的位置。下面列舉幾個在watch中常用的實時監視命令:
?? ?/> watch -d -n 1 'who'?? #每隔一秒執行一次who命令,以監視服務器當前用戶登錄的狀況
?? ?Every 1.0s: who?????? Sat Nov 12 12:37:18 2011
?? ?
?? ?stephen? tty1?????????? 2011-11-11 17:38 (:0)
?? ?stephen? pts/0???????? 2011-11-11 17:39 (:0.0)
?? ?root?????? pts/1???????? 2011-11-12 10:01 (192.168.149.1)
?? ?root?????? pts/2???????? 2011-11-12 11:41 (192.168.149.1)
?? ?root?????? pts/3???????? 2011-11-12 12:11 (192.168.149.1)
?? ?stephen? pts/4???????? 2011-11-12 12:22 (:0.0)
?? ?此時通過其他Linux客戶端工具以root的身份登錄當前Linux服務器,再觀察watch命令的運行變化。
?? ?Every 1.0s: who?????? Sat Nov 12 12:41:09 2011
?? ?
?? ?stephen? tty1????????? 2011-11-11 17:38 (:0)
?? ?stephen? pts/0??????? 2011-11-11 17:39 (:0.0)
?? ?root?????? pts/1??????? 2011-11-12 10:01 (192.168.149.1)
?? ?root?????? pts/2??????? 2011-11-12 11:41 (192.168.149.1)
?? ?root?????? pts/3??????? 2011-11-12 12:40 (192.168.149.1)
?? ?stephen? pts/4??????? 2011-11-12 12:22 (:0.0)
?? ?root?????? pts/5??????? 2011-11-12 12:41 (192.168.149.1)
??? 最后一行中被高亮的用戶為新登錄的root用戶。此時按CTRL + C可以退出正在執行的watch監控進程。
???
?? ?#watch可以同時運行多個命令,命令間用分號分隔。
?? ?#以下命令監控磁盤的使用狀況,以及當前目錄下文件的變化狀況,包括文件的新增、刪除和文件修改日期的更新等。
?? ?/> watch -d -n 1 'df -h; ls -l'
?? ?Every 1.0s: df -h; ls -l???? Sat Nov 12 12:55:00 2011
?? ?
?? ?Filesystem??????????? Size? Used Avail Use% Mounted on
?? ?/dev/sda1???????????? 5.8G? 3.3G? 2.2G? 61% /
?? ?tmpfs???????????????? 504M? 420K? 504M?? 1% /dev/shm
?? ?total 20
?? ?-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
?? ?-rw-r--r--. 1 root root?? 183 Nov 11 08:02 users
?? ?-rw-r--r--. 1 root root?? 279 Nov 11 08:45 users2
?? ?此時通過另一個Linux控制臺窗口,在watch監視的目錄下,如/home/stephen/test,執行下面的命令
?? ?/> touch aa???????? #在執行該命令之后,另一個執行watch命令的控制臺將有如下變化
?? ?Every 1.0s: df -h; ls -l??????????????????????????????? Sat Nov 12 12:57:08 2011
?? ?
?? ?Filesystem??????????? Size? Used Avail Use% Mounted on
?? ?/dev/sda1???????????? 5.8G? 3.3G? 2.2G? 61% /
?? ?tmpfs???????????????? 504M? 420K? 504M?? 1% /dev/shm
?? ?total 20
?? ?-rw-r--r--. 1 root root??????? 0 Nov 12 12:56 aa
?? ?-rw-r--r--. 1 root root??????? 0 Nov 12 10:02 datafile3
?? ?-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
?? ?-rw-r--r--. 1 root root???? 183 Nov 11 08:02 users
?? ?-rw-r--r--. 1 root root???? 279 Nov 11 08:45 users2
??? 其中黃色高亮的部分,為touch aa命令執行之后watch輸出的高亮變化部分。
???
?? ?2.? 查看當前系統內存使用狀況(free):
?? ?free命令有以下幾個常用選項:
| 選項 | 說明 |
| -b | 以字節為單位顯示數據。 |
| -k | 以千字節(KB)為單位顯示數據(缺省值)。 |
| -m | 以兆(MB)為單位顯示數據。 |
| -s delay | 該選項將使free持續不斷的刷新,每次刷新之間的間隔為delay指定的秒數,如果含有小數點,將精確到毫秒,如0.5為500毫秒,1為一秒。 |
??? free命令輸出的表格中包含以下幾列:
| 列名 | 說明 |
| total | 總計物理內存的大小。 |
| used | 已使用的內存數量。 |
| free | 可用的內存數量。 |
| Shared | 多個進程共享的內存總額。 |
| Buffers/cached | 磁盤緩存的大小。 |
?? ?見以下具體示例和輸出說明:
?? ?/> free -k
?? ???????????????????? total???????? used????????? free???? shared??? buffers???? cached
?? ?Mem:?????? 1031320???? 671776???? 359544????????? 0????? 88796???? 352564
?? ?-/+ buffers/cache:????? 230416???? 800904
?? ?Swap:??????? 204792?????????? ?? 0???? 204792
?? ?對于free命令的輸出,我們只需關注紅色高亮的輸出行和綠色高亮的輸出行,見如下具體解釋:
?? ?紅色輸出行:該行使從操作系統的角度來看待輸出數據的,used(671776)表示內核(Kernel)+Applications+buffers+cached。free(359544)表示系統還有多少內存可供使用。
?? ?綠色輸出行:該行則是從應用程序的角度來看輸出數據的。其free = 操作系統used + buffers + cached,既:
?? ?800904 = 359544 + 88796 + 352564
?? ?/> free -m
?? ???????????? ? ? ? total??????? used??????? free????? shared??? buffers???? cached
?? ?Mem:????????? 1007?????? ? 656??????? 351??????????? 0???????? 86??????????? 344
?? ?-/+ buffers/cache:??????? 225??????? 782
?? ?Swap:????????? 199???????????? 0??????? 199
??? /> free -k -s 1.5? #以千字節(KB)為單位顯示數據,同時每隔1.5刷新輸出一次,直到按CTRL+C退出
?? ?????????????????? total??????? used?????? free???? shared??? buffers???? cached
?? ?Mem:????????? 1007???????? 655??????? 351????????? 0??????? ?? 86??????? 344
?? ?-/+ buffers/cache:??????? 224??????? 782
?? ?Swap:????????? 199???????? ? ? 0??????? 199
?? ?????????????????? total??????? used?????? free???? shared??? buffers???? cached
?? ?Mem:????????? 1007?????? ? 655??????? 351????????? 0??????? ?? 86??????? 344
?? ?-/+ buffers/cache:??????? 224??????? 782
?? ?Swap:????????? 199??????? ? ?? 0??????? 199
?? ?3.? CPU的實時監控工具(mpstat):
?? ?該命令主要用于報告當前系統中所有CPU的實時運行狀況。
?? ?#該命令將每隔2秒輸出一次CPU的當前運行狀況信息,一共輸出5次,如果沒有第二個數字參數,mpstat將每隔兩秒執行一次,直到按CTRL+C退出。
??? /> mpstat 2 5 ?
?? ?Linux 2.6.32-71.el6.i686 (Stephen-PC)?? 11/12/2011????? _i686_? (1 CPU)
?? ?04:03:00 PM? CPU??? %usr?? %nice??? %sys %iowait??? %irq?? %soft? %steal? %guest?? %idle
?? ?04:03:02 PM? all??? 0.00??? 0.00??? 0.50??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00?? 99.50
?? ?04:03:04 PM? all??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00? 100.00
?? ?04:03:06 PM? all??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00? 100.00
?? ?04:03:08 PM? all??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00? 100.00
?? ?04:03:10 PM? all??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00? 100.00
?? ?Average:?????? all??? 0.00??? 0.00??? 0.10??? 0.00??? 0.00??? 0.00??? 0.00??? 0.00?? 99.90
?? ?第一行的末尾給出了當前系統中CPU的數量。后面的表格中則輸出了系統當前CPU的使用狀況,以下為每列的含義:
| 列名 | 說明 |
| %user | 在internal時間段里,用戶態的CPU時間(%),不包含nice值為負進程? (usr/total)*100 |
| %nice | 在internal時間段里,nice值為負進程的CPU時間(%)?? (nice/total)*100 |
| %sys | 在internal時間段里,內核時間(%)?????? (system/total)*100 |
| %iowait | 在internal時間段里,硬盤IO等待時間(%) (iowait/total)*100 |
| %irq | 在internal時間段里,硬中斷時間(%)???? (irq/total)*100 |
| %soft | 在internal時間段里,軟中斷時間(%)???? (softirq/total)*100 |
| %idle | 在internal時間段里,CPU除去等待磁盤IO操作外的因為任何原因而空閑的時間閑置時間(%) (idle/total)*100 |
??? 計算公式:
?? ?total_cur=user+system+nice+idle+iowait+irq+softirq
?? ?total_pre=pre_user+ pre_system+ pre_nice+ pre_idle+ pre_iowait+ pre_irq+ pre_softirq
?? ?user=user_cur – user_pre
?? ?total=total_cur-total_pre
?? ?其中_cur 表示當前值,_pre表示interval時間前的值。上表中的所有值可取到兩位小數點。?? ?
??? /> mpstat -P ALL 2 3? #-P ALL表示打印所有CPU的數據,這里也可以打印指定編號的CPU數據,如-P 0(CPU的編號是0開始的)
?? ?Linux 2.6.32-71.el6.i686 (Stephen-PC)?? 11/12/2011????? _i686_? (1 CPU)
?? ?04:12:54 PM? CPU??? %usr?? %nice??? %sys %iowait??? %irq?? %soft? %steal? %guest?? %idle
?? ?04:12:56 PM??? all????? 0.00????? 0.00???? 0.50??? 0.00????? 0.00??? 0.00??? 0.00????? 0.00???? 99.50
?? ?04:12:56 PM????? 0???? 0.00????? 0.00???? 0.50??? 0.00????? 0.00??? 0.00??? 0.00????? 0.00???? 99.50
?? ?04:12:56 PM? CPU??? %usr?? %nice??? %sys %iowait??? %irq?? %soft? %steal? %guest?? %idle
?? ?04:12:58 PM??? all???? 0.00????? 0.00???? 0.00??? 0.00????? 0.00??? 0.00??? 0.00????? 0.00??? 100.00
?? ?04:12:58 PM???? 0???? 0.00????? 0.00???? 0.00??? 0.00????? 0.00??? 0.00??? 0.00????? 0.00??? 100.00
?? ?04:12:58 PM? CPU??? %usr?? %nice??? %sys %iowait??? %irq?? %soft? %steal? %guest?? %idle
?? ?04:13:00 PM??? all????? 0.00???? 0.00??? 0.00??? 0.00????? 0.00??? 0.00???? 0.00 ?? ? 0.00??? 100.00
?? ?04:13:00 PM???? 0????? 0.00?? ? 0.00??? 0.00??? 0.00????? 0.00??? 0.00???? 0.00? ? ? 0.00??? 100.00
?? ?Average:?????? CPU??? %usr?? %nice??? %sys %iowait??? %irq?? %soft? %steal? %guest?? %idle
?? ?Average:??? ? ?? all?? ?? 0.00???? 0.00??? 0.17??? 0.00?? ?? 0.00??? 0.00?? ? 0.00????? 0.00? ?? 99.83
?? ?Average:????? ? ? 0????? 0.00???? 0.00??? 0.17??? 0.00?? ?? 0.00??? 0.00???? 0.00?? ?? 0.00???? 99.83
??? 4.? 虛擬內存的實時監控工具(vmstat):
?? ?vmstat命令用來獲得UNIX系統有關進程、虛存、頁面交換空間及CPU活動的信息。這些信息反映了系統的負載情況。vmstat首次運行時顯示自系統啟動開始的各項統計信息,之后運行vmstat將顯示自上次運行該命令以后的統計信息。用戶可以通過指定統計的次數和時間來獲得所需的統計信息。
??? /> vmstat 1 3??? #這是vmstat最為常用的方式,其含義為每隔1秒輸出一條,一共輸出3條后程序退出。
?? ?procs? -----------memory----------?? ---swap-- -----io---- --system-- -----cpu-----
?? ? r? b?? swpd????? free????? buff?? cache?? si?? so???? bi??? bo???? in?? cs? us? sy id? wa st
?? ? 0? 0??????? 0 531760? 67284 231212? 108? 0???? 0? 260?? 111? 148? 1?? 5 86 ? 8? 0
?? ? 0? 0???? ?? 0 531752? 67284 231212??? 0??? 0???? 0???? 0???? 33?? 57?? 0?? 1 99?? 0? 0
?? ? 0? 0??????? 0 531752? 67284 231212??? 0??? 0???? 0???? 0???? 40?? 73?? 0?? 0 100 0? 0
??? /> vmstat 1?????? #其含義為每隔1秒輸出一條,直到按CTRL+C后退出。
?? ?下面將給出輸出表格中每一列的含義說明:
??? 有關進程的信息有:(procs)
?? ?r:? 在就緒狀態等待的進程數。
?? ?b: 在等待狀態等待的進程數。???
??? 有關內存的信息有:(memory)
?? ?swpd:? 正在使用的swap大小,單位為KB。
?? ?free:??? 空閑的內存空間。
?? ?buff:??? 已使用的buff大小,對塊設備的讀寫進行緩沖。
?? ?cache: 已使用的cache大小,文件系統的cache。
??? 有關頁面交換空間的信息有:(swap)
?? ?si:? 交換內存使用,由磁盤調入內存。
?? ?so: 交換內存使用,由內存調入磁盤。?
??? 有關IO塊設備的信息有:(io)
?? ?bi:? 從塊設備讀入的數據總量(讀磁盤) (KB/s)
?? ?bo: 寫入到塊設備的數據總理(寫磁盤) (KB/s)??
??? 有關故障的信息有:(system)
?? ?in: 在指定時間內的每秒中斷次數。
?? ?sy: 在指定時間內每秒系統調用次數。
?? ?cs: 在指定時間內每秒上下文切換的次數。??
??? 有關CPU的信息有:(cpu)
?? ?us:? 在指定時間間隔內CPU在用戶態的利用率。
?? ?sy:? 在指定時間間隔內CPU在核心態的利用率。
?? ?id:? 在指定時間間隔內CPU空閑時間比。
?? ?wa: 在指定時間間隔內CPU因為等待I/O而空閑的時間比。??
??? vmstat 可以用來確定一個系統的工作是受限于CPU還是受限于內存:如果CPU的sy和us值相加的百分比接近100%,或者運行隊列(r)中等待的進程數總是不等于0,且經常大于4,同時id也經常小于40,則該系統受限于CPU;如果bi、bo的值總是不等于0,則該系統受限于內存。
??? 5.? 設備IO負載的實時監控工具(iostat):
??? iostat主要用于監控系統設備的IO負載情況,iostat首次運行時顯示自系統啟動開始的各項統計信息,之后運行iostat將顯示自上次運行該命令以后的統計信息。用戶可以通過指定統計的次數和時間來獲得所需的統計信息。
??? 其中該命令中最為常用的使用方式如下:
??? /> iostat -d 1 3??? #僅顯示設備的IO負載,其中每隔1秒刷新并輸出結果一次,輸出3次后iostat退出。
?? ?Linux 2.6.32-71.el6.i686 (Stephen-PC)?? 11/16/2011????? _i686_? (1 CPU)
?? ?Device:??????????? tps?? Blk_read/s?? Blk_wrtn/s?? Blk_read?? Blk_wrtn
?? ?sda???????????????? 5.35?????? 258.39??????? 26.19???? 538210????? 54560
?? ?Device:??????????? tps?? Blk_read/s?? Blk_wrtn/s?? Blk_read?? Blk_wrtn
?? ?sda???????????????? 0.00???????? 0.00???????? 0.00????????????????? 0????????? 0
?? ?Device:??????????? tps?? Blk_read/s?? Blk_wrtn/s?? Blk_read?? Blk_wrtn
?? ?sda???????????????? 0.00???????? 0.00???????? 0.00????????????????? 0????????? 0
?? ?Device:??????????? tps?? Blk_read/s?? Blk_wrtn/s?? Blk_read?? Blk_wrtn
?? ?sda????????????? ?? 0.00???????? 0.00???????? 0.00????????????????? 0????????? 0
??? /> iostat -d 1? #和上面的命令一樣,也是每隔1秒刷新并輸出一次,但是該命令將一直輸出,直到按CTRL+C退出。
?? ?下面將給出輸出表格中每列的含義:
| 列名 | 說明 |
| Blk_read/s | 每秒塊(扇區)讀取的數量。 |
| Blk_wrtn/s | 每秒塊(扇區)寫入的數量。 |
| Blk_read | 總共塊(扇區)讀取的數量。 |
| Blk_wrtn | 總共塊(扇區)寫入的數量。 |
??? iostat還有一個比較常用的選項-x,該選項將用于顯示和io相關的擴展數據。
??? /> iostat -dx 1 3
?? ?Device:? rrqm/s wrqm/s? r/s?? w/s? rsec/s wsec/s avgrq-sz avgqu-sz?? await? svctm? %util
?? ?sda??????????? 5.27?? 1.31 2.82 1.14 189.49? 19.50??? 52.75???? 0.53???? 133.04? 10.74?? 4.26
?? ?Device:? rrqm/s wrqm/s? r/s?? w/s? rsec/s wsec/s avgrq-sz avgqu-sz?? await? svctm? %util
?? ?sda??????????? 0.00?? 0.00 0.00 0.00?? 0.00?? 0.00??????? 0.00???? 0.00???????? 0.00?? 0.00?? 0.00
?? ?Device:? rrqm/s wrqm/s? r/s?? w/s? rsec/s wsec/s avgrq-sz avgqu-sz?? await? svctm? %util
?? ?sda????? ? ? ? 0.00?? 0.00 0.00 0.00?? 0.00?? 0.00??? ? ? 0.00???? 0.00???????? 0.00?? 0.00?? 0.00
??? 還可以在命令行參數中指定要監控的設備名,如:
??? /> iostat -dx sda 1 3?? #指定監控的設備名稱為sda,該命令的輸出結果和上面命令完全相同。
?? ?下面給出擴展選項輸出的表格中每列的含義:
| 列名 | 說明 |
| rrqm/s | 隊列中每秒鐘合并的讀請求數量 |
| wrqm/s | 隊列中每秒鐘合并的寫請求數量 |
| r/s | 每秒鐘完成的讀請求數量 |
| w/s | 每秒鐘完成的寫請求數量 |
| rsec/s | 每秒鐘讀取的扇區數量 |
| wsec/s | 每秒鐘寫入的扇區數量 |
| avgrq-sz | 平均請求扇區的大小 |
| avgqu-sz | 平均請求隊列的長度 |
| await | 平均每次請求的等待時間 |
| util | 設備的利用率 |
??? 下面是關鍵列的解釋:
?? ?util是設備的利用率。如果它接近100%,通常說明設備能力趨于飽和。
?? ?await是平均每次請求的等待時間。這個時間包括了隊列時間和服務時間,也就是說,一般情況下,await大于svctm,它們的差值越小,則說明隊列時間越短,反之差值越大,隊列時間越長,說明系統出了問題。
?? ?avgqu-sz是平均請求隊列的長度。毫無疑問,隊列長度越短越好。?? ? ?? ??? ??? ?
???? 6.? 當前運行進程的實時監控工具(pidstat):
??? ?pidstat主要用于監控全部或指定進程占用系統資源的情況,如CPU,內存、設備IO、任務切換、線程等。pidstat首次運行時顯示自系統啟動開始的各項統計信息,之后運行pidstat將顯示自上次運行該命令以后的統計信息。用戶可以通過指定統計的次數和時間來獲得所需的統計信息。
?? ?在正常的使用,通常都是通過在命令行選項中指定待監控的pid,之后在通過其他具體的參數來監控與該pid相關系統資源信息。
| 選項 | 說明 |
| -l | 顯示該進程和CPU相關的信息(command列中可以顯示命令的完整路徑名和命令的參數)。 |
| -d | 顯示該進程和設備IO相關的信息。 |
| -r | 顯示該進程和內存相關的信息。 |
| -w | 顯示該進程和任務時間片切換相關的信息。 |
| -t | 顯示在該進程內正在運行的線程相關的信息。 |
| -p | 后面緊跟著帶監控的進程id或ALL(表示所有進程),如不指定該選項,將監控當前系統正在運行的所有進程。 |
??? #監控pid為1(init)的進程的CPU資源使用情況,其中每隔3秒刷新并輸出一次,3次后程序退出。
??? /> pidstat -p 1 2 3 -l
?? ?07:18:58 AM?????? PID??? %usr %system? %guest??? %CPU?? CPU? Command
?? ?07:18:59 AM???????? 1??? 0.00??? 0.00??? 0.00??? 0.00???? 0? /sbin/init
?? ?07:19:00 AM???????? 1??? 0.00??? 0.00??? 0.00??? 0.00???? 0? /sbin/init
?? ?07:19:01 AM???????? 1??? 0.00??? 0.00??? 0.00??? 0.00???? 0? /sbin/init
?? ?Average:?????????????? 1??? 0.00??? 0.00??? 0.00??? 0.00???? -? /sbin/init
?? ?%usr:????? 該進程在用戶態的CPU使用率。
?? ?%system:該進程在內核態(系統級)的CPU使用率。
?? ?%CPU:???? 該進程的總CPU使用率,如果在SMP環境下,該值將除以CPU的數量,以表示每CPU的數據。
?? ?CPU:??? ? ?? 該進程所依附的CPU編號(0表示第一個CPU)。
?? ?#監控pid為1(init)的進程的設備IO資源負載情況,其中每隔2秒刷新并輸出一次,3次后程序退出。
?? ?/> pidstat -p 1 2 3 -d?? ?
?? ?07:24:49 AM?????? PID?? kB_rd/s?? kB_wr/s kB_ccwr/s? Command
?? ?07:24:51 AM???????? 1????? 0.00????? 0.00????? 0.00? init
?? ?07:24:53 AM???????? 1????? 0.00????? 0.00????? 0.00? init
?? ?07:24:55 AM???????? 1????? 0.00????? 0.00????? 0.00? init
?? ?Average:?????????? ? ? 1????? 0.00????? 0.00????? 0.00? init
?? ?kB_rd/s:?? 該進程每秒的字節讀取數量(KB)。
?? ?kB_wr/s:?? 該進程每秒的字節寫出數量(KB)。
?? ?kB_ccwr/s: 該進程每秒取消磁盤寫入的數量(KB)。
?? ?#監控pid為1(init)的進程的內存使用情況,其中每隔2秒刷新并輸出一次,3次后程序退出。
?? ?/> pidstat -p 1 2 3 -r
?? ?07:29:56 AM?????? PID? minflt/s? majflt/s???? VSZ??? RSS?? %MEM? Command
?? ?07:29:58 AM???????? 1????? 0.00????? 0.00??? 2828?? 1368?? 0.13? init
?? ?07:30:00 AM???????? 1????? 0.00????? 0.00??? 2828?? 1368?? 0.13? init
?? ?07:30:02 AM???????? 1????? 0.00????? 0.00??? 2828?? 1368?? 0.13? init
?? ?Average:?????????? ? ? 1????? 0.00????? 0.00??? 2828?? 1368?? 0.13? init
?? ?%MEM:? 該進程的內存使用百分比。
?? ?#監控pid為1(init)的進程任務切換情況,其中每隔2秒刷新并輸出一次,3次后程序退出。
?? ?/> pidstat -p 1 2 3 -w
?? ?07:32:15 AM?????? PID?? cswch/s nvcswch/s? Command
?? ?07:32:17 AM???????? 1????? 0.00????? 0.00? init
?? ?07:32:19 AM???????? 1????? 0.00????? 0.00? init
?? ?07:32:21 AM???????? 1????? 0.00????? 0.00? init
?? ?Average:??????????? 1????? 0.00????? 0.00? init
?? ?cswch/s:??? 每秒任務主動(自愿的)切換上下文的次數。主動切換是指當某一任務處于阻塞等待時,將主動讓出自己的CPU資源。
?? ?nvcswch/s: 每秒任務被動(不自愿的)切換上下文的次數。被動切換是指CPU分配給某一任務的時間片已經用完,因此將強迫該進程讓出CPU的執行權。
?? ?#監控pid為1(init)的進程及其內部線程的內存(r選項)使用情況,其中每隔2秒刷新并輸出一次,3次后程序退出。需要說明的是,如果-t選項后面不加任何其他選項,缺省監控的為CPU資源。結果中黃色高亮的部分表示進程和其內部線程是樹狀結構的顯示方式。
?? ?/> pidstat -p 1 2 3 -tr
?? ?Linux 2.6.32-71.el6.i686 (Stephen-PC)?? 11/16/2011????? _i686_? (1 CPU)
?? ?07:37:04 AM????? TGID?????? TID? minflt/s? majflt/s???? VSZ??? RSS?? %MEM? Command
?? ?07:37:06 AM???????? 1???????? -????? 0.00????? 0.00??????? 2828?? 1368????? 0.13? init
?? ?07:37:06 AM???????? -???????? 1????? 0.00????? 0.00??????? 2828?? 1368????? 0.13? |__init
?? ?07:37:06 AM????? TGID?????? TID? minflt/s? majflt/s???? VSZ??? RSS?? %MEM? Command
?? ?07:37:08 AM???????? 1???????? -????? 0.00????? 0.00??????? 2828?? 1368????? 0.13? init
?? ?07:37:08 AM???????? -???????? 1????? 0.00????? 0.00??????? 2828?? 1368????? 0.13? |__init
?? ?07:37:08 AM????? TGID?????? TID? minflt/s? majflt/s???? VSZ??? RSS?? %MEM? Command
?? ?07:37:10 AM???????? 1???????? -????? 0.00????? 0.00??????? 2828?? 1368????? 0.13? init
?? ?07:37:10 AM???????? -???????? 1????? 0.00????? 0.00??????? 2828?? 1368????? 0.13? |__init
?? ?Average:???????? TGID?????? TID? minflt/s? majflt/s???? VSZ??? RSS?? %MEM? Command
?? ?Average:??????????? 1???????? -????? 0.00????? 0.00??????? 2828?? 1368????? 0.13? init
?? ?Average:??????????? -???????? 1????? 0.00????? 0.00??????? 2828?? 1368????? 0.13? |__init
??? TGID: 線程組ID。
?? ?TID: 線程ID。??
??? 以上監控不同資源的選項可以同時存在,這樣就將在一次輸出中輸出多種資源的使用情況,如:pidstat -p 1 -dr。
?? ?7.? 報告磁盤空間使用狀況(df):
?? ?該命令最為常用的選項就是-h,該選項將智能的輸出數據單位,以便使輸出的結果更具可讀性。
?? ?/> df -h
?? ?Filesystem???????????? Size? Used?? Avail Use% Mounted on
?? ?/dev/sda1???????????? 5.8G? 3.3G? 2.2G? 61%?? /
?? ?tmpfs??????????????? ? 504M? 260K? 504M?? 1%? /dev/shm
?? ?8.? 評估磁盤的使用狀況(du):
| 選項 | 說明 |
| -a | 包括了所有的文件,而不只是目錄。 |
| -b | 以字節為計算單位。 |
| -k | 以千字節(KB)為計算單位。 |
| -m | 以兆字節(MB)為計算單位。 |
| -h | 是輸出的信息更易于閱讀。 |
| -s | 只顯示工作目錄所占總空間。 |
| --exclude=PATTERN | 排除掉符合樣式的文件,Pattern就是普通的Shell樣式,?表示任何一個字符,*表示任意多個字符。 |
| --max-depth=N | 從當前目錄算起,目錄深度大于N的子目錄將不被計算,該選項不能和s選項同時存在。 |
??? #僅顯示子一級目錄的信息。
??? /> du --max-depth=1 -h
?? ?246M??? ./stephen
?? ?246M??? .???
??? /> du -sh ./*?? #獲取當前目錄下所有子目錄所占用的磁盤空間大小。
?? ?352K??? ./MemcachedTest
?? ?132K??? ./Test
?? ?33M???? ./thirdparty???
?? ?#在當前目錄下,排除目錄名模式為Te*的子目錄(./Test),輸出其他子目錄占用的磁盤空間大小。
?? ?/> du --exclude=Te* -sh ./* ?
?? ?352K??? ./MemcachedTest
?? ?33M???? ./thirdparty
總結
以上是生活随笔為你收集整理的Linux Shell常用技巧(八)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux Shell常用技巧(六)
- 下一篇: Linux Shell常用技巧(九)