走入計算機的第七天(關於操作系統的內容)
1 監控系統的一些命令
top:是linux中常用的性能分析工具,用來查看系統中各個資源的占用空間的數據。
第一行是任務信息,從中到右分別是(當前時間),(系統運行時間,以時:分的格式),(當前登錄用戶數),(系統負載,三個數值分別是1分鐘,5分鐘,15分鐘前到現在的平均值。
第二行屬於進程,從左到右分別是(進程總數),(正在運行的進程),(睡眠的進程),(停止的進程數),(僵屍進程)。
第三行是關於CPU的信息,從左到右分別是(用戶空間占用CPU百分比),(內核空間占用CPU百分比),(用戶進程空間內改變過優先級的進程占用CPU的百分比),(空閑CPU的百分比)(,等待輸入輸出的CPU時間百分比),(硬件中斷占用CPU時間的百分比),(軟件中斷占用CPU時間的百分比)。
第四行和第五行屬於內存信息。
free:顯示內存的使用狀態。
(total)(Mem)屬於物理內存。
(used)(Mem)使用的物理內存。
(free)(Mem)可以使用的內存。
他們之間的關系是(total)(Mem)=(used)(Mem)+(free)(Mem)
(shared)(Mem)共享內存,表示有幾個進程共享的內存。
(buffers)(Mem)表示已經分配但還未使用的buffers大小。
(cached)(Mem)表示已經分配但還未使用的cached大小。
buffers和cached功能是:
buffers是用於存放要輸出到disk(塊設備)的數據,而cached是存放從disk上讀出的數據。都是為了提高IO的性能,由OS管理。
操作系統為了提高IO read的性能,總是要多一些cached數據,這就是(cached)(memory)為什麽比較大。
(used)(-buffers/cached):一個應用程序認為系統被用掉多少內存。(used)(-buffers/cached)=(used)(Mem)—(buffers)(Mem)—(cached)(Mem)
(free)(+buffers/cached):一個應用程序認為系統還有多少內存。(free)(+buffers/cached)=(free)(Mem)+(buffers)(Mem)+(cached)(Mem)
free命令的數值都是從?proc/meminfo中讀取的。 $ free -m是數值的單位為MB,不過數值沒有那麽詳細。可以使用命令($ free -wm)可以得到buffers和cached各自使用的數值。
pstree:以樹狀形式顯示程序。進程狀態的使用方法是(pstree PID)。
kill:比一個信號發給一個或多個進程,默認為發送終止信號。終止進程的方法是(kill PID)。殺死進程使用方法是(kill -9 PID)。
pgrep:通過進程和其他屬性查找進程。查找進程方法是(pgrep 要查找的進程名稱)。
pkill:通過進程和其他屬性發信號給進程。殺死進程是(pkill 要殺死的進程名稱)。
fdisk:創建磁盤分區。
d(delete):刪除一個已存在的分區。
l(list):列出也存在分區的類型。
m(menu):列出fdisk中使用的所有命令。
n(new):添加一個新的分區。
p(print):列出分區表的內容。
q(quit):退出fdisk,但是不儲存所操縱的變化。
t(title):改變分區系統的id。
w(write):退出fdisk,並儲存所操縱的變化。
partprobe:重新初始化內存中內核的分區表。
mkfs:格式化內存。使用方法是(mkfs.操作過後的對象名 操作對象)。
e2label:設定或查看一個設備的label名稱。查看某個分區的方法是(e2label 操作的對象)。設定命令的方法是(e2label 操作的對象 wg)。
2 進程的信息
PID:進程id。
PPID:父進程id。
RUESR:Real user name。
UID:進程所有者的用戶id。
USER:進程所有者的信息。
TTY:啟動進程的終端名(不是從終端啟動的進程則會顯示?)。
RR:優先級。
NI:nice值。(負值表示高優先級,正值表示低優先級)。
P:最後使用的CPU(僅在多CPU環境下有意義)。
%CPU:上次更新到現在CPU時間占用的百分比。
TIME:進程使用CPU的時間統計(單位秒)。
%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。
3 CPU的利用率與load average
CPU正常的利用率是<70%的。CPU負載<或=1時,能正常執行。CPU負載>1時,屬於超負荷執行。load average應該<或=CPU核數*0.7。CPU負載和CPU利用率過高都是不好的現象。
為何要有1分鐘,5分鐘,15分鐘三種cpu的負載:是希望我們將他們三個值結合起來看。或者說是展示一個動態圖表示的數據。
進程掛起是自身原因,遇到了I/O的阻塞,便會讓出CPU讓其他進程去執行,保證CPU一直在運行。
與進程無關,在操作層面時,有個進程占用CPU過久時,或者需要調用硬盤裏的文件時,而會調用其它進程使用CPU。
4 硬盤的相關內容
在linux系統中,每個設備都會被當一個文件來對待。而他們對應的文件名如下:
IDE硬盤:/dev/hd(a-d)
SCSI硬盤:/dev/sd(a-p)
U盤:/dev/sd(a-p){與SCSI硬盤一樣)
CDROM:/dev/sr0
硬盤的結構和分區:硬盤為什麽要有分區,更容易管理和控制操作系統,這樣系統效率高,更容易備份,可以限制用戶使用磁盤份額。
硬盤主要分為主分區,擴展分區和邏輯分區。一個硬盤上最大可以劃分4個主分區,在SCSI磁盤最多可以分15個分區,IDE磁盤可以分63個分區。
硬盤的邏輯結構:硬盤結構為磁道,塊,磁柱和分區。
塊是盤片上訪問的最小單位,一個塊可以儲存一個字節的數據。
磁道是有一系列的頭尾相連塊組成的圓圈。
磁柱是有一疊磁道在相同半徑的每個盤面的磁道組成的。
分區是有一組相鄰的磁道組成的。
走入計算機的第七天(關於操作系統的內容)