- 論壇徽章:
- 1
|
UNIX進(jìn)程管理
8.1 進(jìn)程的基本概念
8.1.1進(jìn)程
進(jìn)程是正在執(zhí)行的一個(gè)程序的實(shí)例,通常是由程序,數(shù)據(jù)集合和進(jìn)程控制塊(Process Control Block 簡(jiǎn)稱PCB)三個(gè)部分組成。
程序部分 描述了進(jìn)程所要完成的功能。
數(shù)據(jù)集合 包括兩個(gè)方面的內(nèi)容,即程序運(yùn)行時(shí)所需要的數(shù)據(jù)部分和工作區(qū)。
進(jìn)程控制塊 含有進(jìn)程的描述信息和控制信息,是進(jìn)程動(dòng)態(tài)特性的集中反映,它是系統(tǒng)對(duì)進(jìn)程施行識(shí)別和控制的依據(jù)。
8.1.2 進(jìn)程和程序的區(qū)別
1、 程序是靜態(tài)概念,本身可以作為一種軟件資源長(zhǎng)期保存;而進(jìn)程是程序的執(zhí)行過(guò)程,它是動(dòng)態(tài)概念,有一定的生命期,是動(dòng)態(tài)地產(chǎn)生和消亡的。
2、 進(jìn)程是一個(gè)能獨(dú)立運(yùn)行的單位,能與其他進(jìn)程并發(fā)執(zhí)行,進(jìn)程是作為資源申請(qǐng)調(diào)度單位存在的,而通常的程序段是不能作為一個(gè)獨(dú)立運(yùn)行的單位的。
3、 程序和進(jìn)程無(wú)一一對(duì)應(yīng)關(guān)系。一個(gè)程序可以由多個(gè)進(jìn)程共用;另一方面,一個(gè)進(jìn)程在活動(dòng)中有可順序地執(zhí)行若干個(gè)程序。進(jìn)程不能脫離具體程序而虛設(shè),程序規(guī)定了相應(yīng)進(jìn)程所要完成的動(dòng)作。
8.1.3 父進(jìn)程與子進(jìn)程
1、 子進(jìn)程是由另外一個(gè)進(jìn)程所產(chǎn)生的進(jìn)程,產(chǎn)生這個(gè)子進(jìn)程的進(jìn)程稱為父進(jìn)程。
2、 子進(jìn)程繼承某些父進(jìn)程的環(huán)境,但子進(jìn)程作為幾個(gè)獨(dú)立的進(jìn)程也有它自己的環(huán)境。
3、 在UNIX系統(tǒng)中,使用系統(tǒng)調(diào)用fork創(chuàng)建進(jìn)程。fork復(fù)制的內(nèi)容包括父進(jìn)程的數(shù)據(jù)和堆棧段以及父進(jìn)程的進(jìn)程環(huán)境。
4、 子進(jìn)程共享父進(jìn)程的文本段即代碼段。父進(jìn)程和子進(jìn)程以并行的方式執(zhí)行同一程序的不同分支。
8.1.4 進(jìn)程的狀態(tài)
S 進(jìn)程由于等待某個(gè)事件而被封鎖,又叫作“等待”。
R 這種狀態(tài)的進(jìn)程當(dāng)前還沒(méi)有運(yùn)行,但只要核心調(diào)度到它,馬上就可以投入運(yùn)行,
又叫作“就緒”。
Z 僵尸狀態(tài)。這樣的進(jìn)程已經(jīng)完成了它的使命,不再存在,它給它的父進(jìn)程留下一
個(gè)記錄,包括了一個(gè)退出碼和一些時(shí)間統(tǒng)計(jì)信息。
T 由于父進(jìn)程的跟蹤,通過(guò)信號(hào)停止的進(jìn)程。
I 這樣的進(jìn)程雖然存在,但它既沒(méi)有被封鎖,也不可運(yùn)行,這種狀態(tài)是除進(jìn)程0以外
所有進(jìn)程的起始狀態(tài)。
X 進(jìn)程由于等待內(nèi)存資源而被封鎖。
O 進(jìn)程正在運(yùn)行,它或者在核心模式中運(yùn)行,或者在用戶模式中運(yùn)行。
進(jìn)程的三種基本狀態(tài)
運(yùn)行態(tài) 是指當(dāng)前進(jìn)程已分配到CPU,它的程序正在處理機(jī)上執(zhí)行時(shí)的狀態(tài)。處于這
種狀態(tài)的進(jìn)程個(gè)數(shù)不能大于CPU的數(shù)目。
就緒態(tài) 是指進(jìn)程已具備運(yùn)行條件,但因?yàn)槠渌M(jìn)程正在占用CPU,所以暫時(shí)不能運(yùn)行
而等待分配CPU的狀態(tài)。一旦把CPU分配給它,它立即就可運(yùn)行。
封鎖態(tài) 是指進(jìn)程因?yàn)榈却撤N事件的發(fā)生而暫時(shí)不能運(yùn)行的狀態(tài)。即處于封鎖態(tài)的
進(jìn)程尚不具備運(yùn)行條件,即使CPU空閑,它也無(wú)法使用。這種狀態(tài)有時(shí)也稱
為不可運(yùn)行狀態(tài)或掛起狀態(tài)。
8.1.5 進(jìn)程調(diào)度
在unix系統(tǒng)中,由進(jìn)程調(diào)度程序?qū)M(jìn)程運(yùn)行進(jìn)行合理安排,有分時(shí)和實(shí)時(shí)兩種調(diào)度策略。
1、進(jìn)程調(diào)度程序完成挑選進(jìn)程,分配CPU的工作。
2、缺省情況下,UNIX操作系統(tǒng)使用分時(shí)調(diào)度策略,在運(yùn)行中動(dòng)態(tài)地調(diào)整進(jìn)程的優(yōu)先級(jí),
以提供最佳響應(yīng)時(shí)間。
3、UNIX系統(tǒng)同時(shí)提供一種實(shí)時(shí)調(diào)度策略,允許用戶為每個(gè)進(jìn)程指定一個(gè)固定的優(yōu)先級(jí),優(yōu)
先級(jí)最高的實(shí)時(shí)用戶將一直占據(jù)CPU,只要他不主動(dòng)放棄CPU,即使是系統(tǒng)核心進(jìn)程也不
能投入運(yùn)行。
4、UnixWare 7系統(tǒng)不是以實(shí)際的進(jìn)程為基礎(chǔ)進(jìn)行調(diào)度的,而是以輕負(fù)荷進(jìn)程(LWPs)
為基礎(chǔ)實(shí)現(xiàn)進(jìn)程調(diào)度的。
8.1.6 UNIX進(jìn)程種類
UNIX系統(tǒng)中將進(jìn)程分為兩大類:系統(tǒng)進(jìn)程SYS和用戶進(jìn)程
8.1.6.1 系統(tǒng)進(jìn)程SYS
系統(tǒng)進(jìn)程與終端無(wú)關(guān),不由用戶啟動(dòng),通常也叫做守護(hù)進(jìn)程,是核心專用的特殊程序。
下面說(shuō)明0、1號(hào)系統(tǒng)進(jìn)程意義:
進(jìn)程0:sysproc進(jìn)程。管理?yè)Q入與換出的進(jìn)程,對(duì)系統(tǒng)中運(yùn)行的進(jìn)程進(jìn)行合理地調(diào)度。
將進(jìn)程從硬盤交換區(qū)調(diào)入內(nèi)存的過(guò)程稱為換入;將進(jìn)程從內(nèi)存調(diào)到硬盤交換
區(qū)的過(guò)程稱為換出。該進(jìn)程是unix核心創(chuàng)建的第一個(gè)進(jìn)程,有多個(gè)LWPs。
進(jìn)程1:init進(jìn)程。系統(tǒng)初始化進(jìn)程,是所有用戶進(jìn)程和非sysproc進(jìn)程的祖先。
8.1.6.2 用戶進(jìn)程
用戶進(jìn)程與特定的用戶標(biāo)識(shí)和終端相關(guān)聯(lián)。通過(guò)在ps命令行指定用戶名或終端ID很容易將用戶進(jìn)程和系統(tǒng)進(jìn)程區(qū)分開(kāi)。要列出除root用戶進(jìn)程之外的其它所有用戶進(jìn)程,執(zhí)行如下命令:
ps -ef|grep –v “^ root”
8.1.6.3 輕負(fù)荷進(jìn)程(LWP)
輕負(fù)荷進(jìn)程(Light Weight Process)也叫做附屬進(jìn)程?梢允窍到y(tǒng)進(jìn)程,也可以是用戶進(jìn)程。
一個(gè)進(jìn)程可以有多個(gè)LWP,LWP具有以下一些與眾不同的特點(diǎn):
1、 共享同樣的進(jìn)程ID;
2、 共享包括地址空間在內(nèi)的同一資源;
3、 通過(guò)系統(tǒng)調(diào)用和塊I/O來(lái)使用資源;
4、 獨(dú)立調(diào)度。
能夠在多處理器系統(tǒng)上進(jìn)行并行調(diào)度是LWPs的主要優(yōu)點(diǎn)。可以用下列方法之一來(lái)查看某進(jìn)程(假定進(jìn)程PID為0)的LWPs:
1、# ps –eL –p0
2、進(jìn)入到/proc文件系統(tǒng)中你要檢查的進(jìn)程的PID目錄,再進(jìn)入到該目錄下的lwp子目錄,
在lwp目錄中包含LWP IDs。
8.1.6.4 死進(jìn)程
死進(jìn)程是已經(jīng)終止,但沒(méi)有從進(jìn)程表中清除的進(jìn)程。可能由下列情況之一產(chǎn)生:
1、 父進(jìn)程在子進(jìn)程終止之前先終止;
2、 父進(jìn)程沒(méi)有等待子進(jìn)程終止。
如果系統(tǒng)存在大量死進(jìn)程,就會(huì)過(guò)多占用進(jìn)程表空間,影響新進(jìn)程的產(chǎn)生。這時(shí),我們需要重新啟動(dòng)系統(tǒng)以清除死進(jìn)程。
8.1.7 進(jìn)程表
進(jìn)程表記錄進(jìn)程各種信息,進(jìn)程表的長(zhǎng)度指定允許創(chuàng)建進(jìn)程的數(shù)量。
進(jìn)程表是核心對(duì)進(jìn)程進(jìn)行維護(hù)的一張表,其大小由核心參數(shù)NRPOC決定的。
進(jìn)程表的基本單元是表項(xiàng)。進(jìn)程表項(xiàng)記錄著進(jìn)程的各種信息,包括:
-進(jìn)程的ID號(hào)(PID)
-父進(jìn)程的ID號(hào)(PPID)
-用戶的ID號(hào)(UID)
-進(jìn)程的優(yōu)先級(jí)
-進(jìn)程的狀態(tài)
-進(jìn)程的長(zhǎng)度
8.1.8 前臺(tái)進(jìn)程和后臺(tái)進(jìn)程
前臺(tái)進(jìn)程: 在Shell提示處打入命令后,創(chuàng)建一個(gè)子進(jìn)程,運(yùn)行命令,Shell等待命
令退出,然后返回到對(duì)用戶給出提示符。這條命令與Shell異步運(yùn)行,即
在前臺(tái)運(yùn)行,用戶在它完成之前不能執(zhí)行另一個(gè)命令。
后臺(tái)進(jìn)程: 在Shell提示處打入命令,若后隨一個(gè)&,Shell創(chuàng)建的子進(jìn)程運(yùn)行此命令,
但不等待命令退出,而直接返回到對(duì)用戶給出提示。這條命令與Shell同
步運(yùn)行,即在后臺(tái)運(yùn)行。后臺(tái)進(jìn)程必須是非交互式的。
8.2 查看當(dāng)前進(jìn)程
ps命令
PS命令可以檢查系統(tǒng)中正在運(yùn)行的進(jìn)程的狀態(tài),可以把系統(tǒng)中全部的活動(dòng)進(jìn)程列出來(lái),這些進(jìn)程既包括在后臺(tái)運(yùn)行的,也包括在前臺(tái)運(yùn)行的。
ps的命令行結(jié)構(gòu):
ps [-edalf][-n name][-t ttys][-p pids]
[-u users][-g groups]
當(dāng)ps命令行沒(méi)有選項(xiàng)時(shí),只顯示與控制終端相關(guān)進(jìn)程的基本信息。
ps(C)命令一些常用選項(xiàng)定義如下:
-f:產(chǎn)生某個(gè)進(jìn)程的一個(gè)完整清單;
-u:產(chǎn)生屬于某個(gè)特定用戶進(jìn)程的一個(gè)清單;
-t:產(chǎn)生與特定終端聯(lián)系的進(jìn)程的一個(gè)清單;
-e:顯示進(jìn)程的完整清單
8.3 進(jìn)程運(yùn)行優(yōu)先級(jí)
8.3.1 進(jìn)程優(yōu)先級(jí)
每個(gè)進(jìn)程都有一個(gè)相應(yīng)的優(yōu)先級(jí)用以決定CPU對(duì)它的調(diào)度。進(jìn)程優(yōu)先級(jí)從0到127,0為最低優(yōu)先級(jí)。在UnixWare 7系統(tǒng)中,優(yōu)先級(jí)在75至99之間的進(jìn)程不能用kill命令終止。
8.3.2 nice命令
修改進(jìn)程運(yùn)行的優(yōu)先級(jí),是通過(guò)增加或減少進(jìn)程的nice值來(lái)實(shí)現(xiàn)的。但這不會(huì)真正改變進(jìn)程相關(guān)的優(yōu)先級(jí),nice值影響計(jì)算進(jìn)程優(yōu)先級(jí)的算法。
nice 命令行的結(jié)構(gòu)
nice [increment] [command] [arguments]
increment 增量值,它的取值范圍是1—19。如果命令行沒(méi)有
給出這個(gè)值,則使用默認(rèn)值10 。
command 要執(zhí)行的命令。
arguments 它是command所帶的參量。
關(guān)于nice命令的幾點(diǎn)說(shuō)明
1、 每個(gè)進(jìn)程都有自己的nice值,使用nice值來(lái)計(jì)算這個(gè)進(jìn)程的優(yōu)先級(jí)。nice 值的取值范圍從0到39,默認(rèn)情況下,nice值是20 。
2、 進(jìn)程的nice值不等于進(jìn)程的優(yōu)先級(jí),但是,它與優(yōu)先級(jí)有著對(duì)應(yīng)關(guān)系,即nice值小的進(jìn)程優(yōu)先級(jí)高;nice值大的進(jìn)程的優(yōu)先級(jí)低。經(jīng)過(guò)nice命令操作后,如果默認(rèn)的nice值加上increment后,超過(guò)39,一律作為39對(duì)待;同樣,如果計(jì)算結(jié)果小于0,一律作為0對(duì)待。
8.3.3 renice命令
renice命令用來(lái)改變正在運(yùn)行的進(jìn)程的nice值。使用-p參數(shù)允許你通過(guò)進(jìn)程ID號(hào)指定進(jìn)程;你可以使用-u參數(shù)后跟用戶名或用戶ID來(lái)改變屬于指定用戶的所有進(jìn)程的nice值。
例如,要增加yw1用戶的所有進(jìn)程的nice值,執(zhí)行如下操作:
renice 15 –u yw1
8.4 終止進(jìn)程
kill命令
使用命令kill(C)來(lái)終止進(jìn)程。
命令行結(jié)構(gòu):
kill [-signal] PID
signal是信號(hào),PID是進(jìn)程號(hào)。
kill 命令向指定的進(jìn)程發(fā)出一個(gè)信號(hào)signal。在默認(rèn)的情況下,kill 命令向指定進(jìn)程發(fā)出信號(hào)15。正常情況下,將殺死那些不捕捉或不忽略這個(gè)信號(hào)的進(jìn)程。
關(guān)于kill命令的兩個(gè)說(shuō)明
1、 高優(yōu)先級(jí)進(jìn)程除非重新啟動(dòng)系統(tǒng),否則不能被終止。
2、 kill –1 PID
一些程序使用它作為重讀它們的配置文件的信號(hào)。
3、 kill –2 PID
功能同按“Delete”鍵,用來(lái)終止一個(gè)進(jìn)程。
4、 kill –3 PID
功能同按“<Ctrl>;+\”鍵,比“kill -2”功能強(qiáng)大。通常產(chǎn)生一個(gè)包含程序內(nèi)存轉(zhuǎn)儲(chǔ)信息的core文件。
5、 kill –9 PID
在某些特殊的情況下,比如使用kill的普通形式無(wú)法殺死的進(jìn)程,要使用該命令。信號(hào)9是不能被捕捉也不能被忽略的。因此,它可以強(qiáng)行終止進(jìn)程的運(yùn)行。
8.5 nohup 命令-忽略掛起或退出
命令行結(jié)構(gòu):
nohup command [arguments]&
command 指定要執(zhí)行的命令;
arguments是命令的參量;
&指定在后臺(tái)運(yùn)行。
1、 command所代表的命令在執(zhí)行過(guò)程中,不會(huì)受到任何結(jié)束運(yùn)行的信號(hào)(hangup或者quit)的影響。
2、 如果用戶沒(méi)有對(duì)輸出重新定向,則標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出都被送到文件nohup.out中。
3、 如果用戶在當(dāng)前目錄中不具備寫權(quán)限,那么輸出就定向到文件$HOME/nohup.out中。
8.6 關(guān)于sar命令:
sar命令從多個(gè)方面全面地報(bào)告系統(tǒng)的活動(dòng)情況,包括文件的讀寫情況、系統(tǒng)調(diào)用的使用、串口、CPU效率、內(nèi)存使用狀況、進(jìn)出活動(dòng)以及IPC有關(guān)活動(dòng)等等,可以幫助人們了解系統(tǒng)資源的使用情況,重點(diǎn)監(jiān)視內(nèi)存和CPU的使用。
sar命令行的結(jié)構(gòu):
sar [-P processor_id[, . . . ] | ALL] [-ubdycwaqvtmpgrkAR] [-o file] t [n]
sar [-P processor_id[, . . . ] | ALL] [-ubdycwaqvtmpgrkAR] [-s time][-e time] [-i sec] [-f file]
sar命令行的說(shuō)明:
第一個(gè)命令行中,n 和t 組合定義采樣間隔,t 為采樣間隔,n為采樣次數(shù)。t 應(yīng)該大于5,n 的默認(rèn)值為1。-o file表示將命令執(zhí)行結(jié)果以二進(jìn)制格式存放在file(文件名)中。
第二個(gè)命令行中,-s time和-e time分別表示報(bào)告的起始時(shí)間和結(jié)束時(shí)間。-i sec表示在sec(一個(gè)具體數(shù)字)秒的間隔選擇記錄,否則,在數(shù)據(jù)文件中所有間隔都要報(bào)告。當(dāng)命令行中沒(méi)有指定采樣間隔時(shí),將從-f選項(xiàng)指定的記錄文件中抽取數(shù)據(jù);如果在這種情況下,也沒(méi)有-f選項(xiàng),則從某天的/usr/adm/sa/sadd(dd為日期號(hào))文件中抽取數(shù)據(jù)。這個(gè)文件是標(biāo)準(zhǔn)系統(tǒng)活動(dòng)日?qǐng)?bào)數(shù)據(jù)文件。因此,sar命令既可以以實(shí)時(shí)的方式采樣當(dāng)前系統(tǒng)活動(dòng),也可以查看已經(jīng)過(guò)去的某段時(shí)間內(nèi)系統(tǒng)中所發(fā)生的活動(dòng)。
可以通過(guò) sar 命令查看系統(tǒng)CPU的使用情況。在任一時(shí)刻,CPU的狀態(tài)或者閑或者忙。在CPU空閑時(shí),有可能是在等待輸入、輸出,在輸入、輸出完成后,CPU將繼續(xù)工作;有可能是CPU沒(méi)有任務(wù)而空閑。在CPU忙時(shí),CPU可以是處在系統(tǒng)模式下,也可以是處在用戶模式下。使用 sar -u 命令可以產(chǎn)生有關(guān)CPU的報(bào)告;使用sar -q 命令可以產(chǎn)生有關(guān)進(jìn)程隊(duì)列的報(bào)告。
1. 使用 sar -u 命令產(chǎn)生的有關(guān)CPU的報(bào)告所顯示內(nèi)容各項(xiàng)的意義是:
%usr 以百分比的形式報(bào)告CPU處在用戶模式下的時(shí)間。
%sys 以百分比的形式報(bào)告CPU處在系統(tǒng)模式下的時(shí)間。
%wio 以百分比的形式報(bào)告CPU等待輸入、輸出完成的時(shí)間。
%idle 以百分比的形式報(bào)告CPU空閑的時(shí)間。
%intr 以百分比的形式報(bào)告CPU處理中斷的時(shí)間。
如果%idle的大小持續(xù)地低于10,說(shuō)明CPU空閑的時(shí)間少,系統(tǒng)的CPU處理能力相對(duì)較低,進(jìn)程競(jìng)爭(zhēng)的主要資源不是內(nèi)存而是CPU。
2. 使用 sar -q 命令產(chǎn)生的有關(guān)進(jìn)程隊(duì)列的報(bào)告所顯示內(nèi)容各項(xiàng)的意義是:
prunq 處理器處理的在內(nèi)存中可運(yùn)行的進(jìn)程隊(duì)列的大小。
%prunocc 處理器處理運(yùn)行隊(duì)列被占用的時(shí)間百分比。
runq-sz 準(zhǔn)備運(yùn)行的進(jìn)程運(yùn)行隊(duì)列。
%runocc 以百分比的形式報(bào)告運(yùn)行隊(duì)列被占用的時(shí)間。
swpq-sz 在交換區(qū)中可執(zhí)行進(jìn)程的數(shù)目。
%swpocc 以百分比的形式報(bào)告交換區(qū)中的運(yùn)行隊(duì)列所占用的時(shí)間。
如果%runocc大于90,并且runq-sz的值大于2,說(shuō)明系統(tǒng)的CPU負(fù)載相對(duì)較重,需要進(jìn)行調(diào)整。
可以從以下幾個(gè)方面進(jìn)行檢查,判斷系統(tǒng)中是否有超常的頁(yè)面活動(dòng):
1. 使用sar -p 命令產(chǎn)生頁(yè)面活動(dòng)報(bào)告。如果頁(yè)面故障vflt/s的值大于100,表示系統(tǒng)中由于有效的頁(yè)面當(dāng)前不在內(nèi)存中,每秒鐘進(jìn)行故障地址轉(zhuǎn)換的數(shù)量在100次以上,這將嚴(yán)重影響到系統(tǒng)的運(yùn)行效率,表明頁(yè)面活動(dòng)不正常。
2. 使用 sar -w 命令產(chǎn)生的報(bào)告中,如果swpin/s 的值大于1,表示每秒從硬盤交換區(qū)傳送進(jìn)入內(nèi)存的次數(shù)超過(guò)1次,標(biāo)志著系統(tǒng)中也可能存在著超常的頁(yè)面活動(dòng)。
3. 使用 sar -u 命令,這條命令可以報(bào)告系統(tǒng)中CPU 的使用效率,如果 %sys 的大小持續(xù)高于60或者 %wio 的大小相對(duì)較高,表示系統(tǒng)中存在的頁(yè)面活動(dòng)可能過(guò)多。
4. 使用 sar -r 命令,這條命令可以報(bào)告系統(tǒng)中內(nèi)存和交換區(qū)的使用情況,如果自由
內(nèi)存 freemen 的值低于100個(gè)頁(yè)面,將嚴(yán)重影響系統(tǒng)的性能。
5. 使用 sar -q 命令產(chǎn)生的報(bào)告中,如果 %swpocc 大于20,說(shuō)明系統(tǒng)交換活動(dòng)過(guò)于
頻繁。
系統(tǒng)I/O是數(shù)據(jù)從內(nèi)存到外設(shè)和從外設(shè)到內(nèi)存,以及外設(shè)之間的傳輸處理。通常情況下,85%的硬盤I/O可以通過(guò)使用buffer cache進(jìn)行處理,buffer cache存在于內(nèi)存核心的一個(gè)區(qū)域,但通常只用于系統(tǒng)I/O,它的大小是在系統(tǒng)啟動(dòng)時(shí)根據(jù)內(nèi)存大小自動(dòng)分配的。通過(guò)修改核心參數(shù)可以改變buffer cache的大小。通常,系統(tǒng)把現(xiàn)有內(nèi)存中的cache分成兩種結(jié)構(gòu),buffer cache 和 page cache。buffer cache存放的是數(shù)據(jù),page cache存放的是程序,它們都要占用相當(dāng)數(shù)量的核心內(nèi)存空間。
1.使用 sar -b 命令產(chǎn)生的緩存區(qū)使用報(bào)告所顯示的各項(xiàng)意義是:
bread/s 平均每秒從硬盤(或其它塊設(shè)備)讀入系統(tǒng)buffer的物理塊數(shù)。
lread/s 平均每秒從系統(tǒng)buffer讀出的邏輯塊數(shù)。
%rache 在buffer cache中進(jìn)行邏輯讀的百分比。
bwrit/s 平均每秒從系統(tǒng)buffer向硬盤(或其它塊設(shè)備)所寫的物理塊
數(shù)。
lwrit/s 平均每秒寫到系統(tǒng)buffer 的邏輯塊數(shù)。
%wcache 在buffer cache 中進(jìn)行邏輯寫的百分比。
pread/s 平均每秒請(qǐng)求進(jìn)行物理讀的次數(shù)。
pwrit/s 平均每秒請(qǐng)求進(jìn)行物理寫的次數(shù)。
在所報(bào)告的各項(xiàng)中,最重要的是%rache和%wcache,這兩項(xiàng)具體體現(xiàn)了系統(tǒng)buffer的使用效率。如果%rache小于90%,%wcache 低于65%,表明系統(tǒng)的I/O活動(dòng)頻繁,系統(tǒng)cache的命中率相對(duì)比較低,需要增加buffer cache的大小,優(yōu)化系統(tǒng)硬盤的讀寫操作。
2.使用 sar -u 命令產(chǎn)生CPU使用情況的報(bào)告。報(bào)告中的%wio以百分比的形式表示系統(tǒng)CPU等待輸入、輸出的時(shí)間。如果%wio的大小過(guò)高,表示系統(tǒng)的CPU花在等待輸入、輸出上的時(shí)間太多,系統(tǒng)的I/O性能較差,可能是由于硬盤產(chǎn)生的問(wèn)題,也可能是內(nèi)存太小等原因產(chǎn)生的問(wèn)題。
3.使用 sar -d 命令產(chǎn)生塊設(shè)備活動(dòng)的報(bào)告所顯示的各項(xiàng)的意義是:
device sar命令正在監(jiān)視的塊設(shè)備的名字。
%busy 以百分比的形式表示設(shè)備忙時(shí),運(yùn)行傳送請(qǐng)求所占用的時(shí)間。
avque 在指定的時(shí)間周期內(nèi),沒(méi)有完成的請(qǐng)求的數(shù)量的平均值。
r+w/s 每秒傳送到設(shè)備或從設(shè)備傳送出的數(shù)據(jù)量。
blks/s 每秒傳送的塊數(shù)。每塊的大小為512KB。
avwait 以毫秒為單位,表示傳送請(qǐng)求等待隊(duì)列空閑的平均時(shí)間。
avserv 以毫秒為單位,表示完成傳送請(qǐng)求所需的平均時(shí)間。
使用 sar -d 命令可以進(jìn)一步判斷系統(tǒng)的I/O問(wèn)題是否是硬盤的I/O性能差的緣故。如果%busy和avque的大小相對(duì)較高,說(shuō)明硬盤的傳輸速度太慢,需要進(jìn)行調(diào)整。
如果你的機(jī)器有多個(gè)CPU處理器,可以使用sar –P命令生成指定的一個(gè)或多個(gè)CPU處理器的活動(dòng)報(bào)告。舉例如下:
l 生成并顯示第一個(gè)CPU的活動(dòng)報(bào)告
sar –P0
l 生成并顯示第二個(gè)和第三個(gè)CPU的活動(dòng)報(bào)告
sar –P1,2
l 生成并顯示第二個(gè)和第三個(gè)CPU的活動(dòng)報(bào)告,每20秒采樣一次,采樣10次
sar –P1,2 20 10
l 生成并顯示所有CPU的活動(dòng)報(bào)告
sar –P ALL
l 生成并顯示第一個(gè)CPU發(fā)生系統(tǒng)調(diào)用的活動(dòng)報(bào)告
sar –c P0
8.7 進(jìn)程管理器(Process Manager)
在命令行中運(yùn)行scoadmin--> rocess Manager?梢酝ㄟ^(guò)進(jìn)程管理器實(shí)現(xiàn)如下功能:
1、 從不同角度來(lái)查看進(jìn)程以及相關(guān)信息;
2、 查找指定進(jìn)程;
3、 向指定進(jìn)程發(fā)送kill信號(hào);
4、 自動(dòng)刷新進(jìn)程信息列表。
進(jìn)程管理器中Process菜單所提供的選項(xiàng)及其相應(yīng)含義如下:
Delete —— 從進(jìn)程列表中刪除(但不殺死)被選種的進(jìn)程。
Priority —— 調(diào)整選定進(jìn)程的優(yōu)先級(jí)。相當(dāng)于renice。
Find —— 按指定匹配串來(lái)查找一個(gè)或多個(gè)進(jìn)程。
Singal —— 發(fā)送一個(gè)kill信號(hào)給一個(gè)進(jìn)程。
Find Attribute —— 根據(jù)進(jìn)程列表中某個(gè)字段進(jìn)行匹配查找一個(gè)或多個(gè)進(jìn)程。
進(jìn)程管理器中View菜單所提供的選項(xiàng)及其相應(yīng)含義如下:
All —— 查看所有進(jìn)程。
By User —— 查看屬于指定用戶的進(jìn)程。
By Tty —— 查看選定的tty設(shè)備上的進(jìn)程。
By Pid —— 查看選定的一個(gè)或多個(gè)進(jìn)程。
Attributes —— 指定進(jìn)程列表中要顯示哪些列字段。
Attribute Filter —— 按指定條件過(guò)濾指定列中的項(xiàng)。
Sort —— 指定按升序或降序進(jìn)行排列。
Set Auto Refresh —— 設(shè)置自動(dòng)刷新進(jìn)程列表的周期。
Refresh Now —— 立即刷新當(dāng)前進(jìn)程列表。
Refresh Tracking —— 設(shè)定進(jìn)程相關(guān)數(shù)據(jù)刷新后按什么樣的方式顯
示當(dāng)前進(jìn)程列表。
系統(tǒng)默認(rèn)設(shè)置為查看所有用戶進(jìn)程列表。
8.8 進(jìn)程間通訊
如果一個(gè)進(jìn)程不與其它任何進(jìn)程通信,這個(gè)進(jìn)程是一個(gè)孤立進(jìn)程。不同的進(jìn)程之間進(jìn)行通訊通過(guò)一組工具完成,包括信號(hào)(signals),管道(pipe),共享內(nèi)存(shared memory),信號(hào)燈(semaphores),消息(messages)和文件(files)等。
8.8.1 信號(hào)
UNIX系統(tǒng)中,信號(hào)的作用是報(bào)告進(jìn)程錯(cuò)誤或異步事件,如:
-內(nèi)存讀,寫錯(cuò)誤
-總線錯(cuò)誤
-系統(tǒng)調(diào)用中使用了錯(cuò)誤的參量
-子進(jìn)程死亡
-殺死進(jìn)程
-掛起/繼續(xù)進(jìn)程運(yùn)行
等等。
8.8.2 管道
1、 管道提供了一種機(jī)制,允許一個(gè)進(jìn)程把信息傳遞給另一個(gè)進(jìn)程。UNIX中,管道是一種特殊類型的文件:每個(gè)管道都有一個(gè)相對(duì)應(yīng)的i節(jié)點(diǎn)。程序?qū)艿赖牟僮魇峭ㄟ^(guò)文件描述符實(shí)現(xiàn)的。
2、 管道與普通文件是有區(qū)別的。在管道中的數(shù)據(jù)是暫時(shí)的,一旦完成數(shù)據(jù)從
管道的讀操作,就不能再對(duì)它進(jìn)行讀操作了。
3、 通常,管道使用最多的是進(jìn)行程序間的信息傳遞。
8.8.3 共享內(nèi)存
共享內(nèi)存是指相互協(xié)作的進(jìn)程,將同一內(nèi)存區(qū)映射到各自的地址空間上。使用共享內(nèi)存區(qū)的所有進(jìn)程都可以對(duì)共享內(nèi)存區(qū)進(jìn)行讀,寫操作。因此,需要對(duì)共享內(nèi)存區(qū)讀,寫操作進(jìn)行協(xié)調(diào),以避免可能引起的數(shù)據(jù)混亂。
8.8.4 信號(hào)燈
1、 信號(hào)燈是一個(gè)同步機(jī)制。它所提供的這種機(jī)制,可以保證在若干個(gè)進(jìn)程間可以共同使用某些資源,并且可以通過(guò)外部事件使這些進(jìn)程同步。
2、 在System V信號(hào)燈結(jié)構(gòu)中,每個(gè)unix信號(hào)燈都包含一個(gè)計(jì)數(shù)器。它記錄當(dāng)前可以使用的資源數(shù)量。當(dāng)信號(hào)燈的值為0時(shí),表示沒(méi)有可用資源 。
8.8.5 消息
1、 UNIX系統(tǒng)中,消息是由一組數(shù)據(jù)信息組成的,它能夠使協(xié)同操作的進(jìn)程之間,通過(guò)緩沖區(qū)中的消息進(jìn)行數(shù)據(jù)交換。
2、 UNIX系統(tǒng)提供了一組系統(tǒng)調(diào)用,這包括創(chuàng)建消息列隊(duì),向消息隊(duì)列發(fā)送消息,從消息隊(duì)列接收消息或從消息隊(duì)列中刪除消息等等。
8.9 作業(yè)調(diào)度
8.9.1 概念
作業(yè)調(diào)度是shell的一個(gè)特性,它允許用戶使用作業(yè)調(diào)度命令。
所謂作業(yè)調(diào)度,實(shí)際上是時(shí)鐘守護(hù)進(jìn)程cron按照用戶提交作業(yè)時(shí)確定的時(shí)間,自動(dòng)地調(diào)度作業(yè)運(yùn)行。
8.9.2 關(guān)于cron
cron(C) 守護(hù)進(jìn)程將在設(shè)定日期的設(shè)定時(shí)間內(nèi)自動(dòng)執(zhí)行任務(wù)。你可以在系統(tǒng)負(fù)載較輕的空閑時(shí)間里安排運(yùn)行非交互式的工作。在unix中,可與cron配合提交作業(yè)的命令有三個(gè):
at、batch、crontab。
cron進(jìn)程的活動(dòng)可以記錄在日志文件/var/cron/log中,是否對(duì)cron的活動(dòng)進(jìn)行記錄,取決于變量CRONLOG的設(shè)置,這個(gè)變量存在文件/etc/default/cron中。在系統(tǒng)默認(rèn)情況下,這個(gè)變量設(shè)置為YES,對(duì)cron 進(jìn)程的活動(dòng)進(jìn)行記錄;只有將變量設(shè)置為NO時(shí),才不記錄cron進(jìn)程的活動(dòng)。
控制安排cron(C)作業(yè)的兩個(gè)文件:
1、/etc/cron.d/cron.allow:這是一個(gè)表示誰(shuí)能夠安排cron&作業(yè)的確切列表。如果它是一個(gè)空文件表明沒(méi)有一個(gè)用戶能安排作業(yè)。
2、/etc/cron.d/cron.deny:這是一個(gè)表示誰(shuí)不能夠安排cron&作業(yè)的確切列表。這個(gè)文件只有當(dāng)cron.allow不存在時(shí)才起作用。如果它是一個(gè)空列表表明任何用戶都可以安排作業(yè)。
3、假如這兩個(gè)文件都不存在,只有超級(jí)用戶能夠安排cron作業(yè)假如這兩個(gè)文件都存在,cron.allow享有優(yōu)先權(quán)。
8.9.3 at、batch命令
at 和 batch命令的功能是在以后某個(gè)時(shí)刻執(zhí)行某些命令。at 命令允許指定作業(yè)執(zhí)行的時(shí)間;而batch 命令在系統(tǒng)負(fù)載情況允許時(shí)才執(zhí)行作業(yè)。
通過(guò)著兩條命令把作業(yè)排隊(duì)后,每個(gè)作業(yè)的ID號(hào)以及它的執(zhí)行時(shí)間都送到標(biāo)準(zhǔn)錯(cuò)誤輸出上。
命令行的結(jié)構(gòu):
at time[date][increment]
at -r job [job ...]
at -l[job ...]
batch
at 、crontab命令的使用范圍:
1、 一般情況下,at 命令和batch命令使用于提交一次性運(yùn)行的作業(yè),即作業(yè)只運(yùn)行一次。
2、 crontab命令所提交的作業(yè),一般是按照指定的時(shí)間間隔,反復(fù)運(yùn)行。
8.9.4 crontab命令
crontab命令的功能是按照一定的時(shí)間間隔調(diào)度一些命令的執(zhí)行。通常這些要運(yùn)行的命令存放在crontab文件中,crontab文件的名字是/usr/spool/cron/crontabs/username。
命令行結(jié)構(gòu)是:
crontab [file]
crontab -e|-l|-r [username]
這兩種crontab命令行都是可以使用的形式。
crontab文件:
作業(yè)與它們預(yù)定的時(shí)間儲(chǔ)存在該文件里,它是一個(gè)可用任何文本編輯器生成的ASCII 文件。每個(gè)用戶只能提出一個(gè)請(qǐng)求文件,文件里的每一個(gè)請(qǐng) 求必須包含以spaces和tabs分隔的六個(gè)域。前五個(gè)域指定何時(shí)開(kāi)始工作,第六個(gè)是開(kāi)始運(yùn)行命令第一到第五個(gè)字段的整數(shù)取值范圍分別是:
0-59 表示分
1-23 表示小時(shí)
1-31 表示日
1-12 表示月份
0-6 表示星期(其中0表示星期日)
這五個(gè)字段,確定了命令執(zhí)行的時(shí)間和日期。
使用crontab命令需要著重注意:
1、 當(dāng)對(duì)用戶的crontab文件進(jìn)行修改時(shí),并不馬上改變當(dāng)前所提交的作業(yè),其影響只有在系統(tǒng)再次引導(dǎo)后才會(huì)產(chǎn)生。這是因?yàn)橛蒫rontab命令提交的作業(yè),最終是通過(guò)cron來(lái)調(diào)度執(zhí)行的。而cron只有在系統(tǒng)啟動(dòng)時(shí)或使用crontab命令提交新的作業(yè)時(shí),才會(huì)去讀crontabs目錄中的文件。
2、 由同一個(gè)用戶提交的crontab 文件,將覆蓋它以前的crontab文件的內(nèi)容。
3、 在默認(rèn)的情況下,作業(yè)運(yùn)行結(jié)果以郵件的形式發(fā)送給用戶,如果不喜歡這種形式,可以對(duì)輸出(其中包括標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出)進(jìn)行重新定向。
修改用戶作業(yè):
步驟1 使用crontab -u user -e (或crontab –e usename)編輯用戶user 的cron(c)
作業(yè)。
步驟2 編輯文件來(lái)增加或修改任何作業(yè)請(qǐng)求。
注:UnixWare 7系統(tǒng)中,默認(rèn)情況下使用ed編輯器編輯用戶user 的cron作業(yè)。若要使用vi來(lái)編輯,可按如下操作:
EDITOR=vi
export EDITOR
刪除用戶作業(yè)
crontab –r -u user (crontab –r username)
從/usr/spool/cron/crontabs目錄中刪除用戶定義的作業(yè)調(diào)度文件。
8.9.5 任務(wù)調(diào)度器(Task Scheduler)
可以利用任務(wù)調(diào)度器(在X windows下運(yùn)行)編輯其他用戶的作業(yè)調(diào)度文件。任務(wù)調(diào)度器不允許在一條記錄中指定一周多天,但可以用多條記錄實(shí)現(xiàn)定時(shí)調(diào)度。有下列兩種方法來(lái)啟動(dòng)任務(wù)調(diào)度器:
1、 在命令行運(yùn)行scoadmin task;
2、 在CDE界面中點(diǎn)擊scoadmin項(xiàng),選擇管理工具窗口中的Task Scheduler項(xiàng)。
8.10 進(jìn)程審計(jì)
通過(guò)進(jìn)程審計(jì)可以對(duì)系統(tǒng)進(jìn)行監(jiān)控,從多方面較為細(xì)致地分析系統(tǒng)和用戶進(jìn)程相關(guān)信息,能及時(shí)、準(zhǔn)確地發(fā)現(xiàn)系統(tǒng)錯(cuò)誤。在/usr/lib/acct目錄中包含了所有的進(jìn)程審計(jì)命令。
8.10.1 打開(kāi)進(jìn)程審計(jì)
方法一:通過(guò)Reports Manager啟動(dòng)進(jìn)程審計(jì)
1、 運(yùn)行scoadmin;
2、 選擇System-->;Reports Manager-->;Accounting-->;Enable;
3、 退出Reports Manager。
也可以直接在命令行輸入下列命令進(jìn)入Reports Manager:
# scoadmin rep
之后選擇Accounting-->;Enable即可。
這時(shí)系統(tǒng)將生成/etc/rc2.d/S02acct和/etc/rc0.d/K02acct兩個(gè)文件,同時(shí)在/usr/spool/cron/crontabs/adm文件中加入相關(guān)任務(wù)調(diào)度記錄項(xiàng),這些記錄項(xiàng)所執(zhí)行的操作及其功能如下:
/usr/lib/acct/ckpacct:檢查文件/var/adm/pacct大小。當(dāng)該文件大小為500個(gè)塊時(shí),文件被更名為/var/adm/pacct?文件并創(chuàng)建一個(gè)新的/var/adm/pacct文件。
/usr/lib/acct/runacct:生成供Reports Manager使用的報(bào)告。
/usr/lib/acct/dodisk:收集用戶磁盤使用情況的有關(guān)信息。
/usr/lib/acct/monacct:生成月審計(jì)報(bào)表。
方法二:在命令行方式下啟動(dòng)進(jìn)程審計(jì)
運(yùn)行如下命令:
# /usr/lib/acct/startup
該命令不生成/etc/rc2.d/S02acct和/etc/rc0.d/K02acct兩個(gè)文件以及/usr/spool/cron/crontabs/adm文件中相關(guān)任務(wù)調(diào)度記錄項(xiàng)。
打開(kāi)進(jìn)程審計(jì)后,進(jìn)程審計(jì)記錄被寫入文件/var/adm/pacct中。
8.10.2 產(chǎn)生審計(jì)報(bào)告
1、 運(yùn)行scoadmin rep,從Reports下拉菜單中可以選擇產(chǎn)生各種審計(jì)報(bào)表。
2、 可以在命令行運(yùn)行下列命令來(lái)查看進(jìn)程審計(jì)報(bào)表文件:
# acctcom [/var/adm/pacct]
進(jìn)程審計(jì)文件包含八個(gè)字段,分別如下:
COMMAND NAME:命令名 END TIME:進(jìn)程結(jié)束時(shí)間
USER:用戶注冊(cè)名 REAL(SECS):實(shí)時(shí)時(shí)間(秒)
TTYNAME:tty設(shè)備名 CPU(SECS):CPU時(shí)間(秒)
START TIME:進(jìn)程啟動(dòng)時(shí)間 MEANSIZE(K):收入
另外,你可以通過(guò)命令行產(chǎn)生各種不同類型的進(jìn)程審計(jì)報(bào)表并將報(bào)表內(nèi)容輸出到指定文件中。舉例如下:
1、 產(chǎn)生某用戶的進(jìn)程審計(jì)報(bào)表:
# acctcom –u login_name /var/adm/pacct
2、 產(chǎn)生某用戶組的進(jìn)程審計(jì)報(bào)表:
# acctcom –g group_name /var/adm/pacct
3、 產(chǎn)生運(yùn)行在特定終端上的進(jìn)程審計(jì)報(bào)表:
# acctcom –l /dev/term/00t /var/adm/pacct
8.10.3 關(guān)閉進(jìn)程審計(jì)
方法一:在Reports Manager中關(guān)閉進(jìn)程審計(jì)
1、 運(yùn)行scoadmin;
2、 選擇System-->;Reports Manager-->;Accounting-->;Enable;
3、 退出Reports Manager。
也可以直接在命令行輸入下列命令進(jìn)入Reports Manager:
# scoadmin rep
之后選擇Accounting-->;Disable即可。
這時(shí)系統(tǒng)將刪除/etc/rc2.d/S02acct和/etc/rc0.d/K02acct兩個(gè)文件,同時(shí)在/usr/spool/cron/crontabs/adm文件中刪除相關(guān)任務(wù)調(diào)度記錄項(xiàng)。
方法二:在命令行方式下關(guān)閉進(jìn)程審計(jì)
運(yùn)行如下命令:
# /usr/lib/acct/shutacct
該命令不刪除/etc/rc2.d/S02acct和/etc/rc0.d/K02acct兩個(gè)文件以及/usr/spool/cron/crontabs/adm文件中相關(guān)任務(wù)調(diào)度記錄項(xiàng)。 |
|