簡體   English   中英

將內存分配限制為Mac-OS X 10.8中的進程

[英]Limit Memory allocation to a process in Mac-OS X 10.8

我想控制最大內存,一個進程可以在Mac-OS X 10.8中使用。 我覺得設置ulimit -v應該達到目標,但似乎並非如此。 我嘗試了以下簡單的命令:

    ulimit -m 512

    java -Xms1024m -Xmx2048m SomeJavaProgram

我假設第二個命令應該失敗,因為Java Process將通過為自己保留1024MB內存而開始,但它會安靜地通過。 在我的Sample程序中,我嘗試使用以下代碼片段分配超過1024MB:

System.out.println("Allocating 1 GB of Memory");
List<byte[]> list = new LinkedList<byte[]>();
list.add(new byte[1073741824]); //1024 MB
System.out.println("Done....");

這兩個程序都可以毫無問題地執行。 我們如何控制Mac-OS X中程序的最大內存分配?

我不確定你是否仍然需要回答這個問題,但是如果有其他人碰巧遇到同樣的問題,這里就是答案。

ulimit -m嚴格限制駐留內存,而不是進程可以從操作系統請求的內存量。

ulimit -v將限制進程可以從操作系統請求的虛擬內存量。

例如...

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char* argv[]) {

    int size = 1 << 20;

    void* memory = NULL;

    memory = malloc(size);

    printf("allocated %i bytes...\n", size);

    return 0; 

}


ulimit -m 512
./memory
allocated 1048576 bytes...


ulimit -v 512
./memory
Segmentation fault


如果執行ulimit -a它應該提供子進程的所有當前限制的摘要。

正如@ bikram990下面的評論中提到的, java進程可能不會遵守軟限制。 要強制執行java內存限制,可以將參數傳遞給進程(-Xmx,-Xss等...)。

警告!

您還可以通過ulimit -H 命令設置硬限制,該命令不能由子進程修改。 但是,一旦降低,這些限制也不能再次提升,沒有提升權限(root)。

暫無
暫無

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

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