您須要監控 Linux 服務器的性能嗎?試試用這些內置命令和附加工具吧!大多數 Linux 發行版都附帶了大量的監控工具。這些工具提供了獲取系統活動的相關指標。您可使用這些工具來查找性能問題的可能緣由。本文提到的是一些基本的命令,用於系統分析和服務器調試等,例如:php
top
命令會顯示 Linux 的進程。它提供了一個運行中系統的實時動態視圖,即實際的進程活動。默認狀況下,它顯示在服務器上運行的 CPU 佔用率最高的任務,而且每五秒更新一次。html
圖 01:Linux top 命令前端
經常使用快捷鍵列表:java
快捷鍵 | 用法 |
---|---|
t |
是否顯示彙總信息 |
m |
是否顯示內存信息 |
A |
根據各類系統資源的利用率對進程進行排序,有助於快速識別系統中性能不佳的任務。 |
f |
進入 top 的交互式配置屏幕,用於根據特定的需求而設置 top 的顯示。 |
o |
交互式地調整 top 每一列的順序。 |
r |
調整優先級(renice ) |
k |
殺掉進程(kill ) |
z |
切換彩色或黑白模式 |
相關連接:Linux 如何查看 CPU 利用率?linux
vmstat
命令報告有關進程、內存、分頁、塊 IO、中斷和 CPU 活動等信息。ios
1
2
|
# vmstat 3
|
輸出示例:git
1
2
3
4
5
6
7
8
9
10
|
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 2540988 522188 5130400 0 0 2 32 4 2 4 1 96 0 0
1 0 0 2540988 522188 5130400 0 0 0 720 1199 665 1 0 99 0 0
0 0 0 2540956 522188 5130400 0 0 0 0 1151 1569 4 1 95 0 0
0 0 0 2540956 522188 5130500 0 0 0 6 1117 439 1 0 99 0 0
0 0 0 2540940 522188 5130512 0 0 0 536 1189 932 1 0 98 0 0
0 0 0 2538444 522188 5130588 0 0 0 0 1187 1417 4 1 96 0 0
0 0 0 2490060 522188 5130640 0 0 0 18 1253 1123 5 1 94 0 0
|
顯示 Slab 緩存的利用率github
1
2
|
# vmstat -m
|
1
2
|
# vmstat -a
|
相關連接:如何查看 Linux 的資源利用率從而找到系統瓶頸?web
w 命令 顯示了當前登陸在該系統上的用戶及其進程。apache
1
2
3
|
# w username
# w vivek
|
輸出示例:
1
2
3
4
5
|
17:58:47 up 5 days, 20:28, 2 users, load average: 0.36, 0.26, 0.24
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.1.3.145 14:55 5.00s 0.04s 0.02s vim /etc/resolv.conf
root pts/1 10.1.3.145 17:43 0.00s 0.03s 0.00s w
|
4. uptime – Linux 系統運行了多久
uptime
命令能夠用來查看服務器運行了多長時間:當前時間、已運行的時間、當前登陸的用戶鏈接數,以及過去 1 分鐘、5 分鐘和 15 分鐘的系統負載平均值。
1
2
|
# uptime
|
輸出示例:
1
2
|
18:02:41 up 41 days, 23:42, 1 user, load average: 0.00, 0.00, 0.00
|
1
能夠被認爲是最佳負載值。不一樣的系統會有不一樣的負載:對於單核 CPU 系統來講,1
到 3
的負載值是能夠接受的;而對於 SMP(對稱多處理)系統來講,負載能夠是 6
到 10
。
ps
命令顯示當前運行的進程。要顯示全部的進程,請使用 -A
或 -e
選項:
1
2
|
# ps -A
|
輸出示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:02 migration/0
3 ? 00:00:01 ksoftirqd/0
4 ? 00:00:00 watchdog/0
5 ? 00:00:00 migration/1
6 ? 00:00:15 ksoftirqd/1
....
.....
4881 ? 00:53:28 java
4885 tty1 00:00:00 mingetty
4886 tty2 00:00:00 mingetty
4887 tty3 00:00:00 mingetty
4888 tty4 00:00:00 mingetty
4891 tty5 00:00:00 mingetty
4892 tty6 00:00:00 mingetty
4893 ttyS1 00:00:00 agetty
12853 ? 00:00:00 cifsoplockd
12854 ? 00:00:00 cifsdnotifyd
14231 ? 00:10:34 lighttpd
14232 ? 00:00:00 php-cgi
54981 pts/0 00:00:00 vim
55465 ? 00:00:00 php-cgi
55546 ? 00:00:00 bind9-snmp-stat
55704 pts/1 00:00:00 ps
|
ps
與 top
相似,但它提供了更多的信息。
1
2
|
# ps -Al
|
顯示完整輸出格式(它將顯示傳遞給進程的命令行參數):
1
2
|
# ps -AlF
|
顯示線程(輕量級進程(LWP)和線程的數量(NLWP))
1
2
|
# ps -AlFH
|
在進程後顯示線程
1
2
|
# ps -AlLm
|
顯示系統上全部的進程
1
2
3
|
# ps ax
# ps axu
|
顯示進程樹
1
2
3
4
|
# ps -ejH
# ps axjf
# pstree
|
顯示進程的安全信息
1
2
3
4
|
# ps -eo euser,ruser,suser,fuser,f,comm,label
# ps axZ
# ps -eM
|
顯示指定用戶(如 vivek)運行的進程
1
2
|
# ps -U vivek -u vivek u
|
設置用戶自定義的輸出格式
1
2
3
4
|
# ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
# ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
# ps -eopid,tt,user,fname,tmout,f,wchan
|
顯示某進程(如 lighttpd)的 PID
1
2
|
# ps -C lighttpd -o pid=
|
或
1
2
|
# pgrep lighttpd
|
或
1
2
|
# pgrep -u vivek php-cgi
|
顯示指定 PID(如 55977)的進程名稱
1
2
|
# ps -p 55977 -o comm=
|
找出佔用內存資源最多的前 10 個進程
1
2
|
# ps -auxf | sort -nr -k 4 | head -10
|
找出佔用 CPU 資源最多的前 10 個進程
1
2
|
# ps -auxf | sort -nr -k 3 | head -10
|
相關連接:顯示 Linux 上全部運行的進程
free
命令顯示了系統的可用和已用的物理內存及交換內存的總量,以及內核用到的緩存空間。
1
2
|
# free
|
輸出示例:
1
2
3
4
5
|
total used free shared buffers cached
Mem: 12302896 9739664 2563232 0 523124 5154740
-/+ buffers/cache: 4061800 8241096
Swap: 1052248 0 1052248
|
相關連接: 1. 獲取 Linux 的虛擬內存的內存頁大小(PAGESIZE) 2. 限制 Linux 每一個進程的 CPU 使用率 3. 個人 Ubuntu 或 Fedora Linux 系統有多少內存?
iostat
命令用於彙報 CPU 的使用狀況,以及設備、分區和網絡文件系統(NFS)的 IO 統計信息。
1
2
|
# iostat
|
輸出示例:
1
2
3
4
5
6
7
8
9
10
11
|
Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009
avg-cpu: %user %nice %system %iowait %steal %idle
3.50 0.09 0.51 0.03 0.00 95.86
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 22.04 31.88 512.03 16193351 260102868
sda1 0.00 0.00 0.00 2166 180
sda2 22.04 31.87 512.03 16189010 260102688
sda3 0.00 0.00 0.00 1615 0
|
相關連接:如何跟蹤 Linux 系統的 NFS 目錄或磁盤的 IO 負載狀況
sar
命令用於收集、彙報和保存系統活動信息。要查看網絡統計,請輸入:
1
2
|
# sar -n DEV | more
|
顯示 24 日的網絡統計:
# sar -n DEV -f /var/log/sa/sa24 | more
您還可使用 sar
顯示實時使用狀況:
1
2
|
# sar 4 5
|
輸出示例:
1
2
3
4
5
6
7
8
9
10
|
Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009
06:45:12 PM CPU %user %nice %system %iowait %steal %idle
06:45:16 PM all 2.00 0.00 0.22 0.00 0.00 97.78
06:45:20 PM all 2.07 0.00 0.38 0.03 0.00 97.52
06:45:24 PM all 0.94 0.00 0.28 0.00 0.00 98.78
06:45:28 PM all 1.56 0.00 0.22 0.00 0.00 98.22
06:45:32 PM all 3.53 0.00 0.25 0.03 0.00 96.19
Average: all 2.02 0.00 0.27 0.01 0.00 97.70
|
相關連接:
mpstat
命令顯示每一個可用處理器的使用狀況,編號從 0 開始。命令 mpstat -P ALL
顯示了每一個處理器的平均使用率:
1
2
|
# mpstat -P ALL
|
輸出示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
Linux 2.6.18-128.1.14.el5 (www03.nixcraft.in) 06/26/2009
06:48:11 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s
06:48:11 PM all 3.50 0.09 0.34 0.03 0.01 0.17 0.00 95.86 1218.04
06:48:11 PM 0 3.44 0.08 0.31 0.02 0.00 0.12 0.00 96.04 1000.31
06:48:11 PM 1 3.10 0.08 0.32 0.09 0.02 0.11 0.00 96.28 34.93
06:48:11 PM 2 4.16 0.11 0.36 0.02 0.00 0.11 0.00 95.25 0.00
06:48:11 PM 3 3.77 0.11 0.38 0.03 0.01 0.24 0.00 95.46 44.80
06:48:11 PM 4 2.96 0.07 0.29 0.04 0.02 0.10 0.00 96.52 25.91
06:48:11 PM 5 3.26 0.08 0.28 0.03 0.01 0.10 0.00 96.23 14.98
06:48:11 PM 6 4.00 0.10 0.34 0.01 0.00 0.13 0.00 95.42 3.75
06:48:11 PM 7 3.30 0.11 0.39 0.03 0.01 0.46 0.00 95.69 76.89
|
相關連接:多處理器的 Linux 上單獨顯示每一個 CPU 的使用率.
pmap
命令用以顯示進程的內存映射,使用此命令能夠查找內存瓶頸。
1
2
|
# pmap -d PID
|
顯示 PID 爲 47394 的進程的內存信息,請輸入:
1
2
|
# pmap -d 47394
|
輸出示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
47394: /usr/bin/php-cgi
Address Kbytes Mode Offset Device Mapping
0000000000400000 2584 r-x-- 0000000000000000 008:00002 php-cgi
0000000000886000 140 rw--- 0000000000286000 008:00002 php-cgi
00000000008a9000 52 rw--- 00000000008a9000 000:00000 [ anon ]
0000000000aa8000 76 rw--- 00000000002a8000 008:00002 php-cgi
000000000f678000 1980 rw--- 000000000f678000 000:00000 [ anon ]
000000314a600000 112 r-x-- 0000000000000000 008:00002 ld-2.5.so
000000314a81b000 4 r---- 000000000001b000 008:00002 ld-2.5.so
000000314a81c000 4 rw--- 000000000001c000 008:00002 ld-2.5.so
000000314aa00000 1328 r-x-- 0000000000000000 008:00002 libc-2.5.so
000000314ab4c000 2048 ----- 000000000014c000 008:00002 libc-2.5.so
.....
......
..
00002af8d48fd000 4 rw--- 0000000000006000 008:00002 xsl.so
00002af8d490c000 40 r-x-- 0000000000000000 008:00002 libnss_files-2.5.so
00002af8d4916000 2044 ----- 000000000000a000 008:00002 libnss_files-2.5.so
00002af8d4b15000 4 r---- 0000000000009000 008:00002 libnss_files-2.5.so
00002af8d4b16000 4 rw--- 000000000000a000 008:00002 libnss_files-2.5.so
00002af8d4b17000 768000 rw-s- 0000000000000000 000:00009 zero (deleted)
00007fffc95fe000 84 rw--- 00007ffffffea000 000:00000 [ stack ]
ffffffffff600000 8192 ----- 0000000000000000 000:00000 [ anon ]
mapped: 933712K writeable/private: 4304K shared: 768000K
|
最後一行很是重要:
mapped: 933712K
映射到文件的內存量writeable/private: 4304K
私有地址空間shared: 768000K
此進程與其餘進程共享的地址空間相關連接:使用 pmap 命令查看 Linux 上單個程序或進程使用的內存
netstat
命令顯示網絡鏈接、路由表、接口統計、假裝鏈接和多播鏈接等信息。
1
2
3
|
# netstat -tulpn
# netstat -nat
|
12. ss – 網絡統計
ss
命令用於獲取套接字統計信息。它能夠顯示相似於 netstat
的信息。不過 netstat
幾乎要過期了,ss
命令更具優點。要顯示全部 TCP 或 UDP 套接字:
1
2
|
# ss -t -a
|
或
1
2
|
# ss -u -a
|
顯示全部帶有 SELinux 安全上下文Security Context的 TCP 套接字:
1
2
|
# ss -t -a -Z
|
請參閱如下關於 ss
和 netstat
命令的資料:
iptraf
命令是一個基於 ncurses 的交互式 IP 網絡監控工具。它能夠生成多種網絡統計信息,包括 TCP 信息、UDP 計數、ICMP 和 OSPF 信息、以太網負載信息、節點統計信息、IP 校驗錯誤等。它以簡單的格式提供瞭如下信息:
圖 02:常規接口統計:基於網絡接口的 IP 流量統計
圖 03:基於 TCP 鏈接的網絡流量統計
相關連接:在 Centos / RHEL / Fedora Linux 上安裝 IPTraf 以獲取網絡統計信息
tcpdump
命令是簡單的分析網絡通訊的命令。您須要充分了解 TCP/IP 協議才便於使用此工具。例如,要顯示有關 DNS 的流量信息,請輸入:
1
2
|
# tcpdump -i eth1 'udp port 53'
|
查看全部去往和來自端口 80 的 IPv4 HTTP 數據包,僅打印真正包含數據的包,而不是像 SYN、FIN 和僅含 ACK 這類的數據包,請輸入:
1
2
|
# tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
|
顯示全部目標地址爲 202.54.1.5 的 FTP 會話,請輸入:
1
2
|
# tcpdump -i eth1 'dst 202.54.1.5 and (port 21 or 20'
|
打印全部目標地址爲 192.168.1.5 的 HTTP 會話:
1
2
|
# tcpdump -ni eth0 'dst 192.168.1.5 and tcp and port http'
|
使用 wireshark 查看文件的詳細內容,請輸入:
1
2
|
# tcpdump -n -i eth1 -s 0 -w output.txt src or dst port 80
|
iotop
命令利用 Linux 內核監控 I/O 使用狀況,它按進程或線程的順序顯示 I/O 使用狀況。
1
2
|
$ sudo iotop
|
輸出示例:
htop
是一款免費並開源的基於 ncurses 的 Linux 進程查看器。它比 top
命令更簡單易用。您無需使用 PID、無需離開 htop
界面,即可以殺掉進程或調整其調度優先級。
1
2
|
$ htop
|
輸出示例:
相關連接:CentOS / RHEL:安裝 htop——交互式文本模式進程查看器
atop
是一個很是強大的交互式 Linux 系統負載監控器,它從性能的角度顯示最關鍵的硬件資源信息。您能夠快速查看 CPU、內存、磁盤和網絡性能。它還能夠從進程的級別顯示哪些進程形成了相關 CPU 和內存的負載。
1
2
|
$ atop
|
相關連接:CentOS / RHEL:安裝 atop 工具——高級系統和進程監控器
您必定須要監控 Linux 服務器上的進程和登陸活動吧。psacct
或 acct
軟件包中包含了多個用於監控進程活動的工具,包括:
ac
命令:顯示有關用戶鏈接時間的統計信息accton
命令:打開或關閉進程帳號記錄功能sa
命令:進程帳號記錄信息的摘要monit
是一個免費且開源的進程監控軟件,它能夠自動重啓停掉的服務。您也可使用 Systemd、daemontools 或其餘相似工具來達到一樣的目的。本教程演示如何在 Debian 或 Ubuntu Linux 上安裝和配置 monit 做爲進程監控器。
NetHogs 是一個輕便的網絡監控工具,它按照進程名稱(如 Firefox、wget 等)對帶寬進行分組。若是網絡流量忽然爆發,啓動 NetHogs,您將看到哪一個進程(PID)致使了帶寬激增。
1
2
|
$ sudo nethogs
|
相關連接:Linux:使用 Nethogs 工具查看每一個進程的帶寬使用狀況
iftop
命令監聽指定接口(如 eth0)上的網絡通訊狀況。它顯示了一對主機的帶寬使用狀況。
1
2
|
$ sudo iftop
|
vnstat
是一個簡單易用的基於控制檯的網絡流量監視器,它爲指定網絡接口保留每小時、天天和每個月網絡流量日誌。
1
2
|
$ vnstat
|
相關連接:
nmon
是 Linux 系統管理員用於性能調優的利器,它在命令行顯示 CPU、內存、網絡、磁盤、文件系統、NFS、消耗資源最多的進程和分區信息。
1
2
|
$ nmon
|
相關連接:安裝並使用 nmon 工具來監控 Linux 系統的性能
glances
是一款開源的跨平臺監控工具。它在小小的屏幕上提供了大量的信息,還能夠工做於客戶端-服務器模式下。
1
2
|
$ glances
|
相關連接:Linux:經過 Glances 監控器密切關注您的系統
想要跟蹤 Linux 系統的調用和信號嗎?試試 strace
命令吧。它對於調試網頁服務器和其餘服務器問題頗有用。瞭解如何利用其 追蹤進程 並查看它在作什麼。
/proc
文件系統提供了不一樣硬件設備和 Linux 內核的詳細信息。更多詳細信息,請參閱 Linux 內核 /proc 文檔。常見的 /proc
例子:
1
2
3
4
5
|
# cat /proc/cpuinfo
# cat /proc/meminfo
# cat /proc/zoneinfo
# cat /proc/mounts
|
Nagios 是一款廣泛使用的開源系統和網絡監控軟件。您能夠輕鬆地監控全部主機、網絡設備和服務,當狀態異常和恢復正常時它都會發出警報通知。FAN 是「全自動 Nagios」的縮寫。FAN 的目標是提供包含由 Nagios 社區提供的大多數工具包的 Nagios 安裝。FAN 提供了標準 ISO 格式的 CD-Rom 鏡像,使安裝變得更加容易。除此以外,爲了改善 Nagios 的用戶體驗,發行版還包含了大量的工具。
Cacti 是一個完整的網絡圖形化解決方案,旨在充分利用 RRDTool 的數據存儲和圖形功能。Cacti 提供了快速輪詢器、高級圖形模板、多種數據採集方法和用戶管理功能。這些功能被包裝在一個直觀易用的界面中,確保能夠實現從局域網到擁有數百臺設備的複雜網絡上的安裝。它能夠提供有關網絡、CPU、內存、登陸用戶、Apache、DNS 服務器等的數據。瞭解如何在 CentOS / RHEL 下 安裝和配置 Cacti 網絡圖形化工具。
KSysguard 是 KDE 桌面的網絡化系統監控程序。這個工具能夠經過 ssh 會話運行。它提供了許多功能,好比能夠監控本地和遠程主機的客戶端-服務器模式。前端圖形界面使用傳感器來檢索信息。傳感器能夠返回簡單的值或更復雜的信息,如表格。每種類型的信息都有一個或多個顯示界面,並被組織成工做表的形式,這些工做表能夠分別保存和加載。因此,KSysguard 不只是一個簡單的任務管理器,仍是一個控制大型服務器平臺的強大工具。
圖 05:KDE System Guard {圖片來源:維基百科}
詳細用法,請參閱 KSysguard 手冊。
系統監控程序可以顯示系統基本信息,並監控系統進程、系統資源使用狀況和文件系統。您還能夠用其修改系統行爲。雖然不如 KDE System Guard 強大,但它提供的基本信息對新用戶仍是有用的:
圖 06:Gnome 系統監控程序
更多工具:
ntop
是查看網絡使用狀況的最佳工具,與 top
命令之於進程的方式相似,即網絡流量監控工具。您能夠查看網絡狀態和 UDP、TCP、DNS、HTTP 等協議的流量分發。mtr
將 traceroute
和 ping
程序的功能結合在一個網絡診斷工具中。若是您有其餘推薦的系統監控工具,歡迎在評論區分享。