1、free
顯示當前系統未使用的和已使用的內存數目,還可以顯示被內核使用的內存緩沖區
-b:以Byte為單位顯示內存使用情況;
-k:以KB為單位顯示內存使用情況;
-m:以MB為單位顯示內存使用情況;
-o:不顯示緩沖區調節列;
-s<間隔秒數>:持續觀察內存使用狀況;
-t:顯示內存總和列
2、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=<文件系統類型>:不要顯示指定文件系統類型的磁盤信息;
3、top
實時動態地查看系統的整體運行情況,是一個綜合了多方信息監測系統性能和運行信息的實用工具。通過top命令所提供的互動式界面,用熱鍵可以管理。
選項
-b:以批處理模式操作;
-c:顯示完整的治命令;
-d:屏幕刷新間隔時間;
-I:忽略失效過程;
-s:保密模式;
-S:累積模式;
-i<時間>:設置間隔時間;
-u<用戶名>:指定用戶名;
-p<進程號>:指定進程;
-n<次數>:循環顯示的次數。
交互命令
1:顯示具體cpu的狀態;
"Shift"+">"和"shift"+"<":修改進程信息的排序方式;
h:顯示幫助畫面,給出一些簡短的命令總結說明;
k:終止一個進程;
i:忽略閑置和僵死進程,這是一個開關式命令;
q:退出程序;
r:重新安排一個進程的優先級別;
S:切換到累計模式;
s:改變兩次刷新之間的延遲時間(單位為s),如果有小數,就換算成ms。輸入0值則系統將不斷刷新,默認值是5s;
f或者F:從當前顯示中添加或者刪除項目;
o或者O:改變顯示項目的順序;
l:切換顯示平均負載和啟動時間信息;
m:切換顯示內存信息;
t:切換顯示進程和CPU狀態信息;
c:切換顯示命令名稱和完整命令行;
M:根據駐留內存大小進行排序;
P:根據CPU使用百分比大小進行排序;
T:根據時間/累計時間進行排序;
w:將當前設置寫入~/.toprc文件中。
top中一些字段的含義
第一行:
* 當前的時間
* 系統累積以及運行的時間
* 當前登入用戶的數量
* 當前的系統負載
第二行:
* 進程總數
* 正常運行的進程數量
* 休眠的進程總數
* 停止的進程總數
* 僵死進程總數
zombie僵屍進程
僵屍進程:一個進程使用fork創建子進程,如果子進程退出,而父進程並沒有調用wait或waitpid獲取子進程的狀態信息,那么子進程的進程描述符仍然保存在系統中。這種進程稱之為僵死進程。在每個進程退出的時候,內核釋放該進程所有的資源,包括打開的文件,占用的內存等。 但是仍然為其保留一定的信息(包括進程號the process ID,退出狀態the termination status of the process,運行時間the amount of CPU time taken by the process等)。直到父進程通過wait / waitpid來取時才釋放。 但這樣就導致了問題,如果進程不調用wait / waitpid的話, 那么保留的那段信息就不會釋放,其進程號就會一直被占用,但是系統所能使用的進程號是有限的,如果大量的產生僵死進程,將因為沒有可用的進程號而導致系統不能產生新的進程. 此即為僵屍進程的危害,應當避免。
從系統角度來說,處理僵屍進程有兩種方法:
1 找到僵死進程的父進程,kill掉父進程,那么僵死進程將變為孤兒進程,孤兒進程在系統中由init進程接管,init進程將回收僵死進程的資源
2 reboot系統,因為僵死進程是不可以被kill掉
第三行:
%Cpu(s): 10.6 us, 1.4 sy, 0.0 ni, 87.7 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
* us用戶進程占用cpu資源的百分比
* sy內核態進程占cpu資源的百分比 (對於硬件的控制,內核來控制
* ni用戶進程空間內改變過優先級的進程占cpu資源的百分比
* id空閑cpu的百分比
* wa 等待輸入輸出(io)的進程占c資源的百分比 (從硬盤加載到內存)
* hi 硬中斷(Hardware IRQ)占用cpu的百分比
* si軟中斷(Software Interrupts)占用cpu的百分比
* st 虛擬機占用cpu的百分比
進程信息:
PR:Priority 進程的優先級
NI:Nice Value.優先級的值,負數表示優先級很高,正數表示優先級比較低。
VIRT:virtual memory usage 虛擬內存,虛擬內存=物理內存+swap
1、進程"需要的"虛擬內存大小,包括進程使用的庫、代碼、數據等
2、假如進程申請100m的內存,但實際只使用了10m,那么它會增長100m,而不是實際的使用量
RES:resident memory usage 常駐內存
1、進程當前使用的內存大小,但不包括swap out
2、包含其他進程的共享
3、如果申請100m的內存,實際使用10m,它只增長10m,與VIRT相反
4、關於庫占用內存的情況,它只統計加載的庫文件所占內存大小
SHR:shared memory 共享內存
S — 進程狀態 D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/停止 Z=僵屍進程
1、除了自身進程的共享內存,也包括其他進程的共享內存
2、雖然進程只使用了幾個共享庫的函數,但它包含了整個共享庫的大小
3、計算某個進程所占的物理內存大小公式:RES – SHR
4、swap out后,它將會降下來
DATA
1、數據占用的內存。如果top沒有顯示,按f鍵可以顯示出來。
2、真正的該程序要求的數據空間,是真正在運行中要使用的。
早期操作系統不支持多任務
對於操作系統的多任務,通過cpu時間片來實現處理多任務,目前的cpu主頻率可達5.0GHz
4、uptime
打印系統總共運行了多長時間和系統的平均負載。uptime命令可以顯示的信息顯示依次為:現在時間、系統已經運行了多長時間、目前有多少登陸用戶、系統在過去的1分鍾、5分鍾和15分鍾內的平均負載,系統平均負載是指在特定時間間隔內運行隊列中的平均進程數。
[root@zabbix ~]# uptime
17:48:22 up 2:28, 2 users, load average: 0.00, 0.06, 0.07
負載越高,系統越卡,負載值盡量不要超過cpu核數的兩倍以上
5、lscpu
顯示cpu的相關信息,也可以通過cat /proc/cpuinfo查看詳細信息
lscpu從sysfs和/proc/cpuinfo收集cpu體系結構信息,命令的輸出比較易讀
命令輸出的信息包含cpu數量,線程,核數,套接字和Nom-Uniform Memeor Access(NUMA),緩存等
顯示格式:
Architecture: #架構
CPU(s): #邏輯cpu顆數
Thread(s) per core: #每個核心線程
Core(s) per socket: #每個cpu插槽核數/每顆物理cpu核數
CPU socket(s): #cpu插槽數
Vendor ID: #cpu廠商ID
CPU family: #cpu系列
Model: #型號
Stepping: #步進
CPU MHz: #cpu主頻
Virtualization: #cpu支持的虛擬化技術
L1d cache: #一級緩存(google了下,這具體表示表示cpu的L1數據緩存)
L1i cache: #一級緩存(具體為L1指令緩存)
L2 cache: #二級緩存
6、iftop
yum install iftop -y
iftop可以用來監控網卡的實時流量(可以指定網段)、反向解析IP、顯示端口信息等
6.1 iftop界面相關說明
界面上面顯示的是類似刻度尺的刻度范圍,為顯示流量圖形的長條作標尺用的。
中間的<= =>這兩個左右箭頭,表示的是流量的方向。
TX:發送流量
RX:接收流量
TOTAL:總流量
Cumm:運行iftop到目前時間的總流量
peak:流量峰值
rates:分別表示過去 2s 10s 40s 的平均流量
6.2 iftop相關參數
常用的參數
-i設定監測的網卡,如:# iftop -i eth1
-B 以bytes為單位顯示流量(默認是bits),如:# iftop -B
-n使host信息默認直接都顯示IP,如:# iftop -n
-N使端口信息默認直接都顯示端口號,如: # iftop -N
-F顯示特定網段的進出流量,如# iftop -F 10.10.1.0/24或# iftop -F 10.10.1.0/255.255.255.0
-h(display this message),幫助,顯示參數信息
-p使用這個參數后,中間的列表顯示的本地主機信息,出現了本機以外的IP信息;
-b使流量圖形條默認就顯示;
-f這個暫時還不太會用,過濾計算包用的;
-P使host信息及端口信息默認就都顯示;
-m設置界面最上邊的刻度的最大值,刻度分五個大段顯示,例:# iftop -m 100M
進入iftop畫面后的一些操作命令(注意大小寫)
按h切換是否顯示幫助;
按n切換顯示本機的IP或主機名;
按s切換是否顯示本機的host信息;
按d切換是否顯示遠端目標主機的host信息;
按t切換顯示格式為2行/1行/只顯示發送流量/只顯示接收流量;
按N切換顯示端口號或端口服務名稱;
按S切換是否顯示本機的端口信息;
按D切換是否顯示遠端目標主機的端口信息;
按p切換是否顯示端口信息;
按P切換暫停/繼續顯示;
按b切換是否顯示平均流量圖形條;
按B切換計算2秒或10秒或40秒內的平均流量;
按T切換是否顯示每個連接的總流量;
按l打開屏幕過濾功能,輸入要過濾的字符,比如ip,按回車后,屏幕就只顯示這個IP相關的流量信息;
按L切換顯示畫面上邊的刻度;刻度不同,流量圖形條會有變化;
按j或按k可以向上或向下滾動屏幕顯示的連接記錄;
按1或2或3可以根據右側顯示的三列流量數據進行排序;
按<根據左邊的本機名或IP排序;
按>根據遠端目標主機的主機名或IP排序;
按o切換是否固定只顯示當前的連接;
按f可以編輯過濾代碼,這是翻譯過來的說法,我還沒用過這個!
按!可以使用shell命令,這個沒用過!沒搞明白啥命令在這好用呢!
按q退出監控。
7、iostat
iostat主要用於監控系統設備的IO負載情況,iostat首次運行時顯示自系統啟動開始的各項統計信息,之后運行iostat將顯示自上次運行該命令以后的統計信息。用戶可以通過指定統計的次數和時間來獲得所需的統計信息。
yum install sysstat -y
-c 僅顯示CPU統計信息.與-d選項互斥.
-d 僅顯示磁盤統計信息.與-c選項互斥.
-k 以K為單位顯示每秒的磁盤請求數,默認單位塊.
-p device | ALL
與-x選項互斥,用於顯示塊設備及系統分區的統計信息.也可以在-p后指定一個設備名,如:
# iostat -p hda
或顯示所有設備
# iostat -p ALL
-t 在輸出數據時,打印搜集數據的時間.
-V 打印版本號和幫助信息.
-x 輸出擴展信息
第一部分包含了CPU報告
%user : 顯示了在執行用戶(應用)層時的CPU利用率
%nice : 顯示了在以nice優先級運行用戶層的CPU利用率
%system : 顯示了在執行系統(內核)層時的CPU利用率
%iowait : 顯示了CPU在I/O請求掛起時空閑時間的百分比
%steal : 顯示了當hypervisor正服務於另外一個虛擬處理器時無意識地等待虛擬CPU所占有的時間百分比。
%idle : 顯示了CPU在I/O沒有掛起請求時空閑時間的百分比
第二部分包含了設備利用率報告
Device : 列出的/dev 目錄下的設備/分區名稱
tps : 顯示每秒傳輸給設備的數量。更高的tps意味着處理器更忙。
KB_read/s : 顯示了每秒從設備上讀取的塊的數量(KB,MB)
KB_wrtn/s : 顯示了每秒寫入設備上塊的數量(KB,MB)
KB_read : 顯示所有已讀取的塊
KB_wrtn : 顯示所有已寫入的塊
8、vmstat
顯示虛擬內存狀態("Viryual Memor Statics"),但是它可以報告關於進程、內存、I/O等系統整體運行狀態。
-a:顯示活動內頁;
-f:顯示啟動后創建的進程總數;
-m:顯示slab信息;
-n:頭信息僅顯示一次;
-s:以表格方式顯示事件計數器和內存狀態;
-d:報告磁盤狀態;
-p:顯示指定的硬盤分區狀態;
-S:輸出信息的單位。
字段說明:
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: 空閑時間百分比
9、dmidecode
獲取有關硬件方面的信息。dmidecode遵循SMBIOS/DMI標准,其輸出的信息包括BIOS、系統、主板、處理器、內存、緩存等等
參數:
-d:(default:/dev/mem)從設備文件讀取信息,輸出內容與不加參數標准輸出相同。
-h:顯示幫助信息。
-s:只顯示指定DMI字符串的信息。(string)
-t:只顯示指定條目的信息。(type)
-u:顯示未解碼的原始條目內容。
--dump-bin file:將DMI數據轉儲到一個二進制文件中。
--from-dump FILE:從一個二進制文件讀取DMI數據。
dmidecode的輸出格式:
其中的前三行都稱為記錄頭(recode header),其中包括了:
1.recode id(Handle):DMI表中的記錄標識符,這是唯一的,比如上例中的Handle 0x0002.
2.DMI type id:記錄的類型,譬如說:BIOS,Memory,上例是type 2,即"Base Board Information".
3.recode size:DMI表中對應記錄的大小,上例為95 bytes。(不包括文本信息,所有實際輸出的內容比這個size要更大)。記錄頭之后就是記錄的值。
4.recoded values:記錄值可以是多行的,比如上例顯示了主板的制造商(Manufacturer)、Product Name、Version以及Serial Number。
查看服務器型號:dmidecode | grep 'Product Name'
查看主板的序列號:dmidecode |grep 'Serial Number'
查看系統序列號:dmidecode -s system-serial-number
查看內存信息:dmidecode -t memory
查看OEM信息:dmidecode -t 11
取出內存信息Size
awk '/Size/{print $(NF-1)}' a.txt|sort -n|uniq -c|awk '{print $1"*"$2}'|xargs -n 100|tr ' ' '+'
10、nethogs
按進程或程序實時統計網絡帶寬使用率
yum install nethogs -y
nethogs -d 5 #設置5秒鍾的刷新頻率
nethogs eth0 #監視設備(eth0)的網絡帶寬
nethogs eth0 eth1 #同時監視eth0和eth1接口
交互命令
m : 修改單位
r : 按流量排序
s : 按發送流量排序
q : 退出命令提示符
文章內容來源於網絡