版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、 AIX 進(jìn)程內(nèi)存分配與回收策略及應(yīng)用開發(fā)建議 目錄1. AIX 內(nèi)存分配回收策略1.1 內(nèi)存分配觀察示例遞增分配1.2 內(nèi)存分配觀察示例遞減分配1.3 針對長運(yùn)行程序的空閑內(nèi)存回收1.4 mallopt 示例 11.5 mallopt 示例 21.6 內(nèi)存回收 disclaim 策略1.7 disclaim/disclaim64 代碼示例1.8 內(nèi)存碎片對內(nèi)存回收的影響1.9 通用建議2. 內(nèi)存監(jiān)控2.1 觀察系統(tǒng)中內(nèi)存占用最高的進(jìn)程2.2 尋找內(nèi)存持續(xù)增長的進(jìn)程2.3 如何通過共享內(nèi)存 ID 對應(yīng)關(guān)聯(lián)到該共享內(nèi)存的進(jìn)程2.4 如何獲取 AIX Kernel 的內(nèi)存使用率2.5 如何判斷系統(tǒng)
2、是否存在內(nèi)存不足3. 應(yīng)用開發(fā)工具3.1 dbx 使用以及 coredump 定位3.2 內(nèi)存非法使用檢查3.3 內(nèi)存泄漏檢查(report_allocations)3.4 內(nèi)存泄漏檢查示例3.5 proctools 介紹3.6 probevue 介紹3.7 如何將 C 文件與匯編文件對應(yīng)1.AIX 內(nèi)存分配回收策略一般而言, 系統(tǒng)會(huì)直接在進(jìn)程空間的free列表中維護(hù)其free釋放的內(nèi)存, 以供后續(xù)新的分配直接使用,這樣可以提高分配效率,不需要每次內(nèi)存分配都經(jīng)過系統(tǒng)內(nèi)核。進(jìn)程退出后,系統(tǒng)會(huì)回收該進(jìn)程占用的全部內(nèi)存。注:選擇不同的分配策略時(shí),對空閑內(nèi)存空間的管理策略會(huì)有所差異。例如默認(rèn)的管理結(jié)構(gòu)
3、是cartesian樹;而采用watson分配算法時(shí),使用的管理結(jié)構(gòu)是紅黑樹。Cartesian笛卡爾樹參考結(jié)構(gòu):1.1 內(nèi)存分配觀察示例遞增分配進(jìn)程的詳細(xì)內(nèi)存分配情況可以使用svmon來觀察,參考如下示例。需要注意,為方便svmon觀察,示例代碼需要在malloc之后調(diào)用memset進(jìn)行初始化;因?yàn)椴僮飨到y(tǒng)實(shí)際上并不會(huì)立即對已申請但尚未訪問到的內(nèi)容分配實(shí)際存儲(chǔ)空間, 而是推遲到第一次訪問時(shí)才會(huì)實(shí)際分配-這即是缺頁機(jī)制的工作原理。如下是一個(gè)申請空間遞增的應(yīng)用,分配/釋放大小為2MB-4MB-8MB-16MB, 則通過各階段的svmon可以看到, 內(nèi)存頁面會(huì)持續(xù)增長, 從2MB一直增加到16MB
4、 (注意 不是2MB+4MB+.+16MB=30MB) 。Malloc分配2MB,未初始化時(shí):Address Range為0512頁,即代表5124096=2MB虛擬地址空間。Virtual取值為2,表示該空間尚未實(shí)際分配。初始化后:Virtual取值為513,表明虛存空間已經(jīng)實(shí)際分配。釋放之前申請的2MB,重新 申請 4MB 并初始化后:10244096=4MB,此前釋放的512頁虛擬地址空間被重復(fù)利用。釋放之前申請的4MB,重新 申請8 8 MB 并初始化后:此前釋放的1024頁虛擬地址空間被重復(fù)利用。釋放之前申請的8MB,重新 申請 16 MB 并初始化后:1.2 內(nèi)存分配觀察示例遞減分
5、配如示例, 如果是一個(gè)申請空間遞減的應(yīng)用, 分配/釋放大小為16MB-8MB-4MB-2MB, 通過各階段的svmon(svmon -nrP )可以看到,內(nèi)存頁面始終維持在16MB。Malloc分配16MB,未初始化時(shí):Address Range為04096頁,即代表40964096=16MB虛擬地址空間。Inuse/Virtual取值為2,表示該空間尚未實(shí)際分配。初始化后:Virtual=4097頁, 虛擬內(nèi)存已經(jīng)實(shí)際分配。釋放之前申請的16MB,重新 申請8 8 MB 并初始化后:釋放之前申請的8MB,重新 申請4 4 MB 并初始化后:釋放之前申請的4MB,重新 申請2 2 MB 并初始
6、化后:可以看到svmon輸出結(jié)果沒有變化;原因是雖然應(yīng)用調(diào)用了free釋放了16MB內(nèi)存,但系統(tǒng)的處理策略是將該內(nèi)存置于進(jìn)程自身的空間塊樹中管理。下一個(gè)8MB分配,實(shí)際上是直接從進(jìn)程已有的16MB空閑塊中獲取的。但對系統(tǒng)而言,進(jìn)程管理的空閑塊樹也對應(yīng)為該進(jìn)程的內(nèi)存消耗,所以其內(nèi)存占用沒有變化。測試代碼:1.3 針對長運(yùn)行程序的空閑內(nèi)存回收由于上面介紹的內(nèi)存使用方式,一個(gè)常見的現(xiàn)象是,對于長運(yùn)行進(jìn)程,其占用的私有內(nèi)存大小等同于最高峰時(shí)間的內(nèi)存大小。這個(gè)現(xiàn)象一般而言,對系統(tǒng)正常運(yùn)行及性能的影響很小。因?yàn)槿绻到y(tǒng)空閑內(nèi)存足夠,這個(gè)問題不存在。而如果內(nèi)存不足,由于進(jìn)程本身的空閑塊列表沒有被引用,根據(jù)換
7、頁算法,在系統(tǒng)缺頁(即可用內(nèi)存不足)時(shí),很容易被換出。但如果應(yīng)用進(jìn)程希望對其空間內(nèi)存塊進(jìn)行更自主的管理,可以使用mallopt接口。例如,對長運(yùn)行的程序,定期在其閑時(shí)(例如每周日凌晨業(yè)務(wù)量極低時(shí)),調(diào)用 mallopt(M_DISCLAIM, 0)釋放進(jìn)程私有空間的free列表。這樣可以避免在程序本身沒有內(nèi)存泄漏的情況下,因業(yè)務(wù)高峰期大量的內(nèi)存申請?jiān)斐傻倪M(jìn)程私有free list增長,而使得進(jìn)程內(nèi)存占用過大。實(shí)現(xiàn)起來也相當(dāng)簡單(參考如下 mallopt 示例)。參考mallopt函數(shù)的幫助信息:1.4 mallopt 示例 11.5 mallopt 示例 21.6 內(nèi)存回收 disclaim
8、策略如果需要設(shè)置使得系統(tǒng)在應(yīng)用調(diào)用 free 之后,即回收其內(nèi)存,可以在程序啟動(dòng)前設(shè)置環(huán)境變量(這兩種方式都可能對程序性能有很大影響):PSALLOC=early或者M(jìn)ALLOCOPTIONS=disclaim由于PSALLOC=early實(shí)際上意味著設(shè)置MALLOCOPTIONS=disclaim,且提前分配Paging Space;所以其性能開銷還要高于MALLOCOPTIONS=disclaim。但這種機(jī)制能夠避免Paging Space耗盡時(shí),進(jìn)程被系統(tǒng)kill掉的可能;詳情可以通過在如下aix infocenter網(wǎng)站查詢PSALLOC獲取。注:老的MALLOCTYPE=3.1也有此
9、效果,但該分配策略往往性能一般,且只適用于32位程序,現(xiàn)在的系統(tǒng)一般不使用了。在設(shè)置環(huán)境變量MALLOCTYPE=watson的情況下,mallopt(M_DISCLAIM,0)無效;mallopt(M_DISCLAIM,0)只對系統(tǒng)默認(rèn)的分配策略(即cartesian樹分配算法)有效。也可以在代碼中直接用disclaim調(diào)用。注意 disclaim 調(diào)用需要在 free /delete 之前;超過 4G 的內(nèi)存塊需要使用 disclaim64 函數(shù)。1.7 disclaim/disclaim64 代碼示例1.8 內(nèi)存碎片對內(nèi)存回收的影響需要注意的是,上面各種釋放進(jìn)程私有空閑內(nèi)存列表的方法,在
10、應(yīng)用出現(xiàn)嚴(yán)重內(nèi)存碎片的情況下,都存在不足。這種情況需要實(shí)際應(yīng)用程序通過合理設(shè)計(jì),避免嚴(yán)重內(nèi)存碎片。例如一些緩存數(shù)據(jù)庫表的數(shù)據(jù)結(jié)構(gòu),可能涉及大量記錄的增刪,且一般不會(huì)一次性全部刪除,類似這種情況可能最終造成嚴(yán)重內(nèi)存碎片;從而使得進(jìn)程私有空間無法有效回收, 只能存在于進(jìn)程自身的私有free list中。舉一個(gè)極端的例子,一個(gè)進(jìn)程申請了4000頁內(nèi)存,但釋放時(shí),恰好在每個(gè)內(nèi)存頁上保留了一個(gè)16字節(jié)的數(shù)據(jù)結(jié)構(gòu)(其他空間均釋放)。這樣進(jìn)程的私有內(nèi)存空間實(shí)際上無法進(jìn)行收縮。因?yàn)閙allopt(M_DISCLAIM, 0)和disclaim等方法都需要以多個(gè)頁面為單位進(jìn)行實(shí)際回收。但如果應(yīng)用設(shè)計(jì)良好,一般可
11、以避免這類問題:例如一些事務(wù)性的應(yīng)用,在事務(wù)處理開始時(shí),大量申請內(nèi)存;在處理結(jié)束后, 就將這些內(nèi)存釋放。這種情況下, 出現(xiàn)大量內(nèi)存碎片的概率較低。1.9 通用建議一般對內(nèi)存受限程序的建議是:a. 盡量使用malloc而不是callocb. 提高引用局部性,即僅在數(shù)據(jù)結(jié)構(gòu)馬上要被使用前,對其進(jìn)行初始化。c. 對大的數(shù)據(jù)結(jié)構(gòu),如果使用一次后,后續(xù)不再使用,建議調(diào)用disclaim回收其分配的內(nèi)存。參考:/infocenter/aix/v6r1/index.jsp性能管理和調(diào)整 性能管理 性能規(guī)劃和實(shí)現(xiàn) 有效的程序設(shè)計(jì)和實(shí)現(xiàn) 內(nèi)存限制程序:要將數(shù)據(jù)工作集減至最小,請嘗試集中常用數(shù)據(jù)以及避免對虛擬存儲(chǔ)
12、器頁面不必要的引用。特別是:i. 用 malloc() 或 calloc() 子例程來僅請求實(shí)際需要的空間大小。當(dāng)實(shí)際情況只使用數(shù)組的一小部分時(shí),切勿請求然后初始化最大的數(shù)組。當(dāng)您得到一個(gè)新頁面用來初始化數(shù)組元素時(shí),您實(shí)際上是強(qiáng)制 VMM 從別處竊取一個(gè)實(shí)內(nèi)存頁面。隨后, 當(dāng)擁有該頁面的進(jìn)程嘗試再次訪問它時(shí),會(huì)造成缺頁故障。malloc() 和 calloc() 子例程的差異不僅僅在接口上。ii. 因?yàn)?calloc() 子例程將分配的存儲(chǔ)器置零, 它與每一個(gè)分配的頁面相關(guān), 而 malloc() 子例程只與第一個(gè)頁面相關(guān)。如果您用 calloc() 子例程分配一大塊區(qū)域, 然后最初只使用一小
13、部分,那么您對系統(tǒng)施加了不必要的負(fù)載。不僅這些頁面必須初始化;而且如果它們的實(shí)內(nèi)存頁面被系統(tǒng)回收(因?yàn)橄到y(tǒng)調(diào)頁), 那么已初始化但從未使用的頁面必須寫出到調(diào)頁空間。這種情況浪費(fèi) I/O 和調(diào)頁空間。iii. 大結(jié)構(gòu)(如緩沖區(qū))的鏈表可以引起類似的問題。如果您的程序執(zhí)行大量尋找某個(gè)特定關(guān)鍵字的鏈?zhǔn)礁?,請考慮保持鏈接指針和關(guān)鍵字與數(shù)據(jù)分離或使用散列表方法來代替。iv. 引用局部性也意味著時(shí)間上的局部性, 而不僅僅是地址空間上。僅在使用之前初始化數(shù)據(jù)結(jié)構(gòu)(如果使用的話)。在重負(fù)載系統(tǒng)中,在初始化和使用之間長時(shí)間駐留的數(shù)據(jù)結(jié)構(gòu)有幀被竊取(因?yàn)橄到y(tǒng)調(diào)頁)的危險(xiǎn)。然后您的程序就會(huì)在開始使用數(shù)據(jù)結(jié)構(gòu)時(shí)發(fā)生
14、不必要的缺頁故障。v. 同樣,如果早先使用一個(gè)大結(jié)構(gòu),然后與程序剩余部分無關(guān)聯(lián),它應(yīng)該被釋放。使用 free()子例程來釋放由 malloc() 或 calloc() 子例程分配的空間是不夠的。free() 子例程僅僅釋放結(jié)構(gòu)占用的地址范圍。要釋放實(shí)內(nèi)存和調(diào)頁空間,也可使用 disclaim() 子例程來放棄空間。對disclaim() 的調(diào)用應(yīng)該在調(diào)用 free() 之前進(jìn)行。2. 內(nèi)存監(jiān)控2.1 觀察系統(tǒng)中內(nèi)存占用最高的進(jìn)程后臺運(yùn)行 3 個(gè) nmem64 進(jìn)程:./nmem64 -m 2048 -s 3000 -z 80 &按進(jìn)程使用的虛擬內(nèi)存進(jìn)行排序,顯示占用最高的前三項(xiàng):顯示虛擬內(nèi)存占
15、用最高的 3 個(gè)進(jìn)程的詳細(xì)的內(nèi)存段分布信息,如下:可以看到,消耗最多虛擬內(nèi)存的段都是 nmem64 進(jìn)程的數(shù)據(jù)段。2.2 尋找內(nèi)存持續(xù)增長的進(jìn)程可以使用 ps vg 記錄當(dāng)前系統(tǒng)中各進(jìn)程的內(nèi)存消耗情況,然后通過比較多次 ps vg 的結(jié)果來判斷是否存在一些進(jìn)程有持續(xù)的內(nèi)存增長。說明:進(jìn)程存在持續(xù)內(nèi)存增長并不一定意味著出現(xiàn)了內(nèi)存泄漏。由于 AIX 內(nèi)存分配采用了訪問時(shí)分配的策略, 進(jìn)程申請大量內(nèi)存時(shí)系統(tǒng)并不會(huì)第一時(shí)間分配內(nèi)存, 而是在進(jìn)程使用過程中實(shí)際訪問時(shí)才進(jìn)行分配。由于這種分配策略, 進(jìn)程在啟動(dòng)初期可能存在內(nèi)存持續(xù)增長的可能 (例如數(shù)據(jù)庫緩存需要一定時(shí)間才能完全填充) ;但其增長曲線應(yīng)該是收
16、斂到具體值的。測試腳本如下:2.3 如何通過共享內(nèi)存 ID 對應(yīng)關(guān)聯(lián)到該共享內(nèi)存的進(jìn)程在 AIX 系統(tǒng)層面,只要給定共享內(nèi)存 id,就可以獲取 attach 該共享內(nèi)存的進(jìn)程列表,方法如下:可以根據(jù)其共享段 SID,獲得相應(yīng)的關(guān)聯(lián)進(jìn)程 pid,如下。注意 ipcs 上看 NATTACH=53,即有 53 個(gè)進(jìn)程 attach 到該共享內(nèi)存,因此 svmon 結(jié)果中,進(jìn)程列表部分對應(yīng)列出了 53 個(gè)進(jìn)程 pid。根據(jù)相應(yīng)的 pid 可以獲取進(jìn)程的具體信息:2.4 如何獲取 AIX Kernel 的內(nèi)存使用率kernel大部分內(nèi)存占用采用跟普通進(jìn)程一樣的內(nèi)存段方式組織, 比如kernel heap
17、(這部分內(nèi)存消耗包含文件系統(tǒng)的元數(shù)據(jù)、內(nèi)核擴(kuò)展、第三方驅(qū)動(dòng)等等), 網(wǎng)絡(luò)buffer,磁盤管理LVM buffer占用, 以及一些RAS特性的buffer占用, 例如light-weight memory trace buffers, component tracebuffers等等。這部分都可以通過svmon -Ss 查詢出( 注意這條命令阻塞時(shí)間較長)。少部分采用非段方式組織的主要是AIX內(nèi)存管理的元數(shù)據(jù)如頁表之類??梢酝ㄟ^ perfpmr.sh - - x memdetails.sh 獲取kernel內(nèi)存占用的整體情況,內(nèi)存分布將輸出在中。也可以通過如下方法直接觀察 AIX Kernel
18、 內(nèi)存使用情況:1. 觀察AIX內(nèi)存使用的命令(基于kdb,建議僅在測試環(huán)境驗(yàn)證)2. 建議從我們目前實(shí)驗(yàn)的幾個(gè)系統(tǒng)看,超過100G的大分區(qū),一般內(nèi)核的內(nèi)存占用實(shí)際都在 5%以下。如果客戶環(huán)境中采用了較多第三方驅(qū)動(dòng)或組件,比例可能偏高一些,建議搭建環(huán)境驗(yàn)證一下。此外, 如果系統(tǒng)中存在超大的JFS2文件系統(tǒng), 包含大量的巨型文件 (比如單個(gè)文件數(shù)十、 數(shù)百GB) ,或者有數(shù)以十萬、百萬計(jì)的小文件;則可能觀察到較高的JFS2 元數(shù)據(jù)緩存占用,或者inode緩存占用。這部分內(nèi)存消耗也會(huì)計(jì)入AIX kernel,可以通過 cat/proc/sys/fs/jfs2/memory_usage觀察到:# c
19、at /proc/sy s/fs/jfs2/memory_usagemetadata cache: 38928384inode cache: 307888128total: 346816512另,文件系統(tǒng)的元數(shù)據(jù)緩存和inode緩存可以通過如下ioo參數(shù)控制這兩個(gè)參數(shù)是比例系數(shù),設(shè)置為400時(shí),元數(shù)據(jù)和inode緩存最多能占據(jù)系統(tǒng)內(nèi)存的16%左右。一般而言,如果分區(qū)內(nèi)存不大或者元數(shù)據(jù)相關(guān)操作不多,使用默認(rèn)值(AIX7.1為200)通常是可行的。但如果分區(qū)內(nèi)存足夠大(比如100GB以上),元數(shù)據(jù)操作較多,則可以考慮將這兩個(gè)參數(shù)設(shè)置為100,可以使得元數(shù)據(jù)和inode緩存最多占用系統(tǒng)內(nèi)存的比例下調(diào)
20、至4%左右。2.5 如何判斷系統(tǒng)是否存在內(nèi)存不足預(yù)期的內(nèi)存需求是 virtual 頁面數(shù)加上文件頁面數(shù)(包括 pers 和 clnt) ,如果這兩者之和大于實(shí)際配置的內(nèi)存頁面數(shù),即可認(rèn)為存在內(nèi)存不足,如下示例:AIX 6.1 TL2版本之后,加入了一個(gè)新的available列:The available means number of bytes of memory that can be used without paging working storage.available計(jì)算大致的公式是:available = free + numperm - min(numperm,minperm)
21、- minfree注:numperm即文件緩存所占內(nèi)存;minperm為文件系統(tǒng)內(nèi)存需要保障的比例(minperm%)換算得到的內(nèi)存需求;minfree是系統(tǒng)內(nèi)存池需要保持的空閑容量(vmo參數(shù));available 如果不夠了,就會(huì)開始 paging 了, 這是目前最直接的判斷方法。3.4 應(yīng)用開發(fā)工具3.1 dbx 使用以及 coredump 定位Core dump 定位參考:/developerworks/cn/aix/library/0806_chench_core/dbx 使用參考“General Programming Concepts” “調(diào)試程序”部分。下載地址:/infoce
22、nter/aix/v6r1/topic/com.ibm.aix.genprogc/doc/genprogc/genprogc_pdf.pdf3.2 內(nèi)存非法使用檢查大部分的 coredump 都與內(nèi)存非法使用有關(guān)。IBM Rational PurifyPlus 是解決這類問題的最佳工具。使用 Purify 插樁編譯后再進(jìn)行功能測試, 如果測試中發(fā)現(xiàn)內(nèi)存非法使用之類 (包括內(nèi)存泄漏)的問題, Purify 可以提供 GUI 界面直接關(guān)聯(lián)到出現(xiàn)問題的應(yīng)用源代碼, 這樣能夠很方便的定位內(nèi)存使用類的問題。此外,Quantify 組件可以用于分析程序的性能問題。這些工具功能都非常完備。AIX 下可免費(fèi)使
23、用的非法內(nèi)存使用檢查工具是 Malloc Debug Tool,設(shè)置好 MALLOCTYPE 和 MALLOCDEBUG 選項(xiàng)后, 啟動(dòng)程序即可打開 malloc 調(diào)試功能。如下是常用的一組選項(xiàng):MALLOCTYPE=debugMALLOCDEBUG=log,postfree_checking,validate_ptrs,catch_overflow,allow_overread,report_allocations,continue,output:/tmp/malloclog.txt如果允許越界讀(一般情況下不會(huì)造成嚴(yán)重錯(cuò)誤) ,可以在 MALLOCDEBUG 中加入allow_overre
24、ad。打開 MALLOCDEBUG 后默認(rèn)的行為是發(fā)現(xiàn)內(nèi)存使用錯(cuò)誤后調(diào)用 abort 終止程序,這樣可以在第一時(shí)間 core dump 并退出,方便定位問題。但如果不希望終止可以使用 continue 參數(shù),這樣對于可以恢復(fù)的錯(cuò)誤,將僅生成 core,進(jìn)程會(huì)繼續(xù)執(zhí)行?;颍篗ALLOCDEBUG=report_allocations,log:extended,stack_depth:8,catch_overflow,allow_overread,postfree_checking,validate_ptrs,continue,output:/tmp/malloclog.txt具體可以參考:/in
25、focenter/aix/v7r1/topic/com.ibm.aix.genprogc/doc/genprogc/debug_malloc.htm注意:使用 MALLOCDEBUG 選項(xiàng)之后,為調(diào)試之目的,系統(tǒng)的內(nèi)存使用可能會(huì)成倍增加,所以需要事先預(yù)留好系統(tǒng)的可用內(nèi)存。3.3 內(nèi)存泄漏檢查(report_allocations)MALLOCTYPE/MALLOCDEBUG 環(huán)境變量選項(xiàng)也可以用于內(nèi)存泄露檢查,如:MALLOCTYPE=debugMALLOCDEBUG=report_allocations,output:/tmp/malloclog.txt更詳細(xì)的記錄:MALLOCTYPE=d
26、ebugMALLOCDEBUG=report_allocations,log:extended,stack_depth:6,output:/tmp/malloclog.txt原理:report_allocations 選項(xiàng)可以用于幫助發(fā)現(xiàn)內(nèi)存泄露問題, report_allocations 選項(xiàng)采用數(shù)據(jù)庫記錄所有分配情況:當(dāng)成功分配內(nèi)存時(shí),采用數(shù)據(jù)庫記錄分配情況;而在該內(nèi)存被釋放時(shí),則從數(shù)據(jù)庫從刪除分配記錄;當(dāng)進(jìn)程退出時(shí),系統(tǒng)將所有未釋放內(nèi)存的詳細(xì)信息記錄到日志中。注意事項(xiàng):1. 從上面的原理介紹可以看到, 程序必須退出之后才能確切知道那些內(nèi)存沒有對應(yīng)的釋放操作。因此如果是長運(yùn)行的程序,必須注
27、冊一個(gè)退出函數(shù),常見的方法是注冊一個(gè)信號處理函數(shù),在收到 SIGTERM 或 SIGINT 時(shí)調(diào)用 exit(0) ,參考如下示例 (sig_handle 定義和注冊過程代碼已用紅色標(biāo)注)。2. 上述 debug 環(huán)境變量應(yīng)該設(shè)置為僅僅對目標(biāo)測試程序生效,不能直接在用戶環(huán)境中export,否則將造成大量無關(guān)程序的分配信息被記錄到日志中,對定位問題造成干擾。3. 激活 Malloc log 之后,對于 32 位程序,每次內(nèi)存分配大約有 50-100 字節(jié)的額外開銷;對 64 位程序,每次內(nèi)存分配有 100-200 字節(jié)的額外開銷。因此,激活調(diào)試選項(xiàng)的應(yīng)用的內(nèi)存使用量會(huì)有一定的增長,在測試時(shí)需要預(yù)先準(zhǔn)備足夠的系統(tǒng)內(nèi)存。4. 示例如下:參考文章:/developerworks/cn/aix/library/aumallocdebug.html3.4 內(nèi)存泄漏檢查示例示例 1(基本輸出) :示例 2(擴(kuò)展輸出) :3.5 proctools 介紹AIX 提供了一系列基于/proc 文件系統(tǒng)的 proctools 工具集用于分析應(yīng)用問題,例如 procstack用于打印進(jìn)程當(dāng)前的棧信息;procldd 顯示進(jìn)程加載的共享庫信息;procfiles 顯示進(jìn)程打開的文件信息;procwdx 顯示進(jìn)程當(dāng)前的工作目錄;procsig 顯示
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年玉林貨運(yùn)從業(yè)資格仿真考題
- 2024商標(biāo)轉(zhuǎn)讓及品牌升級合同:攜手共進(jìn)品牌升級之旅3篇
- 2024商混合同范本:商混混凝土生產(chǎn)與質(zhì)量控制合作協(xié)議3篇
- 2025廚房設(shè)備銷售合同版
- 商業(yè)綜合體電力施工合同范本
- 城市公園旁咖啡館租賃合同
- 城市綠化帶擴(kuò)建植樹合同
- 出入境文件公證辦理規(guī)范
- 智能家居維修員招聘合同模板
- 汽車研發(fā)中心施工協(xié)議
- 鈸式換能器的共振特性研究
- 《我們?nèi)タ春!烽喿x答案
- 智慧酒店無人酒店綜合服務(wù)解決方案
- 考研英語一新題型歷年真題(2005-2012)
- 健身房會(huì)籍顧問基礎(chǔ)培訓(xùn)資料
- 9脊柱與四肢、神經(jīng)系統(tǒng)檢查總結(jié)
- 秀場內(nèi)外-走進(jìn)服裝表演藝術(shù)智慧樹知到答案章節(jié)測試2023年武漢紡織大學(xué)
- 【高分復(fù)習(xí)筆記】王建《現(xiàn)代自然地理學(xué)》(第2版)筆記和課后習(xí)題詳解
- TSGD0012023年壓力管道安全技術(shù)監(jiān)察規(guī)程-工業(yè)管道(高清晰版)
- SMM英國建筑工程標(biāo)準(zhǔn)計(jì)量規(guī)則中文 全套
- 2023-2024學(xué)年浙江省富陽市小學(xué)數(shù)學(xué)四年級上冊期末通關(guān)題
評論
0/150
提交評論