LINUX.ORG.RU

rost@localhost ~$ ulimit -m 4096

rost@localhost ~$ ./fillmem
Used memory: 1 Mb
Used memory: 2 Mb
Used memory: 3 Mb
Used memory: 4 Mb
Used memory: 5 Mb
Used memory: 6 Mb
Used memory: 7 Mb
Used memory: 8 Mb
Used memory: 9 Mb
Used memory: 10 Mb
Used memory: 11 Mb
Used memory: 12 Mb
Used memory: 13 Mb
Used memory: 14 Mb
Used memory: 15 Mb
Used memory: 16 Mb

rost@localhost ~$ ulimit -a |grep '\-m'
max memory size         (kbytes, -m) 4096

wtf? :(

fillmem.c

#include <errno.h>
#include <stdlib.h>
#define MB      16
#define ONEM    1024*1024
int main() {
    void *m;
    int i;
        for(i=0; i<MB; i++) {
        m = malloc(ONEM);
        if ( m == NULL ) {
            printf("Can't malloc: %s\n",strerror(errno));
            exit(1);
        }
        memset(m,'\0',ONEM);
        printf("Used memory: %d Mb\n", (i+1));
        sleep(1);
        }
    return(0);
}

Rost ★★★★★
() автор топика
Ответ на: комментарий от GotF

Если не ошибаюсь, параметр «as» соответствует ulimit -v, который в свою очередь ограничивает виртуальную память.

Мне бы хотелось ограничить именно реально занимаемую память. Иначе, я не знаю как, например, ограничить память апачу. У него воркеры занимают ~230М вирт памяти и 4М реальной...
Можно, конечно, поставить лимит вирт.памяти 256М. Но так как в системе всего 128МВ рам, то толку от этого будет мало. :)

Rost ★★★★★
() автор топика
Ответ на: комментарий от Rost

Чтож, попробую ограничить это дело с помошью cgroups. Там вроде и возможностей больше.

Rost ★★★★★
() автор топика
Ответ на: комментарий от Rost

>ограничить память апачу

в самом апаче это можно сделать. а вообще в интернете рекомендуют ограничивать именно as

Pinkbyte ★★★★★
()

Никогда не работало :)) Я лично даже не знаю, что _в действительности_ ограничивает этот параметр. Вот -v работало всегда.

unanimous ★★★★★
()
Ответ на: комментарий от Rost

Кстати, в тесте надо попробовать эту память реально заполнить, а не просто затребовать. Например, случайными числами.

unanimous ★★★★★
()
Ответ на: комментарий от unanimous

>Кстати, в тесте надо попробовать эту память реально заполнить, а не просто затребовать.

memset(m,'\0',ONEM) - вроде как раз заполняет память, правда нулями. На счет рандомных данных - попробую, спасибо за совет.

Rost ★★★★★
() автор топика
Ответ на: комментарий от Rost

Пардон, пропустил. Но таки попробуй, может чего изменится.

unanimous ★★★★★
()
Ответ на: комментарий от Rost

ИМХО - не поможет. В книге «Ядро Linux» за авторством Д. Бовет и М. Чезати в главе «Процессы» сказано: «Ограничение RLIMIT_RSS(-m) в настоящее время не действует». Информация правда относится к ядру 2.6.11, но по-видимому с той поры ничего не изменилось. Так что кури в сторону cgroups...

Pinkbyte ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.