Рейтинг:0

CentOS: максимальное ограничение клиентского подключения Redis

флаг um

Я использую кеширующий сервер Redis в CentOS, где Redis принимает подключения клиентов к настроенному прослушивающему TCP-порту. Я пытаюсь выяснить ограничения, применяемые операционной системой к количеству разрешенных подключений к одному настроенному порту для Redis.

Используемый пользователь корень как показано:

[root@server-001]# ps -ef | grep -я редис 
корень 19595 1 9 июня 26 ? 09:43:07 /usr/local/bin/redis-сервер 0.0.0.0:6379

Теперь меня обманывают несколько факторов:

1-й: значение file-max:

[root@server-001]# кошка /proc/sys/fs/file-max
6518496

2-й: значение лимиты.conf:

[root@server-001]# кошка /etc/security/limits.d/20-nproc.conf 
# Ограничение по умолчанию на количество пользовательских процессов для предотвращения
# случайные форк-бомбы.
# См. аргументацию в rhbz #432903.

* мягкий нпрок 4096
root soft nproc неограниченный

3-е: мягкое и жесткое ограничение файловых дескрипторов:

[root@server-001]# ulimit -Hn
4096
[root@server-001]# ulimit -Sn
1024

Теперь, зная, что реальным фактором, ограничивающим подключение к одному порту, являются файловые дескрипторы, какой из них я должен изменить, чтобы убедиться, что сервер Redis принимает как можно больше клиентов?

Рейтинг:1
флаг it

использовать максклиенты 4096 на redis.conf

недействительными настроить OpenFilesLimit (недействительными) {
rlim_t maxfiles = server.maxclients+CONFIG_MIN_RESERVED_FDS;
предел структуры rlimit;

если (getrlimit(RLIMIT_NOFILE,&limit) == -1) {
    serverLog(LL_WARNING,"Невозможно получить текущий предел NOFILE (%s), предполагая 1024 и соответствующим образом настроив максимальную конфигурацию клиентов.",
        ошибка(ошибка));
    server.maxclients = 1024-CONFIG_MIN_RESERVED_FDS;
} еще {
    rlim_t oldlimit = limit.rlim_cur;

    /* Установить максимальное количество файлов, если текущего лимита недостаточно
     * для наших нужд. */
    если (старый лимит < maxfiles) {
        rlim_t лучший предел;
        интервал setrlimit_error = 0;

        /* Попробуйте установить ограничение на количество файлов, чтобы оно соответствовало 'maxfiles' или, по крайней мере,
         * к более высокому значению поддерживается меньше, чем maxfiles. */
        лучший лимит = максимальное количество файлов;
        в то время как (лучший предел > старый предел) {
            rlim_t decr_step = 16;

            limit.rlim_cur = лучший предел;
            limit.rlim_max = лучший лимит;
            если (setrlimit(RLIMIT_NOFILE,&limit) != -1) перерыв;
            setrlimit_error = ошибка нет;

            /* Нам не удалось установить ограничение файла на «bestlimit». Попробуйте с
             * меньший предел уменьшается на несколько FD за итерацию. */
            если (bestlimit < decr_step) перерыв;
            лучший предел -= decr_step;
        }

        /* Предположим, что предел, который мы получили изначально, все еще действителен, если
         * наша последняя попытка была еще ниже. */
        если (bestlimit < oldlimit) bestlimit = oldlimit;

        если (bestlimit < maxfiles) {
            беззнаковое целое число old_maxclients = server.maxclients;
            server.maxclients = лучший лимит-CONFIG_MIN_RESERVED_FDS;
            /* maxclients не имеет знака, поэтому может переполниться: чтобы
             * чтобы проверить, что maxclients теперь логически меньше 1
             * мы тестируем косвенно через bestlimit. */
            если (лучший предел <= CONFIG_MIN_RESERVED_FDS) {
                serverLog(LL_WARNING,"Ваш текущий 'ulimit -n' "
                    "%llu недостаточно для запуска сервера."
                    "Пожалуйста, увеличьте лимит открытых файлов как минимум до "
                    "%llu. Выход.",
                    (беззнаковый длинный длинный) старый лимит,
                    (unsigned long long) maxfiles);
                выход(1);
            }
            serverLog(LL_WARNING,"Вы запросили максимальное количество клиентов %d "
                "требуется не менее %llu макс. файловых дескрипторов.",
                старые_maxclients,
                (unsigned long long) maxfiles);
            serverLog(LL_WARNING,"Сервер не может установить максимальное количество открытых файлов"
                "в %llu из-за ошибки ОС: %s.",
                (unsigned long long) maxfiles, strerror(setrlimit_error));
            serverLog(LL_WARNING,"Текущее максимальное количество открытых файлов: %llu."
                "maxclients был уменьшен до %d, чтобы компенсировать "
                "низкий лимит."
                "Если вам нужно больше maxclients, увеличьте ulimit -n".",
                (unsigned long long) bestlimit, server.maxclients);
        } еще {
            serverLog(LL_NOTICE,"Увеличено максимальное количество открытых файлов"
                "в %llu (изначально было установлено %llu)",
                (беззнаковые длинные длинные) maxfiles,
                (unsigned long long) oldlimit);
        }
    }
}

}

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.