1. 程式人生 > >Linux基礎學習(四)

Linux基礎學習(四)

ubuntu pad 檢查 rom run 文件和目錄 mis fdisk 內存

十一、 系統監控

11.1 系統監視和進程控制工具

11.1.1 top

1) top命令的功能:top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似於Windows的任務管理器。

2) 使用top命令列出系統狀態時,系統默認每5秒刷新一下屏幕上的顯示結果。

top - 14:44:15 up 6:41, 1 user, load average: 0.02, 0.03, 0.05

Tasks: 330 total, 2 running, 328 sleeping, 0 stopped, 0 zombie

%Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

KiB Mem : 1867636 total, 1284776 free, 86760 used, 496100 buff/cache

KiB Swap: 0 total, 0 free, 0 used. 1622824 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

2859 root 20 0 157816 2412 1552 R 0.7 0.1 0:00.22 top

276 root 20 0 0 0 0 S 0.3 0.0 0:32.77 kworker/0:1

1、第一行是任務隊列信息

14:44:15

當前時間

up 6:41

系統運行時間,格式為時:分

1 user

當前登錄用戶數

load average: 0.02, 0.03, 0.05

系統負載。 三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值。

2、第二、三行為進程和CPU的信息

Tasks: 29 total

進程總數

1 running

正在運行的進程數

328 sleeping

睡眠的進程數

0 stopped

停止的進程數

0 zombie

僵屍進程數

Cpu(s): 0.0% us

用戶空間占用CPU百分比

0.3% sy

內核空間占用CPU百分比

0.0% ni

用戶進程空間內改變過優先級的進程占用CPU百分比

99.7% id

空閑CPU百分比

0.0% wa

等待輸入輸出的CPU時間百分比

0.0% hi

硬件中斷占用CPU時間的百分比

0.0% si

軟件中斷占用CPU時間的百分比

3、第四五行為內存信息。

KiB Mem : 1867636 total, 1284776 free, 86760 used, 496100 buff/cache

KiB Swap: 0 total, 0 free, 0 used. 1622824 avail Mem

4、進程信息

列名

含義

PID

進程id

PPID

父進程id

RUSER

Real user name

UID

進程所有者的用戶id

USER

進程所有者的用戶名

GROUP

進程所有者的組名

TTY

啟動進程的終端名。不是從終端啟動的進程則顯示為 ?

PR

優先級

NI

nice值。負值表示高優先級,正值表示低優先級

P

最後使用的CPU,僅在多CPU環境下有意義

%CPU

上次更新到現在的CPU時間占用百分比

TIME

進程使用的CPU時間總計,單位秒

TIME+

進程使用的CPU時間總計,單位1/100秒

%MEM

進程使用的物理內存百分比

VIRT

進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES

SWAP

進程使用的虛擬內存中,被換出的大小,單位kb。

RES

進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA

CODE

可執行代碼占用的物理內存大小,單位kb

DATA

可執行代碼以外的部分(數據段+棧)占用的物理內存大小,單位kb

SHR

共享內存大小,單位kb

nFLT

頁面錯誤次數

nDRT

最後一次寫入到現在,被修改過的頁面數。

S

進程狀態。

D=不可中斷的睡眠狀態

R=運行

S=睡眠

T=跟蹤/停止

Z=僵屍進程

COMMAND

命令名/命令行

WCHAN

若該進程在睡眠,則顯示睡眠中的系統函數名

Flags

任務標誌,參考 sched.h

5、cpu利用率與load average(系統負載)

cpu是用來幹活的,按照這個層面去理解,每個碼農都是一個cpu

1)、cpu利用率:

上一天班的時間是8個小時,而碼農敲代碼的時間為2個小時,2/8=0.25 ,25%就是碼農在一天的時間內的利用率(正常情況,cpu利用率<70%)

2)、cpu負載:

公司在一分鐘內為某個碼農安排了3個任務,而1分鐘內該碼農能做6個任務,那麽該碼農一分鐘內的負載為0.5

   如果公司在5分鐘內為某個碼農安排了100個任務,而5分鐘內該碼農只能做50個任務,那麽該碼農5分鐘內的負載為2.0,即超負荷運轉

     cpu負載<=1:能正常應付

cpu負載>1:超負荷運轉

     如果有4核,相當於將100個任務交給4個碼農去幹,如果每個碼農的負載都是100%,那麽整體的cpu負載達到4.0則是很正常的現象

      

多核cpu, load average 應該 <= cpu核數 * 0.7

