1. 程式人生 > >linux基礎第四條天

linux基礎第四條天

src 任務 lvm 多個 menu tor 其中 part window

系統監控

top命令:顯示系統上正在運行的進程、它是系統管理員最重要的工具之一、被廣泛用於監視服務器的負載

top命令會顯示系統的很多信息。我們需要理解不同部分輸出的意義:默認運行時,top命令會顯示如下輸出:

技術分享

1.1 系統運行時間和平均負載:

技術分享

1.2 任務:

第二行顯示的是任務或者進程的總結。進程可以處於不同的狀態。

技術分享

1.3 CPU 狀態:

這裏顯示了不同模式下的所占CPU時間的百分比。這些不同的CPU時間表示:

技術分享

  1)us, user: 用戶空間占用CPU百分比

  2)sy,system: 內核空間占用CPU百分比

  3)ni,niced:用戶進程空間內改變過優先級的進程占用CPU百分比

  4)id: 空閑CPU百分比

  5)wa:等待輸入輸出的CPU時間百分比

  6)hi:硬件中斷占用CPU時間的百分比

  7)si: 軟件中斷占用CPU時間的百分比

  8)st:這個虛擬機被hypervisor偷去的CPU百分比

1.4 內存信息:

第一行是物理內存使用,第二行是虛擬內存使用(交換空間)。

物理內存顯示如下:全部可用內存、已使用內存、空閑內存、緩沖內存

交換部分顯示的是:全部、已使用、空閑和緩沖交換空間

技術分享

1.5 進程信息:

技術分享

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

命令名/命令行

free命令:顯示內存的使用狀態。

                   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

從操作系統的角度:

  物理內存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大小

  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中讀出的。

4) 掌握free命令的功能:顯示內存的使用狀態。(下面均為centos7中查看效果)

使用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.2Ubuntu 16.04Arch Linux3Linux發行版,均沒有出現used包含cache的情況:

$ free -m
              total        used        free      shared  buff/cache   available
Mem:          64325       47437        3150        1860       13737       14373

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

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

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

$ free -wm
              total        used        free      shared     buffers       cache   available
Mem:          64325       48287        2476        1859        1430       12131       13524

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

2. 系統中進程的監控—ps
1) 掌握進程的定義:進程是程序的一次動態執行。
2) 掌握守護進程的定義:守護進程是在後臺運行並提供系統服務的一些進程。
3) 掌握父進程、子進程的定義:當一個進程創建另一個進程時,第1個進程被稱為新進程的父進程,而新進程被稱為子進程。
4) 掌握ps命令的功能:用來顯示當前進程的狀態。
Ps –aux 顯示所有的與用戶相關的完整信息
系統中進程的監控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
3. 掌握pgrep命令的功能:通過名稱或其他屬性查找進程
例如:查找名為firefox的進程的命令為:pgrep firefox
4. 掌握pkill命令的功能:通過名稱或其他屬性發信號給進程

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

1. 硬件設備與文件名的對應關系(詳見linux系統管理P297)
1) 掌握在Linux系統中,每個設備都被當初一個文件來對待。
2) 掌握各種設備在Linux中的文件名

技術分享

2. 硬盤的結構及硬盤分區(詳見linux系統管理P301)
1) 了解為什麽要進行硬盤分區:
a) 更容易管理和控制系統,因為相關的文件和目錄都放在一個分區中。
b) 系統效率更高。
c) 可以限制用戶使用硬盤的份額(磁盤空間的大小)。
d) 更容易備份和恢復。
2) 掌握硬盤的邏輯結構:
一個硬盤邏輯上可以被劃分成塊、磁道、磁柱和分區。
3) 掌握塊的定義:塊是盤片上尋址(訪問)的最小單位,一個塊可以存儲一定字節的數據。
4) 掌握磁道的定義:磁道是由一系列頭尾相連的塊組成的圓圈。
5) 掌握磁柱的定義:磁柱是由一疊磁道,由在相同半徑上每個盤面的磁道所組成。
6) 掌握分區的定義:分區是由一組相鄰的磁柱所組成。
3. Linux系統中硬盤的分區(詳見linux系統管理P303)
1) 掌握硬盤分區的分類:硬盤的分區可以分為主分區、擴展分區和邏輯分區。
2) 掌握主分區的數量:在一個硬盤上最多可以劃分出4個主分區。
3) 了解Linux操作系統的內核支持每個硬盤上的分區數量還是有一定限制的,Linux內核在每個硬盤上可以最多支持:
a) 在SCSI硬盤上劃分15個分區(Partitions)。
b) 在IDE硬盤上劃分63個分區(Partitions)。
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命令的功能:重新初始化內存中內核的分區表。
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
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

linux基礎第四條天