2015-09-09 2 views
2

Я использую redis pub/sub механизм в своем приложении и хотел бы провести тестовый тест. У меня есть машина I-7 с 32-гигабайтной оперативной памятью и ulimit, установленная на 1024. Сервер Redis имеет одинаковую конфигурацию, за исключением того, что ulimit установлен на 65535. Сколько одновременных подключений я могу сделать без redis, жалуясь на достигнутое MAXClient исключение. Я попытался настроить соединение с пулом соединений и т. Д., Но количество одновременных запросов не выходит за пределы запросов 25 КБ.Redis Client Maxlimit

Благодаря \

+0

ли мой ответ вам помочь? Если нет, то прокомментируйте иначе, если вы могли бы принять ответ, это было бы здорово :) –

+1

Это частично помогло. Благодарю. Но не решила мою проблему. – user3364247

ответ

2

From REDIS Documentation

Максимальное количество клиентов

В Redis 2.4 произошло жестко закодированы предел относительно максимального числа клиентов, что было возможно обрабатывать одновременно.

В Redis 2.6 это ограничение является динамическим: по умолчанию установлено 10000 клиентов, если иное не указано директивой maxmemory в Redis.conf.

Однако Redis проверяет с ядром максимальное количество дескрипторов файлов, которые мы можем открыть (установлен ли мягкий предел), , если предел меньше максимального количества клиентов, с которыми мы хотим обрабатывать, плюс 32 (то есть количество дескрипторов файлов резервов Redis для внутренних целей), то количество максимальных клиентов модифицируется Redis, чтобы соответствовать количеству клиентов, которые мы действительно можем обрабатывать в рамках текущего предела операционной системы.

Когда сконфигурировано число максимальных клиентов не могут быть выполнены, состояние регистрируется при запуске, как в следующем примере:

$ ./redis-server --maxclients 100000

[41422] 23 Jan 11:28:33.179 # Unable to set the max number of files limit to 100032 (Invalid argument), setting the max clients configuration to 10112. 

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

Под Linux эти ограничения могут быть установлены как в текущей сессии и в качестве параметра общесистемного со следующими командами:

  • ULIMIT -sN 100000 # Это будет работать только если жесткий предел достаточно большой ,

  • Sysctl -w fs.file-макс = 100000

0

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

Я установил в файле redis.conf свойство «maxclient» с соединением 27000.

Затем я запускаю тестовую утилиту, предоставляемую redis, с -c 27000 означает 27000 параллельное соединение. Но это не будет работать так же, как ulimit -Sn по умолчанию по умолчанию в ubuntu. Поэтому я меняю -Sn и ​​-Hn на 65535.

У redis есть архитектура клиентского сервера, поэтому мы не можем сделать слишком много клиентского подключения с одного компьютера.Поэтому нам нужно повторно использовать соединение, и для этого выполните следующую команду: sudo echo 1>/proc/sys/net/ipv4/tcp_tw_reuse

затем после того, как я смогу запустить контрольный тест с подключением -c 29000. то после того, как я был не в состоянии выполнить это Util с большим количеством клиентов, но, но я получаю ошибку

Не удалось подключиться к Redis в 127.0.0.1:7000: Невозможно назначить запрашиваемый адрес

Still Я не был доступен с максимальным соединением, поэтому я запускаю тот же тест, используя 3 отдельных компьютера, каждый с 29000 параллельным клиентом, и он работает и выполняется.

Странная вещь: мой redis.conf имеет maxclient 27000 set, все же я могу подключить 87000 клиентов.

0

Решение, которое работало для меня: Под редакцией /etc/systemd/system/redis.service Добавлено следующую строку в раздел [Service]

LimitNOFILE=110000 
Смежные вопросы