我的 blog搬家了,以后將主要在這里維護: www.foxlog.org
需要和我交換連接的朋友請聯(lián)系我 mail to me : idea.wang@gmail.com,或者在我 blog留言
http://www.foxlog.org/%E7%BB%99%E6%88%91%E7%95%99%E8%A8%80
1.查看系統(tǒng)Swap空間使用
[root@jumper usr]# free
total used free shared buffers cached
Mem: 513980 493640 20340 0 143808 271780
-/+ buffers/cache: 78052 435928
Swap: 1052248 21256 1030992
2.在空間合適處創(chuàng)建swap文件
[root@jumper usr]# mkdir swap
[root@jumper usr]# cd swap
[root@jumper swap]# dd if=/dev/zero of=swapfile bs=1024 count=10000
10000+0 records in
10000+0 records out
[root@jumper swap]# ls -al
total 10024
drwxr-xr-x 2 root root 4096 7月 28 14:58 .
drwxr-xr-x 19 root root 4096 7月 28 14:57 ..
-rw-r--r-- 1 root root 10240000 7月 28 14:58 swapfile
[root@jumper swap]# mkswap swapfile
Setting up swapspace version 1, size = 9996 KiB
3.激活swap文件
[root@jumper swap]# swapon swapfile
[root@jumper swap]# ls -l
total 10016
-rw-r--r-- 1 root root 10240000 7月 28 14:58 swapfile
[root@jumper swap]# free
total used free shared buffers cached
Mem: 513980 505052 8928 0 143900 282288
-/+ buffers/cache: 78864 435116
Swap: 1062240 21256 1040984
[root@jumper swap]#
Swap,即交換區(qū),除了安裝Linux的時候,有多少人關(guān)心過它呢?其實,Swap的調(diào)整對Linux服務(wù)器,特別是Web服務(wù)器的性能至關(guān)重要。通過調(diào)整Swap,有時可以越過系統(tǒng)性能瓶頸,節(jié)省系統(tǒng)升級費用。
本文內(nèi)容包括:
Swap基本原理
突破128M Swap限制
Swap配置對性能的影響
Swap性能監(jiān)視
有關(guān)Swap操作的系統(tǒng)命令
Swap基本原理
Swap的原理是一個較復(fù)雜的問題,需要大量的篇幅來說明。在這里只作簡單的介紹,在以后的文章中將和大家詳細討論Swap實現(xiàn)的細節(jié)。
眾所周知,現(xiàn)代操作系統(tǒng)都實現(xiàn)了"虛擬內(nèi)存"這一技術(shù),不但在功能上突破了物理內(nèi)存的限制,使程序可以操縱大于實際物理內(nèi)存的空間,更重要的是,"虛擬內(nèi)存"是隔離每個進程的安全保護網(wǎng),使每個進程都不受其它程序的干擾。
Swap 空間的作用可簡單描述為:當(dāng)系統(tǒng)的物理內(nèi)存不夠用的時候,就需要將物理內(nèi)存中的一部分空間釋放出來,以供當(dāng)前運行的程序使用。那些被釋放的空間可能來自一些很長時間沒有什么操作的程序,這些被釋放的空間被臨時保存到Swap空間中,等到那些程序要運行時,再從Swap中恢復(fù)保存的數(shù)據(jù)到內(nèi)存中。這樣,系統(tǒng)總是在物理內(nèi)存不夠時,才進行Swap交換。
計算機用戶會經(jīng)常遇這種現(xiàn)象。例如,在使用Windows系統(tǒng)時,可以同時運行多個程序,當(dāng)你切換到一個很長時間沒有理會的程序時,會聽到硬盤"嘩嘩"直響。這是因為這個程序的內(nèi)存被那些頻繁運行的程序給"偷走"了,放到了Swap區(qū)中。因此,一旦此程序被放置到前端,它就會從Swap區(qū)取回自己的數(shù)據(jù),將其放進內(nèi)存,然后接著運行。
需要說明一點,并不是所有從物理內(nèi)存中交換出來的數(shù)據(jù)都會被放到Swap中(如果這樣的話,Swap就會不堪重負),有相當(dāng)一部分數(shù)據(jù)被直接交換到文件系統(tǒng)。例如,有的程序會打開一些文件,對文件進行讀寫(其實每個程序都至少要打開一個文件,那就是運行程序本身),當(dāng)需要將這些程序的內(nèi)存空間交換出去時,就沒有必要將文件部分的數(shù)據(jù)放到 Swap空間中了,而可以直接將其放到文件里去。如果是讀文件操作,那么內(nèi)存數(shù)據(jù)被直接釋放,不需要交換出來,因為下次需要時,可直接從文件系統(tǒng)恢復(fù);如果是寫文件,只需要將變化的數(shù)據(jù)保存到文件中,以便恢復(fù)。但是那些用malloc和new函數(shù)生成的對象的數(shù)據(jù)則不同,它們需要Swap空間,因為它們在文件系統(tǒng)中沒有相應(yīng)的"儲備"文件,因此被稱作"匿名"(Anonymous)內(nèi)存數(shù)據(jù)。這類數(shù)據(jù)還包括堆棧中的一些狀態(tài)和變量數(shù)據(jù)等。所以說,Swap 空間是"匿名"數(shù)據(jù)的交換空間。
突破128M Swap限制
經(jīng)??吹接行㎜inux(國內(nèi)漢化版)安裝手冊上有這樣的說明:Swap空間不能超過128M。為什么會有這種說法?在說明"128M"這個數(shù)字的來歷之前,先給問題一個回答:現(xiàn)在根本不存在128M的限制!現(xiàn)在的限制是2G!
Swap 空間是分頁的,每一頁的大小和內(nèi)存頁的大小一樣,方便Swap空間和內(nèi)存之間的數(shù)據(jù)交換。舊版本的Linux實現(xiàn)Swap空間時,用Swap空間的第一頁作為所有Swap空間頁的一個"位映射"(Bit map)。這就是說第一頁的每一位,都對應(yīng)著一頁Swap空間。如果這一位是1,表示此頁Swap可用;如果是0,表示此頁是壞塊,不能使用。這么說來,第一個Swap映射位應(yīng)該是0,因為,第一頁Swap是映射頁。另外,最后10個映射位也被占用,用來表示Swap的版本(原來的版本是Swap_space ,現(xiàn)在的版本是swapspace2)。那么,如果說一頁的大小為s,這種Swap的實現(xiàn)方法共能管理"8 * ( s - 10 ) - 1"個Swap頁。對于i386系統(tǒng)來說s=4096,則空間大小共為133890048,如果認為 1 MB=2^20 Byte的話,大小正好為128M。
之所以這樣來實現(xiàn)Swap空間的管理,是要防止Swap空間中有壞塊。如果系統(tǒng)檢查到Swap中有壞塊,則在相應(yīng)的位映射上標(biāo)記上0,表示此頁不可用。這樣在使用Swap時,不至于用到壞塊,而使系統(tǒng)產(chǎn)生錯誤。
現(xiàn)在的系統(tǒng)設(shè)計者認為:
1.現(xiàn)在硬盤質(zhì)量很好,壞塊很少。
2.就算有,也不多,只需要將壞塊羅列出來,而不需要為每一頁建立映射。
3.如果有很多壞塊,就不應(yīng)該將此硬盤作為Swap空間使用。
于是,現(xiàn)在的Linux取消了位映射的方法,也就取消了128M的限制。直接用地址訪問,限制為2G。
Swap配置對性能的影響
分配太多的Swap空間會浪費磁盤空間,而Swap空間太少,則系統(tǒng)會發(fā)生錯誤。
如果系統(tǒng)的物理內(nèi)存用光了,系統(tǒng)就會跑得很慢,但仍能運行;如果Swap空間用光了,那么系統(tǒng)就會發(fā)生錯誤。例如,Web服務(wù)器能根據(jù)不同的請求數(shù)量衍生出多個服務(wù)進程(或線程),如果Swap空間用完,則服務(wù)進程無法啟動,通常會出現(xiàn)"application is out of memory"的錯誤,嚴重時會造成服務(wù)進程的死鎖。因此Swap空間的分配是很重要的。
通常情況下,Swap空間應(yīng)大于或等于物理內(nèi)存的大小,最小不應(yīng)小于64M,通常Swap空間的大小應(yīng)是物理內(nèi)存的2-2.5倍。但根據(jù)不同的應(yīng)用,應(yīng)有不同的配置:如果是小的桌面系統(tǒng),則只需要較小的Swap空間,而大的服務(wù)器系統(tǒng)則視情況不同需要不同大小的Swap空間。特別是數(shù)據(jù)庫服務(wù)器和Web服務(wù)器,隨著訪問量的增加,對Swap空間的要求也會增加,具體配置參見各服務(wù)器產(chǎn)品的說明。
另外,Swap分區(qū)的數(shù)量對性能也有很大的影響。因為Swap交換的操作是磁盤IO的操作,如果有多個 Swap交換區(qū),Swap空間的分配會以輪流的方式操作于所有的Swap,這樣會大大均衡IO的負載,加快Swap交換的速度。如果只有一個交換區(qū),所有的交換操作會使交換區(qū)變得很忙,使系統(tǒng)大多數(shù)時間處于等待狀態(tài),效率很低。用性能監(jiān)視工具就會發(fā)現(xiàn),此時的CPU并不很忙,而系統(tǒng)卻慢。這說明,瓶頸在 IO上,依靠提高CPU的速度是解決不了問題的。
系統(tǒng)性能監(jiān)視
Swap空間的分配固然很重要,而系統(tǒng)運行時的性能監(jiān)控卻更加有價值。通過性能監(jiān)視工具,可以檢查系統(tǒng)的各項性能指標(biāo),找到系統(tǒng)性能的瓶頸。本文只介紹一下在Solaris下和Swap相關(guān)的一些命令和用途。
最常用的是Vmstat命令(在大多數(shù)Unix平臺下都有這樣一些命令),此命令可以查看大多數(shù)性能指標(biāo)。
例如:
# vmstat 3
procs memory swap io system cpu
r b w swpd free buff cache si so bi bo in cs us sy id
0 0 0 0 93880 3304 19372 0 0 10 2 131 10 0 0 99
0 0 0 0 93880 3304 19372 0 0 0 0 109 8 0 0 100
0 0 0 0 93880 3304 19372 0 0 0 0 112 6 0 0 100
............
命令說明:
vmstat 后面的參數(shù)指定了性能指標(biāo)捕獲的時間間隔。3表示每三秒鐘捕獲一次。第一行數(shù)據(jù)不用看,沒有價值,它僅反映開機以來的平均性能。從第二行開始,反映每三秒鐘之內(nèi)的系統(tǒng)性能指標(biāo)。這些性能指標(biāo)中和Swap有關(guān)的包括以下幾項:
procs下的w
它表示當(dāng)前(三秒鐘之內(nèi))需要釋放內(nèi)存、交換出去的進程數(shù)量。
memory下的swpd
它表示使用的Swap空間的大小。
Swap下的si,so
si表示當(dāng)前(三秒鐘之內(nèi))每秒交換回內(nèi)存(Swap in)的總量,單位為kbytes;so表示當(dāng)前(三秒鐘之內(nèi))每秒交換出內(nèi)存(Swap out)的總量,單位為kbytes。
以上的指標(biāo)數(shù)量越大,表示系統(tǒng)越忙。這些指標(biāo)所表現(xiàn)的系統(tǒng)繁忙程度,與系統(tǒng)具體的配置有關(guān)。系統(tǒng)管理員應(yīng)該在平時系統(tǒng)正常運行時,記下這些指標(biāo)的數(shù)值,在系統(tǒng)發(fā)生問題的時候,再進行比較,就會很快發(fā)現(xiàn)問題,并制定本系統(tǒng)正常運行的標(biāo)準(zhǔn)指標(biāo)值,以供性能監(jiān)控使用。
另外,使用Swapon-s也能簡單地查看當(dāng)前Swap資源的使用情況。例如:
# swapon -s
Filename Type Size Used Priority
/dev/hda9 partition 361420 0 3
能夠方便地看出Swap空間的已用和未用資源的大小。
應(yīng)該使Swap負載保持在30%以下,這樣才能保證系統(tǒng)的良好性能。
有關(guān)Swap操作的系統(tǒng)命令
增加Swap空間,分以下幾步:
1)成為超級用戶
$su - root
2)創(chuàng)建Swap文件
# dd if=/dev/zero of=swapfile bs=1024 count=65536
創(chuàng)建一個有連續(xù)空間的交換文件。
3)激活Swap文件
#/usr/sbin/swapon swapfile
swapfile指的是上一步創(chuàng)建的交換文件。 4)現(xiàn)在新加的Swap文件已經(jīng)起作用了,但系統(tǒng)重新啟動以后,并不會記住前幾步的操作。因此要在/etc/fstab文件中記錄文件的名字,和Swap類型,如:
/path/swapfile none Swap sw,pri=3 0 0
5)檢驗Swap文件是否加上
/usr/sbin/swapon -s
刪除多余的Swap空間。
1)成為超級用戶
2)使用Swapoff命令收回Swap空間。
#/usr/sbin/swapoff swapfile
3)編輯/etc/fstab文件,去掉此Swap文件的實體。
4)從文件系統(tǒng)中回收此文件。
#rm swapfile
5)當(dāng)然,如果此Swap空間不是一個文件,而是一個分區(qū),則需創(chuàng)建一個新的文件系統(tǒng),再掛接到原來的文件系統(tǒng)上。
come from here
如果將需求分析階段的工作歸結(jié)為編寫需求規(guī)格說明書,這種簡化的做法往往是導(dǎo)致項目后期層出不窮問題的罪魁禍?zhǔn)住=ㄗh采用以下步驟形成軟件需求:獲取用戶需求→分析用戶需求→編寫需求文檔→評審需求文檔→管理需求。下面我們先來討論前兩個步驟(獲取用戶需求、分析用戶需求)的做法。
獲取用戶需求
這是該階段的一個最重要的任務(wù)。以下為獲取用戶需求需要執(zhí)行的活動(如圖1所示)。
● 了解客戶方的所有用戶類型以及潛在的類型。然后,根據(jù)他們的要求來確定系統(tǒng)的整體目標(biāo)和系統(tǒng)的工作范圍。
● 對用戶進行訪談和調(diào)研。交流的方式可以是會議、電話、電子郵件、小組討論、模擬演示等不同形式。需要注意的是,每一次交流一定要有記錄,對于交流的結(jié)果還可以進行分類,便于后續(xù)的分析活動。例如,可以將需求細分為功能需求、非功能需求(如響應(yīng)時間、平均無故障工作時間、自動恢復(fù)時間等)、環(huán)境限制、設(shè)計約束等類型。
● 需求分析人員對收集到的用戶需求做進一步的分析和整理。下面是幾條常見的準(zhǔn)則:
⑴對于用戶提出的每個需求都要知道“為什么”,并判斷用戶提出的需求是否有充足的理由;
圖1 獲取用戶需求的活動
?、茖⒛欠N以“如何實現(xiàn)”的表述方式轉(zhuǎn)換為“實現(xiàn)什么”的方式,因為需求分析階段關(guān)注的目標(biāo)是“做什么”,而不是“怎么做”;
?、欠治鲇捎脩粜枨笱苌龅碾[含需求,并識別用戶沒有明確提出來的隱含需求(有可能是實現(xiàn)用戶需求的前提條件),這一點往往容易忽略掉,經(jīng)常因為對隱含需求考慮得不夠充分而引起需求變更。
● 需求分析人員將調(diào)研的用戶需求以適當(dāng)?shù)姆绞匠式唤o用戶方和開發(fā)方的相關(guān)人員。大家共同確認需求分析人員所提交的結(jié)果是否真實地反映了用戶的意圖。需求分析人員在這個任務(wù)中需要執(zhí)行下述活動:
⑴明確標(biāo)識出那些未確定的需求項(在需求分析初期往往有很多這樣的待定項);
?、剖剐枨蠓舷到y(tǒng)的整體目標(biāo);
?、潜WC需求項之間的一致性,解決需求項之間可能存在的沖突。
分析用戶需求
在很多情形下,分析用戶需求是與獲取用戶需求并行的,主要通過建立模型的方式來描述用戶的需求,為客戶、用戶、開發(fā)方等不同參與方提供一個交流的渠道。這些模型是對需求的抽象,以可視化的方式提供一個易于溝通的橋梁。用戶需求的分析與獲取用戶需求有著相似的步驟,區(qū)別在于分析用戶需求時使用模型來描述,以獲取用戶更明確的需求。分析用戶需求需要執(zhí)行下列活動:
● 以圖形表示的方式描述系統(tǒng)的整體結(jié)構(gòu),包括系統(tǒng)的邊界與接口;
● 通過原型、頁面流或其它方式向用戶提供可視化的界面,用戶可以對需求做出自己的評價;
● 系統(tǒng)可行性分析,需求實現(xiàn)的技術(shù)可行性、環(huán)境分析、費用分析、時間分析等;
● 以模型描述系統(tǒng)的功能項、數(shù)據(jù)實體、外部實體、實體之間的關(guān)系、實體之間的狀態(tài)轉(zhuǎn)換等方面的內(nèi)容。
圖2 DFD示意圖
用于需求建模的方法有很多種,最常用的包括數(shù)據(jù)流圖(DFD)、實體關(guān)系圖(ERD)和用例圖(Use Case)三種方式。DFD作為結(jié)構(gòu)化系統(tǒng)分析與設(shè)計的主要方法,已經(jīng)得到了廣泛的應(yīng)用,DFD尤其適用于MIS系統(tǒng)的表述。DFD使用四種基本元素來描述系統(tǒng)的行為,過程、實體、數(shù)據(jù)流和數(shù)據(jù)存儲。DFD方法直觀易懂,使用者可以方便地得到系統(tǒng)的邏輯模型和物理模型,但是從DFD圖中無法判斷活動的時序關(guān)系。圖2描述的是某個項目的DFD示意圖。
ERD方法用于描述系統(tǒng)實體間的對應(yīng)關(guān)系,需求分析階段使用ERD描述系統(tǒng)中實體的邏輯關(guān)系,在設(shè)計階段則使用ERD描述物理表之間的關(guān)系。需求分析階段使用ERD來描述現(xiàn)實世界中的對象。ERD只關(guān)注系統(tǒng)中數(shù)據(jù)間的關(guān)系,而缺乏對系統(tǒng)功能的描述。如果將ERD與DFD兩種方法相結(jié)合,則可以更準(zhǔn)確地描述系統(tǒng)的需求。
在面向?qū)ο蠓治龅姆椒ㄖ型ǔJ褂肬se Case來獲取軟件的需求。Use Case通過描述“系統(tǒng)”和“活動者”之間的交互來描述系統(tǒng)的行為。通過分解系統(tǒng)目標(biāo),Use Case描述活動者為了實現(xiàn)這些目標(biāo)而執(zhí)行的所有步驟。Use Case方法最主要的優(yōu)點,在于它是用戶導(dǎo)向的,用戶可以根據(jù)自己所對應(yīng)的Use Case來不斷細化自己的需求。此外,使用Use Case還可以方便地得到系統(tǒng)功能的測試用例。
編寫需求文檔
需求文檔可以使用自然語言或形式化語言來描述,還可以添加圖形的表述方式和模型表征的方式。需求文檔應(yīng)該包括用戶的所有需求(功能性需求和非功能性需求)。
評審需求文檔
需求文檔完成后,需要經(jīng)過正式評審,以便作為下一階段工作的基礎(chǔ)。一般的評審分為用戶評審和同行評審兩類。用戶和開發(fā)方對于軟件項目內(nèi)容的描述,是以需求規(guī)格說明書作為基礎(chǔ)的;用戶驗收的標(biāo)準(zhǔn)則是依據(jù)需求規(guī)格說明書中的內(nèi)容來制訂,所以評審需求文檔時用戶的意見是第一位的。而同行評審的目的,是在軟件項目初期發(fā)現(xiàn)那些潛在的缺陷或錯誤,避免這些錯誤和缺陷遺漏到項目的后續(xù)階段。
管理需求
圖1 需求變更流程
需求的變更是不可避免的,如何以可控的方式管理軟件的需求,對于項目的順利進行有著重要的意義。如果匆匆忙忙地完成用戶調(diào)研與分析,則往往意味著不穩(wěn)定的需求。所以需求管理要保證需求分析各個活動都得到了充分的執(zhí)行。對于需求變更的管理,則主要使用需求變更流程和需求跟蹤矩陣的管理方式。需求變更流程和需求跟蹤矩陣分別如圖1和圖2所示。
圖2 需求跟蹤矩陣
常見問題及建議
Q、客戶與最終用戶的區(qū)別是什么?
A、可以借助圖3來說明它們之間的區(qū)別。
圖3 需求獲取渠道示意圖
軟件需求來自系統(tǒng)工程與客戶兩個方面,其中客戶是主要的需求提供者(系統(tǒng)工程需求也來自于客戶)。客戶需要搜集其最終用戶的需求并考慮自身的需求,然后再提供給開發(fā)方。假如客戶并未去認真搜集最終用戶的需求,開發(fā)方便需要做到這一點,因為系統(tǒng)最終要滿足最終用戶的需求。
Q、如何進行用戶訪談?
A、首先,一定要事先確定訪談的目的和提綱。其次,因為用戶往往并不知道應(yīng)該提供哪些方面的需求,所以需要開發(fā)人員引導(dǎo)。
Q、用戶訪談內(nèi)容是什么?
A、首先,請用戶描述他們?nèi)绾瓮瓿勺约寒?dāng)前的工作,并與用戶一起抽象出一個工作流程或工作模型。然后,在得到用戶的認可后,向用戶解釋自己是怎樣來實現(xiàn)這些功能的,并說明哪些環(huán)節(jié)可以用自動化方式實現(xiàn)等。
Q、采用哪一種方式做需求分析最好?
A、不同的需求分析有不同的特點。還沒有哪一種方法可以完全替代別的方法,否則,現(xiàn)在就不會存在不同的需求建模方式了。一般來說,可以使用DFD+ERD來描述那些功能層次比較清晰的需求;而USE CASE則適于描述功能結(jié)構(gòu)復(fù)雜的需求。做需求分析的目的是為了建立需求的模型,不同的子系統(tǒng)有可能使用不同的建模方法。
Q、怎樣做原型,原型的目的是什么?
A、通常使用原型分析方法來幫助開發(fā)方進一步獲取用戶需求或讓用戶確認需求。開發(fā)方往往先向用戶提供一個可視界面作為原型,并在界面上布置必要的元素以演示用戶所需要的功能。可以使用第四代語言(例如Visual Basic、Delphi等)來快速生成用戶界面,也可以使用FrontPage等網(wǎng)頁制作工具來生成用戶可視的頁面流。
原型的目的往往是獲取需求。但有時也使用原型的方式來驗證關(guān)鍵技術(shù)或技術(shù)難點。對于技術(shù)原型,界面則往往被忽略掉。
lsnrctl start
sqlplus /nolog <<EOF
connect /as sysdba
startup
exit
exit
echo "oracle have started"
已經(jīng)打印了,晚上看一下,感覺不錯。
download
key words: jstl,struts,log4j
1.jstl
jstl的配置參考這篇文章:
http://foolmouse.cnblogs.com/archive/2006/04/20/380695.html
在iAS904服務(wù)器上的jstl的版本只能用1.0 的
"standard.jar和jstl.jar文件拷貝到\WEB-INF\lib\
"
2.struts
struts的配置主要是把 相關(guān)jar文件(struts.jar,struts-legacy.jar)拷貝到\WEB-INF\lib
,另外,struts需要用到一些apache的commons的包(commons-beanutils.jar,commons-collections-2.1.1.jar,commons-digester.jar)
3.log4j
log4j經(jīng)常有莫名其妙的問題,有時候能出來log有時候又不能出來log,最后把log4j.xml統(tǒng)一改為log4j.properties,暫時看好像有效果。
4。web.xml配置
















今天終于先在iAS里部署完了struts,下一步把hibernate放進去,上次部署過一次,沒有成功,據(jù)說是和toplink有點沖突。 知道的兄弟分享下oc4j中部署hibernate