3)、為何要有1分鐘,5分鐘,15分鐘三種cpu負載?

  其實之所以要給出3個值,就是希望我們能結合起來看。或者說希望展示一個動態的圖表式的數據,比如最近一分鐘顯示負載120%。而最近5分鐘和15分鐘顯示負載為50%。可能你不用太過擔心。但是如果你發現系統的負載一直維持在120%以上,就必須要提高硬件配置了。

cpu利用率和cpu負載過高,都是不好的現象,但是也有可能出現,低利用率,高負載的情況:

  為一個碼農分配了100個項目,毫無疑問,該碼農的負載是很高的,但是碼農在具體去做一個項目時,可能會碰到需要購買機器,或者查詢資料等耗費時間的問題,真正動手寫代碼的時間可能很短,而這段時間才是碼農真正為公司幹活的時間,如果每個項目都有類似這種問題,那麽100個項目加到一起,碼農真正工作的時間也不會太多,這就造成了低利用率。

4)、在兩種情況下會導致一個進程在邏輯上不能運行:

  1. 進程掛起是自身原因,遇到I/O阻塞,便要讓出CPU讓其他進程去執行,這樣保證CPU一直在工作

  2. 與進程無關,是操作系統層面,可能會因為一個進程占用時間過多,或者優先級等原因,而調用其他的進程去使用CPU。

  因而一個進程有三種狀態

技術分享

11.1.2 free

命令的功能:顯示內存的使用狀態。(下圖centos6中查看效果,用二維數組代表FO即free output)

1 2 3 4 5 6

1 total used free shared buffers cached

2 Mem: 24677460 23276064 1401396 0 870540 12084008

3 -/+ buffers/cache: 10321516 14355944

4 Swap: 25151484 224188 24927296

1、從操作系統的角度:

  物理內存FO[2][1]=24677460KB

  物理內存被使用的內存FO[2][2]=23276064KB

  可以用內存F[2][3]=1401396KB

  等式:FO[2][1] = FO[2][2] + FO[2][3]

  共享內存F[2][4]=0,表示幾個進程共享的內存(數據共享)

  F[2][5]=870540表示已經分配但是還未使用的buffers大小

F[2][6]=12084008表示已經分配但是還未使用的buffers大小

2、buffer和cache的解釋:

A buffer is something that has yet to be "written" to disk.

A cache is something that has been "read" from the disk and stored for later use.

  也就是說buffer是用於存放要輸出到disk(塊設備)的數據的,而cache是存放從disk上讀出的數據。這二者是為了提高IO性能的,並由OS管理。

  Linux和其他成熟的操作系統(例如windows),為了提高IO read的性能,總是要多cache一些數據,這也就是為什麽FO[2][6](cached memory)比較大,而FO[2][3]比較小的原因。做一個簡單的測試:

1)釋放掉被系統cache占用的數據;

echo 3>/proc/sys/vm/drop_caches

2)讀一個大文件,並記錄時間;

3)關閉該文件;

4)重讀這個大文件,並記錄時間;

  第二次讀應該比第一次快很多。

  free輸出的第二行是從一個應用程序的角度看系統內存的使用情況。

  • 對於FO[3][2],即-buffers/cache,表示一個應用程序認為系統被用掉多少內存;
  • 對於FO[3][3],即+buffers/cache,表示一個應用程序認為系統還有多少內存;

  因為被系統cache和buffer占用的內存可以被快速回收,所以通常FO[3][3]比FO[2][3]會大很多。

  這裏還用兩個等式:

  • FO[3][2] = FO[2][2] - FO[2][5] - FO[2][6]
  • FO[3][3] = FO[2][3] + FO[2][5] + FO[2][6]

  free命令的所有輸出值都是從/proc/meminfo中讀出的

3、free命令的功能:

顯示內存的使用狀態。(下面均為centos7中查看效果)

http://www.linuxatemyram.com/提到使用free命令查看Linux系統使用內存時,used一項會把當前cache的大小也會加進去,這樣會造成free這一欄顯示的內存特別少:

$ free -m

total used free shared buff/cache available

Mem: 1504 1491 13 0 855 869

Swap: 2047 6 2041

可是實際上,cache根據應用程序的需要是可以回收利用的,因此free這一欄並不能真實地表現有多少“可以使用”的內存。實際系統可用內存應該以available數據為準。

linuxatemyram所提到的free命令也許是比較老的版本,RHEL 7.2,Ubuntu 16.04和Arch Linux這3個Linux發行版,均沒有出現used包含cache的情況:

$ free -m

total used free shared buff/cache available

Mem: 64325 47437 3150 1860 13737 14373

另外,從man free命令中也可以得到,目前計算used的值是要減掉free和buff/cache的:

used Used memory (calculated as total – free – buffers – cache)

可以使用-w命令行選項得到buff和cache各自使用的數量:

$ free -wm

total used free shared buffers cache available

Mem: 64325 48287 2476 1859 1430 12131 13524

需要註意的是,free表示的是當前完全沒有被程序使用的內存;而cache在有需要時,是可以被釋放出來以供其它進程使用的(當然,並不是所有cache都可以釋放,比如當前被用作ramfs的內存)。而available才真正表明系統目前可以提供給應用程序使用的內存。/proc/meminfo從3.14內核版本開始提供MemAvailable的值;在2.6.27~3.14版本之間,是free程序自己計算available的值;早於2.6.27版本,available的值則同free一樣。

11.1.3 ps

(詳見linux系統管理P363)

1) 進程的定義:進程是程序的一次動態執行。

2) 守護進程的定義:守護進程是在後臺運行並提供系統服務的一些進程。

3) 父進程、子進程的定義:當一個進程創建另一個進程時,第1個進程被稱為新進程的父進程,而新進程被稱為子進程。

4) ps命令的功能:用來顯示當前進程的狀態。

ps –aux 顯示所有的與用戶相關的完整信息

11.1.4 pstree、kill

centos7默認沒有pstree,需要yum -y install psmisc

1) pstree命令的功能:以樹狀圖顯示程序。

2) pstree命令的用法舉例:

例如:列出PID為4729的進程的進程狀態樹的命令:

pstree 4729

3) kill命令的功能:把一個信號發送給一個或多個進程。默認發送終止信號。

4) 應用kill命令終止進程

例如:終止PID為3852的進程的命令:

kill 3852

5) 應用kill -9命令殺死進程

例如:殺死PID為3906的進程的命令:

kill -9 3906

11.1.5 pgrep

1. pgrep命令的功能:通過名稱或其他屬性查找進程

例如:查找名為firefox的進程的命令為:

pgrep firefox

11.1.6 pkill

pkill命令的功能:通過名稱或其他屬性發信號給進程

例如:殺死名為firefox的進程的命令為:

pkill firefox

十二、硬盤分區、格式化及文件系統的管理

12.1 硬件設備與文件名的對應關系

(詳見linux系統管理P297)

1) 在Linux系統中,每個設備都被當初一個文件來對待。

2) 各種設備在Linux中的文件名

技術分享

12.2 硬盤的結構及硬盤分區

(詳見linux系統管理P301)

1) 為什麽要進行硬盤分區:

a) 更容易管理和控制系統,因為相關的文件和目錄都放在一個分區中。

b) 系統效率更高。

c) 可以限制用戶使用硬盤的份額(磁盤空間的大小)。

d) 更容易備份和恢復。

2) 硬盤的邏輯結構:一個硬盤邏輯上可以被劃分成塊、磁道、磁柱和分區。

3) 塊的定義:塊是盤片上尋址(訪問)的最小單位,一個塊可以存儲一定字節的數據。

4) 磁道的定義:磁道是由一系列頭尾相連的塊組成的圓圈。

5) 磁柱的定義:磁柱是由一疊磁道,由在相同半徑上每個盤面的磁道所組成。

6) 分區的定義:分區是由一組相鄰的磁柱所組成。

12.3 Linux系統中硬盤的分區

(詳見linux系統管理P303)

1) 硬盤分區的分類:硬盤的分區可以分為主分區、擴展分區和邏輯分區。

2) 主分區的數量:在一個硬盤上最多可以劃分出4個主分區。

3) Linux操作系統的內核支持每個硬盤上的分區數量還是有一定限制的,Linux內核在每個硬盤上可以最多支持:

a) 在SCSI硬盤上劃分15個分區(Partitions)。

b) 在IDE硬盤上劃分63個分區(Partitions)。

12.4 使用fdisk和partprobe命令來管理硬盤分區

(詳見linux系統管理P394)

1) fdisk命令的功能:創建磁盤分區。

2) fdisk命令列表中常用的命令:

a) d:刪除一個(已經存在的)分區,其中d是delete的第1個字母。

b) l:列出(已經存在的)分區的類型,其中l是list的第1個字母。

c) m:列出fdisk中使用的所有命令,其中m是menu的第1個字母。

d) n:添加一個新的分區,其中n是new的第1個字母。

e) p:列出分區表的內容,其中p是print的第1個字母。

f) q:退出fdisk,但是不存儲所做的變化,其中q是quit的第1個字母。

g) t:改變分區系統的id,其中t是title的第1個字母。

h) w:退出fdisk並存儲所做的變化,其中w是write的第1個字母。

3) partprobe命令的功能:重新初始化內存中內核的分區表。

