系統管理與性能監視命令 (9 個)

chkconfig 管理 Linux 系統開機啓動項。
vmstat 虛擬內存統計。
mpstat 顯示各個可用 CPU 的狀態統計。
iostat 統計系統 IO。
sar 全面地獲取系統的 CPU、運行隊列、磁盤 I/O、分頁(交換區)、內存、 CPU 中斷和網絡等性能數據。
ipcs 用於報告 Linux 中進程間通訊設施的狀態,顯示的信息包括消息列表、共享內存和信號量的信息。
ipcrm 用來刪除一個或更多的消息隊列、信號量集或者共享內存標識。
strace 用於診斷、調試 Linux 用戶空間跟蹤器。咱們用它來監控用戶空間進程和內核的交互,好比系統調用、信號傳遞、進程狀態變動等。
ltrace 命令會跟蹤進程的庫函數調用, 它會顯現出哪一個庫函數被調用。

chkconfig命令

chkconfig命令:檢查、設置系統的各類服務。這是Red Hat公司遵循GPL規則所開發的程序,它可查詢操做系統在每個執行等級中會執行哪些系統服務,其中包括各種常駐服務。謹記chkconfig不是當即自動禁止或激活一個服務,它只是簡單的改變了符號鏈接。mysql

參數:linux

--add:增長所指定的系統服務,讓chkconfig指令得以管理它,並同時在系統啓動的敘述文件內增長相關數據;
--del:刪除所指定的系統服務,再也不由chkconfig指令管理,並同時在系統啓動的敘述文件內刪除相關數據;
--level<等級代號>:指定讀系統服務要在哪個執行等級中開啓或關畢。
等級代號列表:

- 等級0表示:表示關機
- 等級1表示:單用戶模式
- 等級2表示:無網絡鏈接的多用戶命令行模式
- 等級3表示:有網絡鏈接的多用戶命令行模式
- 等級4表示:不可用
- 等級5表示:帶圖形界面的多用戶模式
- 等級6表示:從新啓動

例子ios

chkconfig --list             #列出全部的系統服務。
chkconfig --add httpd        #增長httpd服務。
chkconfig --del httpd        #刪除httpd服務。
chkconfig --level httpd 2345 on        #設置httpd在運行級別爲二、三、四、5的狀況下都是on(開啓)的狀態。
chkconfig --list               #列出系統全部的服務啓動狀況。
chkconfig --list mysqld        #列出mysqld服務設置狀況。
chkconfig --level 35 mysqld on #設定mysqld在等級3和5爲開機運行服務,--level 35表示操做只在等級3和5執行,on表示啓動,off表示關閉。
chkconfig mysqld on            #設定mysqld在各等級爲on,「各等級」包括二、三、四、5等級。

如何增長一個服務:算法

  1. 服務腳本必須存放在/etc/ini.d/目錄下;
  2. chkconfig --add servicename在chkconfig工具服務列表中增長此服務,此時服務會被在/etc/rc.d/rcN.d中賦予K/S入口了;
  3. chkconfig --level 35 mysqld on修改服務的默認啓動等級。

vmstat命令

vmstat命令:顯示虛擬內存狀態(「Virtual Memory Statistics」),可是它能夠報告關於進程、內存、I/O等系統總體運行狀態。sql

格式:vmstat [options] [delay [count]]shell

參數緩存

-a:顯示活動內頁;
-f:顯示啓動後建立的進程總數;
-m:顯示slab信息;
-n:頭信息僅顯示一次;
-s:以表格方式顯示事件計數器和內存狀態;
-d:報告磁盤狀態;
-p:顯示指定的硬盤分區狀態;
-S:輸出信息的單位。

例子:網絡

