Windows內存性能分析(一)內存泄漏


判斷內存性能表現主要是為了解決如下兩個問題:

1. 當前web應用是否存在內存泄漏,如果有,問題的程度有多大?

2. 如果web應用的代碼無法進一步改進,當前web應用所在的服務器是否存在內存上的瓶頸,是否需要增加內存數量來提高內存?

 

一、內存泄漏及判斷

(一)、什么是內存泄漏?

程序都需要裝載在內存中才能運行,退出的時候將內存返還給系統,有兩種返還方式:

1. 自行返還: 程序員編寫代碼的時候返還,如C++代碼。

2. 自動返還:   由支持程序運行的服務平台定期自動返還給系統,如Java、.Net等。

事實上,無論以上哪種方式,程序都有可能未把自己使用的內存返回給系統,從而導致之后的程序無法再使用這些內存,這些應該返還而沒有返還的內存就像從管道漏掉了一樣。

因為web程序都是持續不斷的運行,如果代碼存在內存泄漏的問題,泄漏的內存就會越來越多,越來越嚴重。導致系統可用的內存資源越來越少,系統性能越來越差,用戶感受到的響應時間越來越慢。

 

(二)、性能計數器與內存泄漏

關注Process(進程)性能對象的如下幾個計數器:

Handle Count(句柄數量): 進程的每個線程當前打開的句柄總數。

Thread Count(線程數量):線程的總數。

Virtual Bytes(虛擬內存字節數): 見后面關於虛擬內存的說明。

Working Set(工作集): 和當前進程有關的那一部分物理內存。

Private Byte(私有數據字節數): 此進程無法與其他進程共享的字節數量。

虛擬內存: 計算機內存有限,需要使用內存的程序非常多,大家都把需要的代碼和數據全部放在內存中是吃不消的。所以操作系統在磁盤上也為程序開辟一塊存儲的地盤,當作內存使用,這就是虛擬內存。

可能存在內存泄漏的情況:

1. 一般來說:Virtual Bytes 應該遠大於Working Set。如果:Virtual Bytes 增長較快,Working Set增長較少, 則可能存在內存泄漏的情況。

2. 以上所有性能計數器在測試期間數值持續增長,而測試停止后仍然維持在高水平,則可能存在內存泄漏。

 

(三)、使用工具軟件測試代碼是否存在內存泄漏情況

如JProbe套件、Rational Purify、Leakdiag、BoundsChecker和CLRProfiler等軟件可以在代碼不那么龐大的時候就進行單元測試、組件測試,不讓問題積累起來。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM