Максимальное количество открытых файловых дескрипторов на процесс в OSX (и как его увеличить) - PullRequest
28 голосов
/ 21 марта 2011

РЕДАКТИРОВАТЬ: теперь у меня есть решение, но я бы очень хотел получить краткое описание различных ограничений, то есть ограничений, установленных FD_SIZE, файлов пределов launchtl, sysctl -w kern.maxfilesperproc, ulimit и т. Д.)

Может кто-нибудь помочь мне понять ограничения на открытые файловые дескрипторы на OSX. Улимит дает мне один ответ:

$ ulimit -a
...
open files                      (-n) 256

Я не могу использовать ulimit, чтобы изменить это, но люди предлагают использовать launchctl (например, http://usrinapto.wordpress.com/2010/03/06/mac-os-x-10-6-max-open-files-too-many-open-files/)

Использование этого параметра не меняет ограничение, сообщаемое ulimit.

Однако мое приложение может открывать файлы размером 10 тыс. Перед сбоем, как сообщает lsof, например: * 10101 *.

$ lsof -p 87599 | wc
10279   92505 1418903

(он дает сбой где-то между 10279 и 10305 открытых файлов, надежно)

Таким образом, в игру вступают явно разные ограничения. Я также видел разговор (по вышеуказанной ссылке) о FD_SETSIZE.

Может кто-нибудь объяснить мне, каковы различные ограничения и как они установлены?

Если это уместно, я работаю над созданием библиотеки C / C ++ для использования в Java с использованием SWIG.

EDIT: Я также попробовал:

sudo sysctl -w kern.maxfiles=20000

безуспешно. Также

#define FD_SETSIZE 20000

не имеет никакого эффекта.

EDIT: Также попробовал

launchctl limit maxfiles 20000 20000

без эффекта.

EDIT: Решение:

sysctl -w kern.maxfilesperproc=20000

(через http://krypted.com/mac-os-x/maximum-files-in-mac-os-x/)

РЕДАКТИРОВАТЬ: я написал небольшую программу для проверки этого (на основе Как увеличить предел «максимально открытых файлов» в C на Mac OS X ) и обнаружил, что максимальное количество открыть файлы, которые я могу попросить, это 10240:

#include <sys/resource.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

struct rlimit limit;
void setLimit( int l );
void getLimit();

int main( int argc, char* argv[] )
{
    getLimit();
    setLimit(10240);
    getLimit();
    return 1;
}

void setLimit( int lim )
{
    limit.rlim_cur = lim;
    limit.rlim_max = lim;
    printf( "Setting limit to %d, %d\n", limit.rlim_cur, limit.rlim_max );
    if (setrlimit(RLIMIT_NOFILE, &limit) != 0) {
    printf("setrlimit() failed with errno=%d\n", errno);
    exit(1);
    }
}

void getLimit()
{
    /* Get max number of files. */
    if (getrlimit(RLIMIT_NOFILE, &limit) != 0)
    {
        printf("getrlimit() failed with errno=%d\n", errno);
        exit(1);
    }
    printf("The soft limit is %llu\n", limit.rlim_cur);
    printf("The hard limit is %llu\n", limit.rlim_max);
}

Ответы [ 2 ]

23 голосов
/ 21 марта 2011

найдено на http://krypted.com/mac-os-x/maximum-files-in-mac-os-x/:

sysctl -w kern.maxfilesperproc=20000
7 голосов
/ 21 марта 2011

Чтобы проверить ограничения на запуск вашей системы: «предел запуска». Поменять макс количество открытых файлов: 'launchctl ограничение maxfiles 400000 без ограничений ». к изменить настройки навсегда добавить в файл: /etc/launchd.conf следующая строка:

предел maxfiles 400000
неограниченная

( источник )

... и зачем вам столько открытых файлов одновременно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...