本發(fā)明涉及Smart Rack及內(nèi)存領(lǐng)域,尤其涉及一種Smart Rack系統(tǒng)性能測試內(nèi)存優(yōu)化的方法。
背景技術(shù):
Smart Rack系統(tǒng)內(nèi)存管理機制分為物理內(nèi)存和虛擬內(nèi)存,物理內(nèi)存就是系統(tǒng)硬件提供的內(nèi)存大小,是真正的內(nèi)存,相對于物理內(nèi)存,在系統(tǒng)下還有一個虛擬內(nèi)存的概念,虛擬內(nèi)存就是為了滿足物理內(nèi)存的不足而提出的策略,它是利用磁盤空間虛擬出的一塊邏輯內(nèi)存,用作虛擬內(nèi)存的磁盤空間被稱為交換空間(Swap Space)。作為物理內(nèi)存的擴展,系統(tǒng)會在物理內(nèi)存不足時,使用交換分區(qū)的虛擬內(nèi)存,更詳細的說,就是內(nèi)核會將暫時不用的內(nèi)存塊信息寫到交換空間,這樣以來,物理內(nèi)存得到了釋放,這塊內(nèi)存就可以用于其它目的,當(dāng)需要用到原始的內(nèi)容時,這些信息會被重新從交換空間讀入物理內(nèi)存。系統(tǒng)的內(nèi)存管理采取的是分頁存取機制,為了保證物理內(nèi)存能得到充分的利用,內(nèi)核會在適當(dāng)?shù)臅r候?qū)⑽锢韮?nèi)存中不經(jīng)常使用的數(shù)據(jù)塊自動交換到虛擬內(nèi)存中,而將經(jīng)常使用的信息保留到物理內(nèi)存。系統(tǒng)會不時的進行頁面交換操作,以保持盡可能多的空閑物理內(nèi)存,即使并沒有什么事情需要內(nèi)存,系統(tǒng)也會交換出暫時不用的內(nèi)存頁面。這可以避免等待交換所需的時間。
系統(tǒng)進行頁面交換是有條件的,不是所有頁面在不用時都交換到虛擬內(nèi)存,系統(tǒng)內(nèi)核根據(jù)”最近最經(jīng)常使用“算法,僅僅將一些不經(jīng)常使用的頁面文件交換到虛擬內(nèi)存,一個占用很大內(nèi)存的進程運行時,需要耗費很多內(nèi)存資源,此時就會有一些不常用頁面文件被交換到虛擬內(nèi)存中,但后來這個占用很多內(nèi)存資源的進程結(jié)束并釋放了很多內(nèi)存時,剛才被交換出去的頁面 文件并不會自動的交換進物理內(nèi)存,除非有這個必要,那么此刻系統(tǒng)物理內(nèi)存就會空閑很多,同時交換空間也在被使用。
交換空間的頁面在使用時會首先被交換到物理內(nèi)存,如果此時沒有足夠的物理內(nèi)存來容納這些頁 面,它們又會被馬上交換出去,如此以來,虛擬內(nèi)存中可能沒有足夠空間來存儲這些交換頁面,最終會導(dǎo)致系統(tǒng)出現(xiàn)假死機、服務(wù)異常等問題,系統(tǒng)雖然可以在一段時間內(nèi)自行恢復(fù),但是恢復(fù)后的系統(tǒng)已經(jīng)基本不可用了。因此合理規(guī)劃和設(shè)計Smart Rack內(nèi)存的使用,是非常重要的。
在Smart Rack性能測試時,往往是多個壓力工具同時進行壓測,往往會遇到上面的問題,其中DD進行硬盤壓測會消耗掉幾乎所有的內(nèi)存資源,造成其他任務(wù)內(nèi)存資源不足出現(xiàn)任務(wù)執(zhí)行慢甚至測試停止的事件發(fā)生。
技術(shù)實現(xiàn)要素:
為了解決以上問題,本發(fā)明提出了一種Smart Rack系統(tǒng)性能測試內(nèi)存優(yōu)化的方法。
Smart Rack系統(tǒng)性能測試內(nèi)存優(yōu)化主要通過定期規(guī)律的偵測并釋放和通過調(diào)低內(nèi)存占用大的DD進程的優(yōu)先級完成內(nèi)存釋放。
本發(fā)明的技術(shù)方案是:
1、在執(zhí)行DD時每間隔30秒完成一次內(nèi)存釋放。
在執(zhí)行硬盤DD讀寫時每間隔30秒完成一次內(nèi)存釋放,通過定期規(guī)律的偵測并釋放從而避免內(nèi)存過多被磁盤消耗導(dǎo)致內(nèi)存資源不足,在后臺執(zhí)行yesdd測試的時候,使用for 循環(huán)定時(每次執(zhí)行完畢sleep約30秒)執(zhí)行以下兩條命令即可釋放內(nèi)存。
sync #把內(nèi)存中的緩存寫入硬盤,保證清理內(nèi)存不丟失重要數(shù)據(jù)
echo 1 > /proc/sys/vm/drop_caches #釋放內(nèi)存
具體腳本如下:
for ((i=0; i<2880; ++i)) do sync echo 1 > /proc/sys/vm/drop_caches
Sleep 30 done
2、調(diào)低內(nèi)存占用大的進程的優(yōu)先級完成內(nèi)存釋放。
通過調(diào)低內(nèi)存占用大的DD進程的優(yōu)先級完成內(nèi)存釋放,由renice 完成DD磁盤讀寫的系統(tǒng)進程優(yōu)先等級的調(diào)低,通過系統(tǒng)核心調(diào)度完成資源有效利用和內(nèi)存的釋放。 #renice +10 `ps aux | awk ’{ if ($3 > 0.8 && id -u $1 > 500) print $2}’`其中用到ps獲取進程信息,其實ps中%CPU一列的意義是進程實際占有CPU時間和他存活時間的比值,這個值能反應(yīng)進程對CPU的消耗,但不能準確反應(yīng) 進程所占CPU時間占整個系統(tǒng)CPU的百分比。而top輸出中的%CPU這一列正是進程所占CPU時間占整個系統(tǒng)CPU的百分比,用于限制進程CPU占用 率更加合理,同時%MEM一列還反應(yīng)了進程占用內(nèi)存的百分比,能夠用于限制進程內(nèi)存占用率。具體腳本如下:#!/bin/shPIDS=`top -bn 1 | grep "^ *[1-9]" | awk ’{ if($9 > 50 || $10 > 25 && id -u $2 > 500) print $1}’` for PID in $PIDS do renice +10 $PID echo "renice +10 $PID" done 將腳本放到cron中運行,每分鐘檢查一次,調(diào)整占用50%以上CPU或25%內(nèi)存的進程的nice值,從而使這樣的進程優(yōu)先級變低被系統(tǒng)調(diào)度而釋放內(nèi)存,同時會向root發(fā)郵件提示該進程被調(diào)整過。#crontab -e * * * * * limit.sh
本發(fā)明的有益效果是:
測試內(nèi)存優(yōu)化,在性能測試時多個壓力工具同時進行壓測,避免了DD進行硬盤壓測消耗掉幾乎所有的內(nèi)存資源,造成其他任務(wù)內(nèi)存資源不足出現(xiàn)任務(wù)執(zhí)行慢甚至測試停止的事件發(fā)生,大大提升了Smart Rack系統(tǒng)性能測試效率及均衡性。
具體實施方式
下面對本發(fā)明的內(nèi)容進行更加詳細的闡述:
Smart Rack系統(tǒng)性能測試內(nèi)存優(yōu)化的方法包括兩大方面,主要通過定期規(guī)律的偵測并釋放和通過調(diào)低內(nèi)存占用大的DD進程的優(yōu)先級完成內(nèi)存釋放。
首先,在執(zhí)行硬盤DD讀寫時每間隔30秒完成一次內(nèi)存釋放,通過定期規(guī)律的偵測并釋放從而避免內(nèi)存過多被磁盤消耗導(dǎo)致內(nèi)存資源不足,使用for 循環(huán)定時執(zhí)行同步操作sync和內(nèi)存釋放命令echo 1 > /proc/sys/vm/drop_caches。
其次,通過調(diào)低內(nèi)存占用大的DD進程的優(yōu)先級完成內(nèi)存釋放,由renice 完成DD磁盤讀寫的系統(tǒng)進程優(yōu)先等級的調(diào)低,通過系統(tǒng)核心調(diào)度完成資源有效利用和內(nèi)存的釋放。通過在cron中運行,每分鐘檢查一次,調(diào)整占用50%以上CPU或25%內(nèi)存的進程的nice值,從而使進程優(yōu)先級變低而被系統(tǒng)調(diào)度釋放內(nèi)存。