簡體   English   中英

程序的內存使用量隨時間增加,但內存泄漏工具未報告任何問題

[英]Memory usage of program increasing over time, but memory leak tools report no issues

我正在開發一個相當大的庫,它在執行時不斷分配和釋放內存。 在過去的幾周里,我一直試圖保持內存消耗穩定,但它似乎隨着時間的推移而增加。 我無法完全解釋的行為是增加不是線性的。 進程會在一個“基線”內存級別上徘徊一段時間,然后跳轉到一個新的“基線”。 隨着時間的推移,跳躍需要越來越多的記憶。 因此,假設運行幾個小時后,內存使用量從 512kb 躍升至 1024kb。 它可能會在一夜之間從 1024 小時變為 2048 小時。 那么下次它可能會跳到4096kb。 以下是內存使用情況的圖表:

內存使用情況圖

我讓它在 Linux 上運行,Valgrind 為它提供了一個干凈的健康清單,如果這完全相關的話。 我在這里使用 Linux 代碼來顯示我的進程的虛擬內存消耗:

int getValue(){ //Note: this value is in KB!
FILE* file = fopen("/proc/self/status", "r");
int result = -1;
char line[128];

while (fgets(line, 128, file) != NULL){
    if (strncmp(line, "VmSize:", 7) == 0){
        result = parseLine(line);
        break;
    }
}
fclose(file);
return result;

您很可能正在遭受內存碎片的困擾。

發生的情況是,當您釋放大塊內存時,會出現一些小漏洞,下次請求內存時可能無法使用這些漏洞。 當您繼續以創建小的不可用漏洞的模式進行分配和釋放時,唯一的解決方案是從系統中獲取更多的內存。

如果您對程序如何將內存用於特定事物有明確定義的規則,您可能需要考慮使用內存池來幫助根據程序的特定要求分配和釋放內存,而不是標准的通用要求圖書館。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM