[英]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.