Как описано в , проблема в Google Code , когда клиент Redis pubsub не успевает за Скорость, с которой сообщения публикуются в канале, Redis поддерживает постоянно растущее количество невыполненных сообщений для этого клиента, используя все больше и больше памяти с течением времени.
Я хотел бы определять, когда это происходит, и получать предупреждения об этом, или, по крайней мере, иметь возможность проверить, у каких подписчиков pubsub есть невыполненные задания и насколько они велики. Есть ли способ сделать это?
Ошибка, описанная в https://code.google.com/archive/p/redis/issues/525 , больше не существует. Хотя нет задокументированного способа получить расширенное предупреждение о том, что клиент PubSub не справляется, Redis отключит соединения от медленных клиентов, чтобы защитить себя от нехватки памяти, и проинформирует вас об этом через свой файл журнала. Согласно документам :
Ограничения буферов вывода
... возможно, что клиент отправляет больше команд, производящих больше выходных данных, для обслуживания с более высокой скоростью, с которой Redis может отправлять существующий выход клиенту. Это особенно верно для клиентов Pub / Sub, если клиент не может достаточно быстро обрабатывать новые сообщения.
[Это] приведет к увеличению буфера вывода клиента и потреблению все большего объема памяти. По этой причине Redis по умолчанию устанавливает ограничения на размер выходного буфера для разных типов клиентов. Когда предел достигнут, клиентское соединение закрывается, и событие регистрируется в файле журнала Redis.
Redis использует два вида ограничений:
Жесткий предел - это фиксированный предел, при достижении которого Redis закрывает клиентское соединение как можно скорее.
Мягкое ограничение - это ограничение, которое зависит от времени, например, мягкое ограничение в 32 мегабайта за 10 секунд означает, что, если клиент имеет выходной буфер больше 32 мегабайт для, непрерывно , Через 10 секунд соединение закрывается.
У разных типов клиентов разные ограничения по умолчанию:
...
- Клиенты Pub / Sub имеют жесткое ограничение по умолчанию в 32 мегабайта и мягкое ограничение в 8 мегабайт на каждый 60 секунд.
...
Можно изменить ограничение во время выполнения с помощью команды CONFIG SET или постоянно, используя файл конфигурации Redis redis.conf. См. Пример redis.conf в дистрибутиве Redis для получения дополнительной информации о том, как установить ограничение.