在linux服務器開發過程中, 經常需要各種命令配合來查看各種狀態,所以整理了一些老的筆記來備忘。
iostat
iostat主要用於監控系統設備的IO負載情況,iostat首次運行時顯示自系統啓動開始的各項統計信息,之後運行iostat將顯示自上次運行該命令以後的統計信息。用戶可以通過指定統計的次數和時間來獲得所需的統計信息
- -c 僅顯示CPU統計信息.與-d選項互斥.
- -d 僅顯示磁盤統計信息.與-c選項互斥.
- -k 以K爲單位顯示每秒的磁盤請求數,默認單位塊.
- -t 在輸出數據時,打印蒐集數據的時間.
- -V 打印版本號和幫助信息.
- -x 輸出擴展信息.
iostat常用用法1:iostat -d
指定採樣時間間隔與採樣次數
我們可以以”iostat interval [count] ”形式指定iostat命令的採樣間隔和採樣次數:
linux # iostat -d 1 2
Linux 2.6.16.60-0.21-smp (linux) 06/13/12
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.55 8.93 36.27 6737086 27367728
sdb 0.00 0.00 0.00 928 0
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 2.00 0.00 72.00 0 72
sdb 0.00 0.00 0.00 0 0
以上命令輸出Device的信息,採樣時間爲1秒,採樣2次,若不指定採樣次數,則iostat會一直輸出採樣信息,直到按”ctrl+c”退出命令。注意,第1次採樣信息與單獨執行iostat的效果一樣,爲從系統開機到當前執行時刻的統計信息。
iostat常用用法2: iostat -x -k -d
linux # iostat -x -k -d 1
Linux 2.6.16.60-0.21-smp (linux) 06/13/12
……
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.00 9915.00 1.00 90.00 4.00 34360.00 755.25 11.79 120.57 6.33 57.60
以上各列的含義如下:
- rrqm/s: 每秒對該設備的讀請求被合併次數,文件系統會對讀取同塊(block)的請求進行合併
- wrqm/s: 每秒對該設備的寫請求被合併次數
- r/s: 每秒完成的讀次數
- w/s: 每秒完成的寫次數
- rkB/s: 每秒讀數據量(kB爲單位)
- wkB/s: 每秒寫數據量(kB爲單位)
- avgrq-sz:平均每次IO操作的數據量(扇區數爲單位)
- avgqu-sz: 平均等待處理的IO請求隊列長度
- await: 平均每次IO請求等待時間(包括等待時間和處理時間,毫秒爲單位)
- svctm: 平均每次IO請求的處理時間(毫秒爲單位)
- %util: 採用週期內用於IO操作的時間比率,即IO隊列非空的時間比率
對於以上示例輸出,我們可以獲取到以下信息:
每秒向磁盤上寫30M左右數據(wkB/s值)
每秒有91次IO操作(r/s+w/s),其中以寫操作爲主體
平均每次IO請求等待處理的時間爲120.57毫秒,處理耗時爲6.33毫秒
等待處理的IO請求隊列中,平均有11.79個請求駐留
netstat
netstat命令用來打印Linux中網絡系統的狀態信息,可讓你得知整個Linux系統的網絡情況。
- -a或–all:顯示所有連線中的Socket;
- -A<網絡類型>或–<網絡類型>:列出該網絡類型連線中的相關地址;
- -c或–continuous:持續列出網絡狀態;
- -C或–cache:顯示路由器配置的快取信息;
- -e或–extend:顯示網絡其他相關信息;
- -F或–fib:顯示FIB;
- -g或–groups:顯示多重廣播功能羣組組員名單;
- -h或–help:在線幫助;
- -i或–interfaces:顯示網絡界面信息表單;
- -l或–listening:顯示監控中的服務器的Socket;
- -M或–masquerade:顯示僞裝的網絡連線;
- -n或–numeric:直接使用ip地址,而不通過域名服務器;
- -N或–netlink或–symbolic:顯示網絡硬件外圍設備的符號連接名稱;
- -o或–timers:顯示計時器;
- -p或–programs:顯示正在使用Socket的程序識別碼和程序名稱;
- -r或–route:顯示Routing Table;
- -s或–statistice:顯示網絡工作信息統計表;
- -t或–tcp:顯示TCP傳輸協議的連線狀況;
- -u或–udp:顯示UDP傳輸協議的連線狀況;
- -v或–verbose:顯示指令執行過程;
- -V或–version:顯示版本信息;
- -w或–raw:顯示RAW傳輸協議的連線狀況;
- -x或–unix:此參數的效果和指定”-A unix”參數相同;
- –ip或–inet:此參數的效果和指定”-A inet”參數相同。
netstat常用用法:netstat -anlp
netstat -anlpt的含義是 : 列出所有處於使用tcp協議的 Sockets
b@b-VirtualBox:~$ sudo netstat -anlpt
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN 1075/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 935/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 2271/cupsd
tcp6 0 0 :::22 :::* LISTEN 935/sshd
tcp6 0 0 ::1:631 :::* LISTEN 2271/cupsd
tcp6 1 0 ::1:50654 ::1:631 CLOSE_WAIT 1027/cups-browsed
查看udp的就是netstat -anlpu;
只查看tcp和udp的就是netstat -anlptu
lsof (list open files)
lsof命令用於查看你進程開打的文件,打開文件的進程,進程打開的端口(TCP、UDP)。找回/恢復刪除的文件。是十分方便的系統監視工具,因爲lsof命令需要訪問核心內存和各種文件,所以需要root用戶執行。
在linux環境下,任何事物都以文件的形式存在,通過文件不僅僅可以訪問常規數據,還可以訪問網絡連接和硬件。
所以如傳輸控制協議 (TCP) 和用戶數據報協議 (UDP) 套接字等,系統在後臺都爲該應用程序分配了一個文件描述符,無論這個文件的本質如何,該文件描述符爲應用程序與基礎操作系統之間的交互提供了通用接口。
因爲應用程序打開文件的描述符列表提供了大量關於這個應用程序本身的信息,因此通過lsof工具能夠查看這個列表對系統監測以及排錯將是很有幫助的。
- -a:列出打開文件存在的進程;
- -c<進程名>:列出指定進程所打開的文件;
- -g:列出GID號進程詳情;
- -d<文件號>:列出佔用該文件號的進程;
- +d<目錄>:列出目錄下被打開的文件;
- +D<目錄>:遞歸列出目錄下被打開的文件;
- -n<目錄>:列出使用NFS的文件;
- -i<條件>:列出符合條件的進程。(4、6、協議、:端口、 @ip ) -p<進程號>:列出指定進程號所打開的文件;
- -u:列出UID號進程詳情;
- -h:顯示幫助信息;
- -v:顯示版本信息
- -R: 顯示PPID(父進程ID)
lsof常用用法1:lsof -p
ps -ef |grep sshd|grep -v grep| awk ‘{print $2}’|xargs sudo lsof -p的含義是:
列出sshd進程打開的所有文件描述符
b@b-VirtualBox:~$ ps -ef |grep sshd|grep -v grep| awk '{print $2}'|xargs sudo lsof -p
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 935 root cwd DIR 8,1 4096 2 /
sshd 935 root rtd DIR 8,1 4096 2 /
sshd 935 root txt REG 8,1 770944 301274 /usr/sbin/sshd
sshd 935 root mem REG 8,1 43616 136982 /lib/x86_64-linux-gnu/libnss_files-2.19.so
sshd 935 root mem REG 8,1 47760 136992 /lib/x86_64-linux-gnu/libnss_nis-2.19.so
sshd 935 root mem REG 8,1 39824 136978 /lib/x86_64-linux-gnu/libnss_compat-2.19.so
sshd 935 root mem REG 8,1 101240 137033 /lib/x86_64-linux-gnu/libresolv-2.19.so
sshd 935 root mem REG 8,1 14256 136950 /lib/x86_64-linux-gnu/libkeyutils.so.1.4
sshd 935 root mem REG 8,1 43672 403209 /usr/lib/x86_64-linux-gnu/libkrb5support.so.0.1
sshd 935 root mem REG 8,1 186824 403203 /usr/lib/x86_64-linux-gnu/libk5crypto.so.3.1
sshd 935 root mem REG 8,1 31792 137035 /lib/x86_64-linux-gnu/librt-2.19.so
sshd 935 root mem REG 8,1 141574 137027 /lib/x86_64-linux-gnu/libpthread-2.19.so
sshd 935 root mem REG 8,1 252032 137010 /lib/x86_64-linux-gnu/libpcre.so.3.13.1
sshd 935 root mem REG 8,1 14664 136924 /lib/x86_64-linux-gnu/libdl-2.19.so
sshd 935 root mem REG 8,1 97296 136976 /lib/x86_64-linux-gnu/libnsl-2.19.so
sshd 935 root mem REG 8,1 1840928 136907 /lib/x86_64-linux-gnu/libc-2.19.so
sshd 935 root mem REG 8,1 14592 136916 /lib/x86_64-linux-gnu/libcom_err.so.2.1
sshd 935 root mem REG 8,1 831616 403207 /usr/lib/x86_64-linux-gnu/libkrb5.so.3.3
sshd 935 root mem REG 8,1 290520 403037 /usr/lib/x86_64-linux-gnu/libgssapi_krb5.so.2.2
sshd 935 root mem REG 8,1 43368 136917 /lib/x86_64-linux-gnu/libcrypt-2.19.so
sshd 935 root mem REG 8,1 100728 137070 /lib/x86_64-linux-gnu/libz.so.1.2.8
sshd 935 root mem REG 8,1 10680 137062 /lib/x86_64-linux-gnu/libutil-2.19.so
sshd 935 root mem REG 8,1 1934624 136919 /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
sshd 935 root mem REG 8,1 281552 136921 /lib/x86_64-linux-gnu/libdbus-1.so.3.7.6
sshd 935 root mem REG 8,1 14536 440884 /usr/lib/x86_64-linux-gnu/libck-connector.so.0.0.0
sshd 935 root mem REG 8,1 134296 137037 /lib/x86_64-linux-gnu/libselinux.so.1
sshd 935 root mem REG 8,1 55856 136999 /lib/x86_64-linux-gnu/libpam.so.0.83.1
sshd 935 root mem REG 8,1 104936 136897 /lib/x86_64-linux-gnu/libaudit.so.1.0.0
sshd 935 root mem REG 8,1 36632 137067 /lib/x86_64-linux-gnu/libwrap.so.0.7.6
sshd 935 root mem REG 8,1 149120 136883 /lib/x86_64-linux-gnu/ld-2.19.so
sshd 935 root 0u CHR 1,3 0t0 6 /dev/null
sshd 935 root 1u CHR 1,3 0t0 6 /dev/null
sshd 935 root 2u CHR 1,3 0t0 6 /dev/null
sshd 935 root 3u IPv4 10479 0t0 TCP *:ssh (LISTEN)
sshd 935 root 4u IPv6 10481 0t0 TCP *:ssh (LISTEN)
- ps -ef | grep sshd | grep -v grep : 獲取ps打印出來的列表中的sshd進程所在的那一行(grep -v grep的含義是清除掉包含“grep”字符串的那一行), 即爲:
b@b-VirtualBox:~$ ps -ef | grep sshd | grep -v grep
root 935 1 0 17:37 ? 00:00:00 /usr/sbin/sshd -D
- awk ‘{print $2}’ : 獲取上述命令打印出來結果的第2列(上述結果的第二列爲sshd的pid, 是935)
- xargs sudo lsof -p : 列出上述結果pid爲935的進程打開的所有文件描述符, 等價於sudo lsof -p 935的結果
lsof常用用法:lsof -i:
sudo lsof -i:22含義爲列出佔用22的進程
b@b-VirtualBox:~$ sudo lsof -i:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 935 root 3u IPv4 10479 0t0 TCP *:ssh (LISTEN)
sshd 935 root 4u IPv6 10481 0t0 TCP *:ssh (LISTEN)
df
df命令用於顯示磁盤分區上的可使用的磁盤空間。默認顯示單位爲KB。可以利用該命令來獲取硬盤被佔用了多少空間,目前還剩下多少空間等信息。
- -a或–all:包含全部的文件系統;
- –block-size=<區塊大小>:以指定的區塊大小來顯示區塊數目;
- -h或–human-readable:以可讀性較高的方式來顯示信息;
- -H或–si:與-h參數相同,但在計算時是以1000 Bytes爲換算單位而非1024 Bytes;
- -i或–inodes:顯示inode的信息;
- -k或–kilobytes:指定區塊大小爲1024字節;
- -l或–local:僅顯示本地端的文件系統;
- -m或–megabytes:指定區塊大小爲1048576字節;
- –no-sync:在取得磁盤使用信息前,不要執行sync指令,此爲預設值;
- -P或–portability:使用POSIX的輸出格式;
- –sync:在取得磁盤使用信息前,先執行sync指令;
- -t<文件系統類型>或–type=<文件系統類型>:僅顯示指定文件系統類型的磁盤信息;
- -T或–print-type:顯示文件系統的類型;
- -x<文件系統類型>或–exclude-type=<文件系統類型>:不要顯示指定文件系統類型的磁盤信息;
- –help:顯示幫助;
- –version:顯示版本信息
df常用用法:df -h
b@b-VirtualBox:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 990M 4.0K 990M 1% /dev
tmpfs 201M 968K 200M 1% /run
/dev/sda1 8.8G 4.1G 4.3G 49% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
none 5.0M 0 5.0M 0% /run/lock
none 1001M 76K 1001M 1% /run/shm
none 100M 36K 100M 1% /run/user
/dev/sr0 57M 57M 0 100% /media/b/VBOXADDITIONS_5.1.22_115126
free
free命令可以顯示當前系統未使用的和已使用的內存數目,還可以顯示被內核使用的內存緩衝區。
free常用用法:free -m或者free -g
b@b-VirtualBox:~$ free -m
total used free shared buffers cached
Mem: 2000 1231 768 9 72 456
-/+ buffers/cache: 702 1297
Swap: 1021 0 1021