[root@xxx ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0   6408 198004      0 613984    0    0    10    31   87  105  0  0 100  0  0

字段說明:數據結構

Procs(進程)函數

  • r: 運行隊列中進程數量,這個值也能夠判斷是否須要增長CPU。(長期大於1)
  • b: 等待IO的進程數量。

Memory(內存)

  • swpd: 使用虛擬內存大小,若是swpd的值不爲0,可是SI,SO的值長期爲0,這種狀況不會影響系統性能。
  • free: 空閒物理內存大小。
  • buff: 用做緩衝的內存大小。
  • cache: 用做緩存的內存大小,若是cache的值大的時候,說明cache處的文件數多,若是頻繁訪問到的文件都能被cache處,那麼磁盤的讀IO bi會很是小。

Swap

  • si: 每秒從交換區寫到內存的大小,由磁盤調入內存。
  • so: 每秒寫入交換區的內存大小,由內存調入磁盤。

注意:內存夠用的時候,這2個值都是0,若是這2個值長期大於0時,系統性能會受到影響,磁盤IO和CPU資源都會被消耗。有些朋友看到空閒內存(free)不多的或接近於0時,就認爲內存不夠用了,不能光看這一點,還要結合si和so,若是free不多,可是si和so也不多(大多時候是0),那麼不用擔憂,系統性能這時不會受到影響的。

IO(如今的Linux版本塊的大小爲1kb)

  • bi: 每秒讀取的塊數
  • bo: 每秒寫入的塊數

注意:隨機磁盤讀寫的時候,這2個值越大(如超出1024k),能看到CPU在IO等待的值也會越大。

system(系統)

  • in: 每秒中斷數,包括時鐘中斷。
  • cs: 每秒上下文切換數。

注意:上面2個值越大,會看到由內核消耗的CPU時間會越大。

CPU(以百分比表示)

  • us: 用戶進程執行時間百分比(user time)

us的值比較高時,說明用戶進程消耗的CPU時間多,可是若是長期超50%的使用,那麼咱們就該考慮優化程序算法或者進行加速。

  • sy: 內核系統進程執行時間百分比(system time)

sy的值高時,說明系統內核消耗的CPU資源多,這並非良性表現,咱們應該檢查緣由。

  • wa: IO等待時間百分比

wa的值高時,說明IO等待比較嚴重,這可能因爲磁盤大量做隨機訪問形成,也有可能磁盤出現瓶頸(塊操做)。

  • id: 空閒時間百分比

mpstat命令

mpstat命令:用於多CPU環境下,它顯示各個可用CPU的狀態系你想。這些信息存放在/proc/stat文件中。在多CPUs系統裏,其不但能查看全部CPU的平均情況信息,並且可以查看特定CPU的信息。

格式

mpstat  [  -A  ] [ -u ] [ -V ] [ -I { SUM | CPU | SCPU | ALL } ] [ -P {
       cpu [,...] | ON | ALL } ] [ interval [ count ] ]

參數

-P:指定CPU編號。
interval: 間隔時間
count: 次數

例子:

# 每兩秒顯示,總共顯示三次,-P指定CPU爲ALL
[root@xxx ~]# mpstat -P ALL 2 3
Linux 3.10.0-862.el7.x86_64 (xxx)       07/20/2019      _x86_64_        (1 CPU)

12:55:17 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
12:55:19 AM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
12:55:19 AM    0    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
...

iostat命令

iostat命令:用於監視系統輸入輸出設備和CPU的使用狀況。它的特色是彙報磁盤活動統計狀況,同時也會彙報出CPU使用狀況。同vmstat同樣,iostat也有一個弱點,就是它不能對某個進程進行深刻分析,僅對系統的總體狀況進行分析。

格式:

iostat [ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -t ] [ -V ] [ -x  ]  [
       -y  ]  [  -z  ]  [  -j { ID | LABEL | PATH | UUID | ... } ] [ [ -T ] -g
       group_name ] [ -p [ device [,...] | ALL ] ] [ device [...] |  ALL  ]  [
       interval [ count ] ]

參數:

-c:僅顯示CPU使用狀況;
-d:僅顯示設備利用率;
-k:顯示狀態以千字節每秒爲單位,而不使用塊每秒;
-m:顯示狀態以兆字節每秒爲單位;
-p:僅顯示塊設備和全部被使用的其餘分區的狀態;
-t:顯示每一個報告產生時的時間;
-V:顯示版號並退出;
-x:顯示擴展狀態。
標示 說明
Device 監測設備名稱
rrqm/s 每秒須要讀取需求的數量
wrqm/s 每秒須要寫入需求的數量
r/s 每秒實際讀取需求的數量
w/s 每秒實際寫入需求的數量
rsec/s 每秒讀取區段的數量
wsec/s 每秒寫入區段的數量
rkB/s 每秒實際讀取的大小,單位爲KB
wkB/s 每秒實際寫入的大小,單位爲KB
avgrq-sz 需求的平均大小區段
avgqu-sz 需求的平均隊列長度
await 等待I/O平均的時間(milliseconds)
svctm I/O需求完成的平均時間
%util 被I/O需求消耗的CPU百分比

例子:

[root@xxx ~]# iostat
Linux 3.10.0-862.el7.x86_64 (xxx)       07/20/2019      _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.19    0.00    0.23    0.01    0.00   99.57

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.45        10.10        31.39    1409633    4382534
scd0              0.00         0.01         0.00       1028          0
dm-0              1.54         9.97        30.95    1391650    4321574
dm-1              0.01         0.03         0.04       3840       6160

sar命令

sar命令:Linux下系統運行狀態統計工具,它將指定的操做系統狀態計數器顯示到標準輸出設備。sar工具將對系統當前的狀態進行取樣,而後經過計算數據和比例來表達系統的當前運行狀態。它的特色是能夠連續對系統取樣,得到大量的取樣數據。取樣數據和分析的結果均可以存入文件,使用它時消耗的系統資源很小。

格式:

sar [ -A ] [ -B ] [ -b ] [ -C ] [ -d ] [ -F ] [ -H ] [ -h ] [ -p ] [ -q
       ] [ -R ] [ -r ] [ -S ] [ -t ] [ -u [ ALL ] ] [ -V ] [ -v ] [ -W ] [  -w
       ]  [  -y ] [ -I { int [,...] | SUM | ALL | XALL } ] [ -P { cpu [,...] |
       ALL } ] [ -m { keyword [,...] | ALL } ] [ -n { keyword [,...] | ALL } ]
       [  -j  {  ID  |  LABEL | PATH | UUID | ... } ] [ -f [ filename ] | -o [
       filename ] | -[0-9]+ ] [ -i interval ] [ -s [  hh:mm:ss  ]  ]  [  -e  [
       hh:mm:ss ] ] [ interval [ count ] ]

參數:

-A:顯示全部的報告信息;
-b:顯示I/O速率;
-B:顯示換頁狀態;
-c:顯示進程建立活動;
-d:顯示每一個塊設備的狀態;
-e:設置顯示報告的結束時間;
-f:從指定文件提取報告;
-i:設狀態信息刷新的間隔時間;
-P:報告每一個CPU的狀態;
-R:顯示內存狀態;
-u:顯示CPU利用率;
-v:顯示索引節點,文件和其餘內核表的狀態;
-w:顯示交換分區狀態;
-x:顯示給定進程的狀態。

ipcs命令

ipcs命令:用於報告Linux中進程間通訊設施的狀態,顯示的信息包括消息列表、共享內存和信號量的信息。

參數:

-a:顯示所有可顯示的信息;
-q:顯示活動的消息隊列信息;
-m:顯示活動的共享內存信息;
-s:顯示活動的信號量信息。

例子:

[root@xxx ~]# ipcs -a

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status

------ Semaphore Arrays --------
key        semid      owner      perms      nsems

ipcrm命令

ipcrm命令:用來刪除一個或更多的消息隊列、信號量集或者共享內存標識。

格式:

ipcrm [options]
ipcrm {shm|msg|sem} id...

參數:

-m SharedMemory id 刪除共享內存標識 SharedMemoryID。與 SharedMemoryID 有關聯的共享內存段以及數據結構都會在最後一次拆離操做後刪除。
-M SharedMemoryKey 刪除用關鍵字 SharedMemoryKey 建立的共享內存標識。與其相關的共享內存段和數據結構段都將在最後一次拆離操做後刪除。
-q MessageID 刪除消息隊列標識 MessageID 和與其相關的消息隊列和數據結構。
-Q MessageKey 刪除由關鍵字 MessageKey 建立的消息隊列標識和與其相關的消息隊列和數據結構。
-s SemaphoreID 刪除信號量標識 SemaphoreID 和與其相關的信號量集及數據結構。
-S SemaphoreKey 刪除由關鍵字 SemaphoreKey 建立的信號標識和與其相關的信號量集和數據結構。

strace命令

strace命令:一個集診斷、調試、統計與一體的工具,咱們可使用strace對應用的系統調用和信號傳遞的跟蹤結果來對應用進行分析,以達到解決問題或者是瞭解應用工做過程的目的。固然strace與專業的調試工具好比說gdb之類的是無法相比的,由於它不是一個專業的調試器。

格式

strace  [-CdffhikqrtttTvVxxy]  [-In] [-bexecve] [-eexpr]...  [-acolumn]
       [-ofile]  [-sstrsize]  [-Ppath]...  -ppid...  /  [-D]  [-Evar[=val]]...
       [-uusername] command [args]

strace  -c[df]  [-In]  [-bexecve]  [-eexpr]...  [-Ooverhead] [-Ssortby]
		-ppid... / [-D] [-Evar[=val]]... [-uusername] command [args]

參數:

-c 統計每一系統調用的所執行的時間,次數和出錯的次數等.
-d 輸出strace關於標準錯誤的調試信息.
-f 跟蹤由fork調用所產生的子進程.
-ff 若是提供-o filename,則全部進程的跟蹤結果輸出到相應的filename.pid中,pid是各進程的進程號.
-F 嘗試跟蹤vfork調用.在-f時,vfork不被跟蹤.
-h 輸出簡要的幫助信息.
-i 輸出系統調用的入口指針.
-q 禁止輸出關於脫離的消息.
-r 打印出相對時間關於,,每個系統調用.
-t 在輸出中的每一行前加上時間信息.
-tt 在輸出中的每一行前加上時間信息,微秒級.
-ttt 微秒級輸出,以秒了表示時間.
-T 顯示每一調用所耗的時間.
-v 輸出全部的系統調用.一些調用關於環境變量,狀態,輸入輸出等調用因爲使用頻繁,默認不輸出.
-V 輸出strace的版本信息.
-x 以十六進制形式輸出非標準字符串
-xx 全部字符串以十六進制形式輸出.
-a column 設置返回值的輸出位置.默認 爲40.
-e expr 指定一個表達式,用來控制如何跟蹤.格式:[qualifier=][!]value1[,value2]...
qualifier只能是 trace,abbrev,verbose,raw,signal,read,write其中之一.value是用來限定的符號或數字.默認的 qualifier是 trace.感嘆號是否認符號.例如:-eopen等價於 -e trace=open,表示只跟蹤open調用.而-etrace!=open 表示跟蹤除了open之外的其餘調用.有兩個特殊的符號 all 和 none. 注意有些shell使用!來執行歷史記錄裏的命令,因此要使用\\.
-e trace=set 只跟蹤指定的系統 調用.例如:-e trace=open,close,rean,write表示只跟蹤這四個系統調用.默認的爲set=all.
-e trace=file 只跟蹤有關文件操做的系統調用.
-e trace=process 只跟蹤有關進程控制的系統調用.
-e trace=network 跟蹤與網絡有關的全部系統調用.
-e strace=signal 跟蹤全部與系統信號有關的 系統調用
-e trace=ipc 跟蹤全部與進程通信有關的系統調用
-e abbrev=set 設定strace輸出的系統調用的結果集.-v 等與 abbrev=none.默認爲abbrev=all.
-e raw=set 將指定的系統調用的參數以十六進制顯示.
-e signal=set 指定跟蹤的系統信號.默認爲all.如 signal=!SIGIO(或者signal=!io),表示不跟蹤SIGIO信號.
-e read=set 輸出從指定文件中讀出 的數據.例如: -e read=3,5
-e write=set 輸出寫入到指定文件中的數據.
-o filename 將strace的輸出寫入文件filename
-p pid 跟蹤指定的進程pid.
-s strsize 指定輸出的字符串的最大長度.默認爲32.文件名一直所有輸出.
-u username 以username的UID和GID執行被跟蹤的命令

例子:http://man.linuxde.net/strace

ltrace命令

ltrace命令:用來跟蹤進程調用庫函數的狀況。

格式:

ltrace  [-e  filter|-L] [-l|--library=library_pattern] [-x filter] [-S]
       [-b|--no-signals] [-i] [-w|--where=nr] [-r|-t|-tt|-ttt] [-T] [-F  path‐
       list]  [-A  maxelts]  [-s  strsize] [-C|--demangle] [-a|--align column]
       [-n|--indent nr] [-o|--output filename] [-D|--debug mask] [-u username]
       [-f] [-p pid] [[--] command [arg ...]]

ltrace  -c  [-e  filter|-L]  [-l|--library=library_pattern] [-x filter]
       [-S] [-o|--output filename] [-f] [-p pid] [[--] command [arg ...]]

ltrace -V|--version

ltrace -h|--help

參數

-a 對齊具體某個列的返回值。
-c 計算時間和調用,並在程序退出時打印摘要。
-C 解碼低級別名稱(內核級)爲用戶級名稱。
-d 打印調試信息。
-e 改變跟蹤的事件。
-f 跟蹤子進程。
-h 打印幫助信息。
-i 打印指令指針,當庫調用時。
-l 只打印某個庫中的調用。
-L 不打印庫調用。
-n, --indent=NR 對每一個調用級別嵌套以NR個空格進行縮進輸出。
-o, --output=file 把輸出定向到文件。
-p PID 附着在值爲PID的進程號上進行ltrace。
-r 打印相對時間戳。
-s STRLEN 設置打印的字符串最大長度。
-S 顯示系統調用。
-t, -tt, -ttt 打印絕對時間戳。
-T 輸出每一個調用過程的時間開銷。
-u USERNAME 使用某個用戶id或組ID來運行命令。
-V, --version 打印版本信息,而後退出。
-x NAME treat the global NAME like a library subroutine.(求翻譯)
相關文章
相關標籤/搜索