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