<ruby id="h6500"><table id="h6500"></table></ruby>
    1. <ruby id="h6500"><video id="h6500"></video></ruby>
          1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>
            • 軟件測試技術(shù)
            • 軟件測試博客
            • 軟件測試視頻
            • 開(kāi)源軟件測試技術(shù)
            • 軟件測試論壇
            • 軟件測試沙龍
            • 軟件測試資料下載
            • 軟件測試雜志
            • 軟件測試人才招聘
              暫時(shí)沒(méi)有公告

            字號: | 推薦給好友 上一篇 | 下一篇

            性能測試中如何檢查內存泄露

            發(fā)布: 2011-5-17 18:30 | 作者: 網(wǎng)絡(luò )轉載 | 來(lái)源: 領(lǐng)測軟件測試網(wǎng)采編 | 查看: 111次 | 進(jìn)入軟件測試論壇討論

            領(lǐng)測軟件測試網(wǎng)

              關(guān)于內存泄漏,相信大家都不陌生,壓力測試中經(jīng)常會(huì )出現,本人最近在做

              一個(gè)壓力測試中就著(zhù)實(shí)體會(huì )了一下,上來(lái)分享分享。

              內存泄露是指程序中間動(dòng)態(tài)分配了內存,但是在程序結束時(shí)沒(méi)有釋放這部分

              內存,從而造成那一部分內存不可用的情況,重起計算機可以解決,但是也有可

              能再次發(fā)生內存泄露,內存泄露和硬件沒(méi)有關(guān)系,它是由軟件設計缺陷引起的。

              以發(fā)生的方式來(lái)分類(lèi),內存泄漏可以分為4 類(lèi):

              1.常發(fā)性?xún)却嫘孤。發(fā)生內存泄漏的代碼會(huì )被多次執行到,每次被執行的時(shí)

              候都會(huì )導致一塊內存泄漏。

              2.偶發(fā)性?xún)却嫘孤。發(fā)生內存泄漏的代碼只有在某些特定環(huán)境或操作過(guò)程下

              才會(huì )發(fā)生。常發(fā)性和偶發(fā)性是相對的。對于特定的環(huán)境,偶發(fā)性的也許就變成了

              常發(fā)性的。所以測試環(huán)境和測試方法對檢測內存泄漏至關(guān)重要。

              3.一次性?xún)却嫘孤。發(fā)生內存泄漏的代碼只會(huì )被執行一次,或者由于算法上

              的缺陷,導致總會(huì )有一塊僅且一塊內存發(fā)生泄漏。比如,在類(lèi)的構造函數中分配

              內存,在析構函數中卻沒(méi)有釋放該內存,所以?xún)却嫘孤┲粫?huì )發(fā)生一次。

              4.隱式內存泄漏。程序在運行過(guò)程中不停的分配內存,但是直到結束的時(shí)候

              才釋放內存。嚴格的說(shuō)這里并沒(méi)有發(fā)生內存泄漏,因為最終程序釋放了所有申請

              的內存。但是對于一個(gè)服務(wù)器程序,需要運行幾天,幾周甚至幾個(gè)月,不及時(shí)釋

              放內存也可能導致最終耗盡系統的所有內存。所以,我們稱(chēng)這類(lèi)內存泄漏為隱式

              內存泄漏。

              本人最近就在對一個(gè)Http應用進(jìn)行壓力測試,發(fā)現被測試的對象進(jìn)程在并發(fā)

              100 時(shí)內存占用達到20% ,當壓力到達1000的時(shí)候,內存就持續上升,達到60% ,

              最后壓力結束后,內存仍舊停留在60% 的使用率,然后重啟了系統發(fā)現內存已經(jīng)

              恢復了正常,于是在第二輪測試時(shí)再次不斷加壓,同時(shí)關(guān)注性能計數器中的如下

              指標:

              Memory\ Available Bytes 是指剩余的可用物理內存,單位是兆字節(參考

              值:>=10% )。表明進(jìn)程當前可使用的內存字節數。

              Memory\ Pages/sec 是表明由于硬件頁(yè)面錯誤而從磁盤(pán)取出的頁(yè)面數,或由

              于頁(yè)面錯誤而寫(xiě)入磁盤(pán)以釋放工作集空間的頁(yè)面數。

              Process\Private Bytes 是指當前進(jìn)程中運行的私有內存,如果此內存不斷

              攀升,表示當前存在的內存泄漏,一般情況如果資源合理利用的話(huà),該指標值波

              動(dòng)比較平穩。

              通過(guò)有效的監控以上計數器可以方便我們判斷內存泄漏問(wèn)題,同時(shí)需要開(kāi)發(fā)

              人員配合進(jìn)行內存查找,定位分析哪些程序存在內存泄漏。最后通過(guò)開(kāi)發(fā)人員的

              調試,問(wèn)題很快定位了,確實(shí)有程序沒(méi)有釋放內存,最后再次施壓的結果是內存

              持續在一個(gè)值上下波動(dòng),一般參考值在20% 左右,不過(guò)這個(gè)根據具體的內存空間

              來(lái)定,當然如果可以更小最好了,表明內存合理利用和分配。當然了,檢測內存

              泄漏的方式很多,LoadRunner施壓是可以結合響應時(shí)間的曲線(xiàn)圖來(lái)監控也可。

              從用戶(hù)使用程序的角度來(lái)看,內存泄漏本身不會(huì )產(chǎn)生什么危害,作為一般的

              用戶(hù),根本感覺(jué)不到內存泄漏的存在。真正有危害的是內存泄漏的堆積,這會(huì )最

              終消耗盡系統所有的內存。從這個(gè)角度來(lái)說(shuō),一次性?xún)却嫘孤┎](méi)有什么危害,

              因為它不會(huì )堆積,而隱式內存泄漏危害性則非常大,因為較之于常發(fā)性和偶發(fā)性

              內存泄漏它更難被檢測到。對于開(kāi)發(fā)人員來(lái)說(shuō),熟悉java、C++ 等應該都了解,

              通常我們定義一些變量,或者實(shí)例化一些對象,比較常用就是new 方法,然后通

              過(guò)delete方法進(jìn)行銷(xiāo)毀,如果定義的東西比較多了,也就是想一天申請的內存空

              間就多了,如果一旦沒(méi)有合理的管理和消化,就會(huì )忘記最后做一些內存回收的處

              理,導致一些變量和實(shí)例對象沒(méi)有處理掉,最后在程序運行一段時(shí)間之后就發(fā)現

              我們的內存不斷在攀升,長(cháng)時(shí)間下來(lái)積累了就占用了大量的內存空間,導致其他

              進(jìn)程無(wú)法獲取到內存資源,無(wú)法去處理其他應用,最后服務(wù)就shut down ,等等

              之類(lèi)情況都比較多見(jiàn),不過(guò)這些也基本取決于開(kāi)發(fā)人員的經(jīng)驗所致,在程序編寫(xiě)

              過(guò)程中合理的使用和管理內存是非常重要的,因為此類(lèi)問(wèn)題一般只有在性能測試

              中體現出來(lái),功能測試是完全沒(méi)有表現的跡象。

              其實(shí),內存泄漏問(wèn)題多半在壓力測試中出現也是源于程序編寫(xiě)過(guò)程中沒(méi)有規

              范化管理所導致,開(kāi)發(fā)人員需要結合內存監測工具來(lái)有效監控自己的程序,這樣

              才會(huì )避免這些個(gè)低級的瓶頸出現,所以說(shuō)性能測試只是為程序提供優(yōu)化建議,而

              不應該成為幫助開(kāi)發(fā)人員調試程序的一種手段。

            延伸閱讀

            文章來(lái)源于領(lǐng)測軟件測試網(wǎng) http://kjueaiud.com/


            關(guān)于領(lǐng)測軟件測試網(wǎng) | 領(lǐng)測軟件測試網(wǎng)合作伙伴 | 廣告服務(wù) | 投稿指南 | 聯(lián)系我們 | 網(wǎng)站地圖 | 友情鏈接
            版權所有(C) 2003-2010 TestAge(領(lǐng)測軟件測試網(wǎng))|領(lǐng)測國際科技(北京)有限公司|軟件測試工程師培訓網(wǎng) All Rights Reserved
            北京市海淀區中關(guān)村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
            技術(shù)支持和業(yè)務(wù)聯(lián)系:info@testage.com.cn 電話(huà):010-51297073

            軟件測試 | 領(lǐng)測國際ISTQBISTQB官網(wǎng)TMMiTMMi認證國際軟件測試工程師認證領(lǐng)測軟件測試網(wǎng)

            老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月
              <ruby id="h6500"><table id="h6500"></table></ruby>
              1. <ruby id="h6500"><video id="h6500"></video></ruby>
                    1. <progress id="h6500"><u id="h6500"><form id="h6500"></form></u></progress>