談?wù)凷olaris系統(tǒng)性能上的維護(hù)
2024-07-26 00:29:54
供稿:網(wǎng)友
目前,由于UNIX操作系統(tǒng)的諸多優(yōu)點(diǎn),ISP們大多采用UNIX作為提供服務(wù)的系統(tǒng)平臺(tái),其中Solaris占了其中的很大比例。在Solaris的維護(hù)中,經(jīng)常出現(xiàn)的是系統(tǒng)性能維護(hù)上的問(wèn)題,影響系統(tǒng)性能的因素有很多,本文從對(duì)系統(tǒng)的平均負(fù)荷、進(jìn)程監(jiān)視、CPU、I/O及內(nèi)存管理、網(wǎng)絡(luò)流量診斷等方面進(jìn)行了分析闡述,給出了在Solaris性能維護(hù)上的一些方法和經(jīng)驗(yàn)。
----
系統(tǒng)的性能是指該系統(tǒng)完成任務(wù)的情況,它的有效性、穩(wěn)定性和響應(yīng)速率。系統(tǒng)管理員們常常抱怨系統(tǒng)性能不好、不穩(wěn)定、系統(tǒng)響應(yīng)速度太慢等等,所有這類問(wèn)題僅僅是一些表面現(xiàn)象。整個(gè)網(wǎng)絡(luò)系統(tǒng)的性能的好壞是與網(wǎng)絡(luò)拓樸結(jié)構(gòu),服務(wù)器系統(tǒng)、路由設(shè)備、路由政策、接入設(shè)備、物理線路等多個(gè)方面密切相關(guān)的,任何一個(gè)環(huán)節(jié)出現(xiàn)問(wèn)題,都會(huì)影響整個(gè)系統(tǒng)的性能。在優(yōu)化整個(gè)系統(tǒng)性能之前,必須監(jiān)視、審計(jì)每一個(gè)環(huán)節(jié)中系統(tǒng)資源是否合理的使用和分配。服務(wù)器和工作站系統(tǒng)性能好壞主要取決于它怎樣合理使用和分配它的資源,定期監(jiān)視、審計(jì)系統(tǒng)的性能是非常重要的,而且應(yīng)該知道要監(jiān)視系統(tǒng)哪些資源。系統(tǒng)資源包括3個(gè)方面:
---- 1、 CPU;
---- 2、 內(nèi)存子系統(tǒng);
---- 3、 I/O子系統(tǒng)。
----
這3個(gè)方面,不論那一方面存在問(wèn)題都會(huì)對(duì)系統(tǒng)性能產(chǎn)生影響,而審計(jì)系統(tǒng)性能也是從這3方面入手。審計(jì)系統(tǒng)性能的工具很多,在Solaris操作系統(tǒng)中提供了多種用來(lái)審計(jì)系統(tǒng)資源運(yùn)行情況的工具,主要包括:
The uptime and sar commands,用來(lái)報(bào)告系統(tǒng)的平均負(fù)荷;
The ps command,提供系統(tǒng)中正在運(yùn)行進(jìn)程的相關(guān)信息;
The df command,提供有關(guān)磁盤(pán)使用方面的信息;
The vmstat、iostat and sar commands,報(bào)告系統(tǒng)活動(dòng)情況,提供內(nèi)存使用的相關(guān)信息、I/O系統(tǒng)信息、CPU活動(dòng)等;
The swap command,用來(lái)統(tǒng)計(jì)系統(tǒng)中swap使用情況;
The netstat command,用來(lái)顯示有關(guān)網(wǎng)絡(luò)性能方面的信息。
----
值得注意的是,對(duì)于服務(wù)器/工作站系統(tǒng),由于用戶量的不斷增加,系統(tǒng)資源的使用和分配可能在一段時(shí)間內(nèi)較為合理,一段時(shí)間之后,系統(tǒng)資源可能處于超負(fù)荷運(yùn)行狀態(tài),所以說(shuō),系統(tǒng)性能管理是一項(xiàng)長(zhǎng)期的工作,應(yīng)將系統(tǒng)性能管理作為日常系統(tǒng)管理工作的一部分,來(lái)維護(hù)系統(tǒng)可靠、高效運(yùn)行。
----
在對(duì)系統(tǒng)進(jìn)行性能優(yōu)化之前,必須知道系統(tǒng)的硬件資源配置、軟件資源的使用及整個(gè)系統(tǒng)配置是否存在問(wèn)題。這些問(wèn)題的發(fā)現(xiàn)往往建立在系統(tǒng)給人們的印象上。比如:系統(tǒng)對(duì)用戶的響應(yīng)速率慢,進(jìn)程運(yùn)行需花更多的時(shí)間等等。如果發(fā)現(xiàn)了這些現(xiàn)象,就應(yīng)該采集系統(tǒng)主要資源數(shù)據(jù)并進(jìn)行分析,找到提高系統(tǒng)性能的方法。
---- 一、 系統(tǒng)的平均負(fù)荷
---- 系統(tǒng)在不同時(shí)間內(nèi)的平均負(fù)荷(Last mimute、Last 5 minutes、Last 15
minutes)是用來(lái)評(píng)估系統(tǒng)是否超負(fù)荷運(yùn)行較方便、較常用的一種方法。系統(tǒng)在正常運(yùn)行的情況下,3個(gè)值的范圍應(yīng)在0-2。對(duì)于Solaris操作系統(tǒng),可以用現(xiàn)金條命令獲取系統(tǒng)平均負(fù)荷(以主機(jī)public.hr.hl.cn為例):
---- 1. uptime
---- public.hr.hl.cn% uptime
---- 2:06下午 運(yùn)行1天 5:27,7 users, 平均負(fù)荷:0.00,0.01,0.01
---- 2、sar(system activity
reporter)命令本身能用于采集系統(tǒng)活動(dòng)數(shù)據(jù)或從sadc建立的每日活動(dòng)文件中提取系統(tǒng)活動(dòng)數(shù)據(jù)。
public.hr.hl.cn%sar –q(從文件中取數(shù)據(jù))
SunOS public.hr.hl.cn 5.5.1 04/08/98
00:00:01 runq-sz %runocc swpq-sz %swpocc
01:00:01 1.0 0
02:00:01 1.8 0
03:00:01 1.3 0
04:00:01 1.8 0
05:00:01 2.0 0
Average 1.6 0
---- 或使用:“sar –options t n ”從當(dāng)前開(kāi)始,在t秒(t>=5)時(shí)間間隔內(nèi),采集n次系統(tǒng)活動(dòng)數(shù)據(jù)。
----
runq-sz正常情況下它應(yīng)小于2。如果此值連續(xù)大于2表明系統(tǒng)可能處于CPU-bound狀態(tài)。如果%runocc大于90,并且runq-sz大于2,表明CPU處于超負(fù)荷狀態(tài),系統(tǒng)響應(yīng)速率下降。
---- 二、 系統(tǒng)進(jìn)程監(jiān)視
---- 系統(tǒng)中運(yùn)行的進(jìn)程都不同程度的消耗系統(tǒng)資源,通過(guò)監(jiān)視這些進(jìn)程,找到對(duì)系統(tǒng)資源影響較大的進(jìn)程,就能夠采取相應(yīng)措施改善系統(tǒng)性能。
----
在Solaris系統(tǒng)中,可以通過(guò)ps命令采集進(jìn)程數(shù)據(jù),系統(tǒng)中有2條ps命令(/usr/bin/ps、/usr/ucb/ps),建議兩條命令結(jié)合使用,ps命令能夠用來(lái)監(jiān)視系統(tǒng)中活動(dòng)進(jìn)程的執(zhí)行狀態(tài),它能匯報(bào)下列信息:
用戶名稱;
進(jìn)程的ID(PID);
CPU使用時(shí)間;
內(nèi)存使用情況;
當(dāng)前進(jìn)程狀態(tài);
進(jìn)程的優(yōu)先級(jí);
進(jìn)程類型。
----
通過(guò)觀察分析ps命令輸出結(jié)果,如果發(fā)現(xiàn)異常情況,如某個(gè)進(jìn)程占用CPU/MEM過(guò)多、某個(gè)用戶產(chǎn)生很多進(jìn)程等等,此時(shí)的問(wèn)題不是用戶的問(wèn)題,而是過(guò)重的CPU
load阻礙用戶的訪問(wèn)速率。這時(shí)候可以對(duì)那些顯爾易見(jiàn)的問(wèn)題采取相應(yīng)補(bǔ)救措施:
如果發(fā)現(xiàn)某個(gè)用戶產(chǎn)生很多進(jìn)程,占用過(guò)多的系統(tǒng)資源,可以kill其中的消耗資源較多的進(jìn)程,釋放系統(tǒng)資源;
如果發(fā)現(xiàn)某個(gè)進(jìn)程積聚大量時(shí)間,這可能指示進(jìn)程處于無(wú)限循環(huán)狀態(tài)或進(jìn)程出現(xiàn)錯(cuò)誤。在咨詢這個(gè)進(jìn)程的用戶后,可以終止此進(jìn)程。
如果發(fā)現(xiàn)某個(gè)不很重要的進(jìn)程消耗大量CPU,可以使用nice/PRiocntl命令改變此進(jìn)程的優(yōu)先級(jí)。使它在較低的優(yōu)先級(jí)中運(yùn)行。
---- 除采取上述措施外,還應(yīng)該分析其他的問(wèn)題,通常關(guān)心的是那些runnable、blocked for disk I/O、or paging
jobs,而不是那些sleeping、stoped進(jìn)程,因?yàn)檫@些進(jìn)程并不影響整個(gè)系統(tǒng)的性能。如果必要的進(jìn)程占用內(nèi)存很大,表明系統(tǒng)可能需要增加內(nèi)存。
---- 三、 CPU與I/O監(jiān)控
---- 從PS得到的數(shù)據(jù)是非常詳細(xì)的,通常不僅需要知道每個(gè)進(jìn)程的狀態(tài),而且還需知道整個(gè)系統(tǒng)的狀態(tài),有許多方法可以得到整個(gè)系統(tǒng)的狀態(tài)比如:
---- 1、 df命令報(bào)告磁盤(pán)的使用情況,顯示mount or unmount文件系統(tǒng)磁盤(pán)空間使用情況;
---- 2、 iostat and vmstat命令顯示系統(tǒng)資源狀況;
----
iostat命令匯報(bào)磁盤(pán)I/O狀態(tài)、進(jìn)程流通量、隊(duì)列長(zhǎng)度、服務(wù)時(shí)間等,vmstat命令顯示內(nèi)存使用情況、CPU負(fù)荷、paging、系統(tǒng)調(diào)用等等。
---- 3、 sar命令收集、報(bào)告系統(tǒng)的活動(dòng)情況。
---- 四、 內(nèi)存統(tǒng)計(jì)管理
----
在系統(tǒng)運(yùn)行的不同時(shí)期,可用內(nèi)存能否滿足程序運(yùn)行的需求是影響系統(tǒng)性能的一個(gè)重要因素。如果可用內(nèi)存不能滿足程序運(yùn)行的需要,那么系統(tǒng)就重復(fù)從物理內(nèi)存中拷貝一個(gè)或多個(gè)頁(yè)面到磁盤(pán),以及從磁盤(pán)拷貝頁(yè)面到內(nèi)存。在從物理內(nèi)存中拷貝一個(gè)或多個(gè)頁(yè)面到磁盤(pán)后,系統(tǒng)為其它任務(wù)重新使用這些內(nèi)存,這就是通常所說(shuō)的“paging”。一旦系統(tǒng)啟動(dòng)paging,整個(gè)系統(tǒng)的性能可能會(huì)急劇下降直到系統(tǒng)內(nèi)存又滿足程序運(yùn)行的需要??傊?,當(dāng)可用內(nèi)存不能滿足系統(tǒng)需要時(shí)會(huì)影響系統(tǒng)性能;當(dāng)可用內(nèi)存滿足系統(tǒng)需要時(shí)則不會(huì)影響系統(tǒng),因此,應(yīng)該經(jīng)常監(jiān)視有關(guān)內(nèi)存使用數(shù)據(jù)并進(jìn)行分析,預(yù)測(cè)可能發(fā)生的問(wèn)題,擴(kuò)展內(nèi)存或調(diào)整內(nèi)存配置參數(shù)使系統(tǒng)穩(wěn)定可靠運(yùn)行。
---- 通常,系統(tǒng)采取兩種方式來(lái)滿足所有進(jìn)程對(duì)內(nèi)存的需求:paging and
swapping.swapping移動(dòng)整個(gè)進(jìn)程到磁盤(pán),從而達(dá)到回收內(nèi)存的目的。在下一次系統(tǒng)運(yùn)行該進(jìn)程時(shí),它必須從磁盤(pán)swap區(qū)中拷貝整個(gè)進(jìn)程的內(nèi)存映象到內(nèi)存中去。Paging移動(dòng)進(jìn)程的部分頁(yè)面到磁盤(pán)來(lái)達(dá)到回收內(nèi)存的目的,進(jìn)程的大多數(shù)頁(yè)面仍保留在內(nèi)存中。
---- 五、 系統(tǒng)信息的自動(dòng)采集
----
為獲取系統(tǒng)一段時(shí)間的活動(dòng)數(shù)據(jù),啟用系統(tǒng)信息自動(dòng)采集是非常必要的,因?yàn)樗亲钊菀撰@取系統(tǒng)信息的一種方式,在系統(tǒng)信息自動(dòng)采集中有2條命令:sadc、sa1.
----
Sadc命令主要是采集系統(tǒng)活動(dòng)數(shù)據(jù),并將它放在下一個(gè)二進(jìn)制文件中,這個(gè)文件只放一天數(shù)據(jù),它位于目錄/var/adm/sa下,文件名為sadd,其中dd用當(dāng)前日期代替。
----
為了獲取系統(tǒng)不同時(shí)期的數(shù)據(jù),應(yīng)該定期運(yùn)行sadc。其中最簡(jiǎn)單的方式是在/var/spool/cron/crontabs/sys文件中運(yùn)行shell
script sa1,它運(yùn)行sadc并將數(shù)據(jù)寫(xiě)到文件中去??梢允褂胹ar命令從文件摘取系統(tǒng)活動(dòng)數(shù)據(jù)。
---- 六、 網(wǎng)絡(luò)流量診斷
----
網(wǎng)絡(luò)問(wèn)題是影響系統(tǒng)性能的問(wèn)題之一,診斷網(wǎng)絡(luò)問(wèn)題最簡(jiǎn)單的工具當(dāng)然是使用系統(tǒng)提供的命令netstat,使用“-i”選項(xiàng),命令netstat能顯示接口狀態(tài),舉例如下:
public.hr.hl.cn% netstat –I
name mtu net/dest address
ipkts ierrs opkts oerrs collis queue
lo0 8232 loopback localhost 2616 0
2616 0 0 0
le0 1500 202.96.30.0 tech
75083 0 69325 1 621 0
---- 命令結(jié)果顯示了在每一個(gè)接口發(fā)送和接收數(shù)據(jù)包的情況,其中的3項(xiàng):ierrs、oerrs and collis與網(wǎng)絡(luò)性能問(wèn)題有關(guān):
ierrs,是指主機(jī)從網(wǎng)絡(luò)接收數(shù)據(jù)包中包含有多少不正確的數(shù)據(jù)包,如果ierrs很大,通常表明硬件接口存在問(wèn)題或硬件驅(qū)動(dòng)器接受數(shù)據(jù)包較慢,此時(shí)應(yīng)該在不同時(shí)間多次采集數(shù)據(jù)進(jìn)行比較來(lái)決定采取什么措施。正常情況下,ierrs/opkts<
0.025%.
oerrs,是指主機(jī)從網(wǎng)絡(luò)送出的數(shù)據(jù)包中包含有多少不正確的數(shù)據(jù)包。正常情況下oerrs/ipkts< 0.025%.
collis,碰撞是在局域網(wǎng)中有兩面三刀個(gè)或以上系統(tǒng)同時(shí)發(fā)送數(shù)據(jù)時(shí)產(chǎn)生的,如果碰撞率(collis/opkts)大于5%,說(shuō)明網(wǎng)絡(luò)負(fù)荷過(guò)大。此時(shí)應(yīng)該調(diào)整網(wǎng)絡(luò)結(jié)構(gòu),減少網(wǎng)絡(luò)流量。