Как я могу отслеживать отставание по подписке Redis pubsub?

Как описано в , проблема в Google Code , когда клиент Redis pubsub не успевает за Скорость, с которой сообщения публикуются в канале, Redis поддерживает постоянно растущее количество невыполненных сообщений для этого клиента, используя все больше и больше памяти с течением времени.

Я хотел бы определять, когда это происходит, и получать предупреждения об этом, или, по крайней мере, иметь возможность проверить, у каких подписчиков pubsub есть невыполненные задания и насколько они велики. Есть ли способ сделать это?

0
задан 19 January 2016 в 14:14
1 ответ

Ошибка, описанная в 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 для получения дополнительной информации о том, как установить ограничение.

1
ответ дан 4 December 2019 в 16:43

Теги

Похожие вопросы