12.5 創建文件系統(數據的管理)

(詳見linux系統管理P399)

1) 格式化的定義:所謂的格式化就是將分區中的硬盤空間劃分成大小相等的一些數據塊(Blocks),以及設定這個分區中有多少個i節點可以使用等。

2) 文件系統的定義:文件系統是操作系統用於明確磁盤或分區上的文件的方法和數據結構;即在磁盤上組織文件的方法。

3) 常用的文件系統類型

ext2:Linux系統中標準的文件系統

ext3:一種日誌式文件系統

ext4:一種針對ext3系統的擴展日誌式文件系統

lvm:邏輯盤卷管理

iso9660:目前唯一通用的光盤文件系統

4) mkfs命令的功能:格式化磁盤。

5) 常用的格式化命令:

mkfs.文件系統類型

例如,將分區/dev/sdb1格式化為ext4文件系統的命令為:

mkfs.ext4 /dev/sdb1

12.6 為一個分區設定label(分區名)

(詳見linux系統管理P405)

1) e2label命令的功能:設定或查看一個設備的label名稱。

2) 用e2label命令設定label:

a) 例如:查看/dev/sdb1分區的label的命令為:

e2label /dev/sdb1

b) 例如:將/dev/sdb1分區的label設定為wg的命令:

e2label /dev/sdb1 wg

12.7 文件系統的掛載與卸載

(詳見linux系統管理P406)

1) 掛載的定義:掛載指將一個設備(通常是存儲設備)掛接到一個已存在的目錄上。

2) mount命令的功能:實現文件系統的掛載。

3) 用mount命令實現文件系統的掛載:

例如:將/dev/sdb1分區掛載到/wg目錄上的命令:

mount /dev/sdb1 /wg

4) umount命令的功能:實現文件系統的卸載。

5) 用umount命令實現文件系統的卸載:

例如:卸載/wg上的文件系統的命令:

umount /wg

umount -l /wg #-l參數,強制卸載

12.8 虛擬內存的概念以及設置與管理

(詳見linux系統管理P414)

1) 虛擬內存的定義:所謂虛擬內存就是一塊硬盤空間被當做內存使用,也被稱為交換分區(swap)。

2) Linux交換分區的類型為:0x82

3) mkswap命令的功能:設置交換分區。

4) 使用mkswap命令設置交換分區的用法舉例:

例如:將分區/dev/sdb2設置為交換分區的命令:

mkswap /dev/sdb2

5) swapon命令的功能:啟動交換分區。

6) swapon –a命令的功能:啟動全部的交換分區。

7) swapon –s命令的功能:列出當前正在使用的所有系統交換分區的狀態。

8) 使用swapon命令的用法舉例:

例如:啟用交換分區/dev/sdb2的命令:

swapon /dev/sdb2

12.9 inode節點

(詳見linux系統管理P170)

inode節點的定義:i節點實際上是一個數據結構,它存放了有關一個普通文件、目錄或其他文件系統對象的基本信息。

12.10 符號(軟)鏈接

(詳見linux系統管理P174)

1) 符號鏈接的定義:符號鏈接是指向另一個文件的一個文件。

2) ln命令創建軟連接的用法舉例:

a) 為wolf/dog.wolf.baby文件建立一個dog_ wolf.boy符號鏈接並放在bodydog目錄中的命令:

ln –s wolf/dog.wolf.baby bodydog/dog_ wolf.boy

12.11 硬鏈接

(詳見linux系統管理P179)

1) 硬鏈接的定義:一個硬鏈接(hard link)是一個文件名與一個i節點之間的對應關系,也可以認為一個硬鏈接是在所對應的文件上添加了一個額外的路徑名。

2) ln命令創建硬連接的用法舉例:

a) 為wolf/wolf.dog文件在backup目錄中建立一個名為wolf.dog2的硬鏈接命令:

ln wolf/wolf.dog backup/wolf.dog2

12.12 Linux系統中的文件類型

(詳見linux系統管理P183)

1) Linux系統中常見的文件類型:

-:普通文件(regular file),也有人稱為正規文件。

d:目錄(directory)。

l:符號(軟)鏈接。

b:塊特殊文件(b是block的第1個字符),一般指塊設備,如硬盤。

c:字符特殊文件(c是character的第1個字符),一般指字符設備,如鍵盤。

12.13 檢查磁盤空間

(詳見linux系統管理P185)

1) df命令的功能:顯示文件系統中磁盤使用和空閑區的數量。

-a 顯示所有磁盤

-h 單位轉換

2) du命令的功能: 顯示目錄和文件的大小a h同上

Linux基礎學習(四)