ulimit를 사용하여 프로세스의 최대 메모리 제한 설정

ulimit를 사용하여 프로세스의 최대 메모리 제한 설정

그래서 C에서는 메모리 누수가 발생하기 쉽다는 것을 배웠습니다.

#include <stdio.h>
void main() {
    int* p;
    int i=0;
    
    p=(int*)malloc(sizeof(int));
    while (p!=NULL) {
        p=(int*)malloc(sizeof(int));
        i++;
    }
    printf("malloc failed after %d allocations\n",i);
}

이 프로그램을 시작할 때마다 컴퓨터를 다시 시작하지 않거나 너무 늦기 전에 프로그램을 종료하는 방법을 알고 싶습니다.

ulimit해결책인 것 같습니다. ulimit -S -m 1000000이렇게 하면 프로세스가 1000000kbyte/1gbyte 이상의 메모리를 차지하는 것을 방지할 수 있습니다(RAM은 32gbyte입니다). 그러나 전혀 효과가 없는 것 같습니다. 위의 프로그램을 시작할 때 프로그램을 종료하지 않으면 모든 메모리를 사용합니다.

매우 낮은 제한(100kbyte...)을 설정하거나 -vRSS 대신 가상 메모리 제한( )을 설정해 보았으나 아무런 효과가 없었습니다...

내가 놓친 게 무엇입니까?

답변1

ulimit -m제한된상주 세트 크기프로세스 수 - 즉, 한 번에 호출할 수 있는 프로세스 부분 수입니다.

스왑 공간을 사용할 수 있으면 프로세스의 가상 메모리가 훨씬 더 커질 수 있습니다.

ulimit -v할당할 수 있는 가상 메모리의 양을 제한하십시오. 이것이 바로 원하는 것입니다. 반드시 자식 프로세스에 의해 상속되는 것은 아니므로 서브쉘을 사용하고 다음을 수행하십시오 exec.

( ulimit -v 1000000 && exec test_program )

답변2

Ram(대부분의 Unix 시스템에서)은 첫 번째 쓰기 시 지연 할당됩니다. malloc()에서 반환된 포인터에는 쓰지 않습니다.

관련 정보