Linux(六):系統運維常用命令
實際的生產環境下,不論是研發還是運維,或多或少的得面對在linux上定位問題這個關卡,這裡介紹一下linux環境下一些狀態查看常用的命令。
系統資源監控
總體資源佔用情況查看
命令:top
像windows一樣,linux也有一個「進程管理」,可以在命令行執行 top ,就可以整體的查看當前機器的資源及進程情況。
這裡第一行 (top) 顯示的信息包含:
系統時間:19:27:01
運行時間:up 54 min,
當前登錄用戶: 1 user
負載均衡(uptime) load average: 0.02, 0.03, 0.00
average後面的三個數分別是1分鐘、5分鐘、15分鐘的負載情況。
load average數據是每隔5秒鐘檢查一次活躍的進程數,然後按特定算法計算出的數值。如果這個數除以邏輯CPU的數量,結果高於5的時候就表明系統在超負荷運轉了
第二行 (Tasks)顯示的當前的進程整體統計
第三行 (%CPU)是CPU狀態信息,具體為:
0.0%us【user space】— 用戶空間佔用CPU的百分比。
0.1%sy【sysctl】— 內核空間佔用CPU的百分比。
0.0%ni【】— 改變過優先級的進程佔用CPU的百分比
99.9%id【idolt】— 空閑CPU百分比
0.0%wa【wait】— IO等待佔用CPU的百分比
0.0%hi【Hardware IRQ】— 硬中斷佔用CPU的百分比
0.0%si【Software Interrupts】— 軟中斷佔用CPU的百分比
第四行 (KiB Mem)整體內存的狀態,分別為總量,已用,空閑,緩存
第五行 (KiB Swap)交換區內存
最後是各進程的狀況
這裡說一下第四行和第五行,第四行中使用中的內存總量(used)指的是現在系統內核控制的內存數,空閑內存總量(free)是內核還未納入其管控範圍的數量。
對於內存監控,也就是說我們對於內存的監控主要是看第五行swap交換分區的used,如果這個數值在不斷的變化,說明內核在不斷進行內存和swap的數據交換,這是真正的內存不夠用了。
命令:top -p [pid]
除了整體來看,我們也可以鎖定單個進程的資源情況進行查看。
例如: top -p 1864
詳細內容為
PID — 進程id
USER — 進程所有者
PR — 進程優先級
NI — nice值。負值表示高優先級,正值表示低優先級
VIRT — 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES
RES — 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA
SHR — 共享內存大小,單位kb
S —進程狀態。D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/停止 Z=殭屍進程
%CPU — 上次更新到現在的CPU時間佔用百分比
%MEM — 進程使用的物理內存百分比
TIME+ — 進程使用的CPU時間總計,單位1/100秒
COMMAND — 進程名稱(命令名/命令行)
計算機端口關聯進程查看
這裡也是我們最經常用到的,不管是安裝新應用,還是排查應用的進程情況,都需要一個去了解端口是否被佔用,或者根據端口來拿到一個進程的pid。
命令:lsof -i: [端口號]
例如:lsof -i:22
這裡,我們以查看22端口被監聽的進程為例,這一就能得出,22這個端口被哪一進程監聽,從而得到Pid等多個參數。
COMMAND 進程名稱 | PID 進程標識符 | USER 進程所有者 | FD 文件描述符 | TYPE 文件類型 | DEVICE 指定磁盤名稱|SIZE 文件大小 | NODE 索引節點 | NAME 打開文件的確切名稱
有些系統可能並沒有lsof命令,如果系統在互聯網環境下,可以執行 yum install lsof 進行安裝。
命令:netstat -tunlp | grep [端口號]
有些環境下的linux可能並沒有安裝lsof,並不支持lsof命令,我們又無法安裝losf的時候,我們可以使用linux自帶的netstat來定位。
例如: netstat -tunlp | grep 22
這裡,根據netstat提供的信息,可以知道哪些進程在監聽22端口,並且得知進程唯一標識pid 。
關於 netstat命令的其他參數這裡不過多解釋,可以自行某度,同樣,若系統無該命令,可以使用 yum -y install net-tools 進行安裝。
計算機內存狀態查看
命令:free -g
除了前面的top可以查看內存的情況,也可以單獨的查看當前linux內存的狀況,那就是 free -g 命令
例如:free -g
詳細字段解釋為:
total:表示 總計物理內存的大小。
used:表示 已使用多少。
free:表示 可用內存多少。
Shared:表示多個進程共享的內存總額。
Buffers/cached:表示 磁盤緩存的大小。
這裡對於內存的監控同top一樣,我們還是主要關心 swap 這一欄。
命令:cat /proc/meminfo
確切地說,這個不能叫做命令,只是一個打開系統級參數文件的查看,proc目錄下放着系統的一些資源情況的文件。
清空緩存:echo3 >/proc/sys/vm/drop_caches
當在Linux下頻繁存取文件後,物理內存會很快被用光,當程序結束後,內存不會被正常釋放,而是一直作為caching,一直被佔用着,會導致上面的top以及free命令查看的內存計算不夠準確,這時候我們可以通過執行 echo3 >/proc/sys/vm/drop_caches 來進行手動釋放緩存。
關於清除緩存的詳細細節可以看一下 //blog.csdn.net/qq_36357820/article/details/79798788
計算機CPU狀態查看
命令:cat /proc/cpuinfo
和上面的內存一樣,這也是在proc這個目錄下查看當前機器的cpu狀況
例如:cat /proc/cpuinfo
詳細字段解釋:
processor :系統中邏輯處理核的編號。對於單核處理器,則課認為是其CPU編號,對於多核處理器則可以是物理核、或者使用超線程技術虛擬的邏輯核
vendor_id :CPU製造商
cpu family :CPU產品系列代號
model :CPU屬於其系列中的哪一代的代號
model name:CPU屬於的名字及其編號、標稱主頻
stepping :CPU屬於製作更新版本
cpu MHz :CPU的實際使用主頻
cache size :CPU二級緩存大小
physical id :單個CPU的標號
siblings :單個CPU邏輯物理核數
core id :當前物理核在其所處CPU中的編號,這個編號不一定連續
cpu cores :該邏輯核所處CPU的物理核數
apicid :用來區分不同邏輯核的編號,系統中每個邏輯核的此編號必然不同,此編號不一定連續
fpu :是否具有浮點運算單元(Floating Point Unit)
fpu_exception :是否支持浮點計算異常
cpuid level :執行cpuid指令前,eax寄存器中的值,根據不同的值cpuid指令會返回不同的內容
wp :表明當前CPU是否在內核態支持對用戶空間的寫保護(Write Protection)
flags :當前CPU支持的功能
bogomips :在系統內核啟動時粗略測算的CPU速度(Million Instructions Per Second)
clflush size :每次刷新緩存的大小單位
cache_alignment :緩存地址對齊單位
address sizes :可訪問地址空間位數
power management :對能源管理的支持,有以下幾個可選支持功能:ts: temperature sensor
fid: frequency id control
vid: voltage id control
ttp: thermal trip
tm:
stc:
100mhzsteps:
hwpstate:
命令:uptime
如果再細緻一點,查看當前系統的負載情況,可以使用 uptime來進行查看
例如:uptime
這裡,第一項是當前時間,up 表示系統正在運行,5:53 是系統啟動的總時間,最後是系統的負載load信息。
系統負載是處於可運行runnable或不可中斷uninterruptable狀態的進程的平均數。可運行狀態的進程要麼正在使用 CPU 要麼在等待使用 CPU。
不可中斷狀態的進程則正在等待某些 I/O 訪問,例如等待磁盤 IO。
有三個時間間隔的平均值。負載均值的意義根據系統中 CPU 的數量不同而不同,負載為 1 對於一個只有單 CPU 的系統來說意味着負載滿了,而對於一個擁有
4 CPU 的系統來說則意味着 75% 的時間裏都是空閑的。
計算機存儲狀態查看
命令:df -h
可以對整體的Linux進行一下磁盤整體使用情況的查看
例如:df -h
Filesystem:文件系統
Size: 分區大小
Used: 已使用容量
Avail: 還可以使用的容量
Use%: 已用百分比
Mounted on: 掛載點
此外,還有部分額外命令
df -hl:查看磁盤剩餘空間
df -h:查看每個根路徑的分區大小
du -sh [目錄名]:返回該目錄的大小
du -sm [文件夾]:返回該文件夾總M數
du -h [目錄名]:查看指定文件夾下的所有文件大小(包含子文件夾)
殺死進程
命令:kill
殺死一個進程 ,在linux中我們使用kill命令,kill命令的基本格式是 kill [參數] [進程號],這裡要說一下這個參數位置,這個參數可放kill的基本參數,具體這裡就不多說了,可以自行去了解,另外可以放信號,信號的意思是向操作系統發送一個殺死進程的命令,並攜帶額外的信息,例如是強制殺死,還是由你系統稍後殺死。
kill命令可以帶信號號碼選項,也可以不帶。如果沒有信號號碼,kill命令就會發出終止信號(15),這個信號可以被進程捕獲,使得進程在退出之前可以清理並釋放資源。也可以用kill向進程發送特定的信號。
例如我想強制殺死一個進程,立即執行,那信號值為9 即:kill -9 12342