If some application may eat a lot of memory and cause swapping you can put it to sandbox
Test app memtest.c
Test app memtest.c
#include <stdlib.h>
#include <stdio.h>
int main() {
int i;
void *p;
p = NULL;
for (i = 0; 1; i+= 4096) {
p = malloc(4096);
if (!p) {
perror("malloc");
break;
}
printf("allocated %d bytes\n", i);
}
}
Create new group and add to it current shell processmkdir /sys/fs/cgroup/memory/0 echo $$ > /sys/fs/cgroup/memory/0/tasksConfigure memory limit
echo 4M > /sys/fs/cgroup/memory/0/memory.limit_in_bytesTest
gcc memtest.c ./a.out ... allocated 3997696 bytes KilledAs you mentioned malloc didn't return NULL, app receives a signal and terminates because swap is not used and kernel kills one of the processes when there is no enough free memory left.
No comments:
Post a Comment