Запись устранения неполадок Redis с высокой нагрузкой

Redis

Простое обучение эксплуатации и обслуживанию Redis

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

Веб-мониторинг

Благодаря мониторингу Ali Grafana загрузка процессора, памяти и сетевого ввода и вывода вполне нормальные, поэтому должна быть проблема с Redis.

我们应用使用的是单节点的 32M 16GB 的阿里云 Redis,登录网页监控看性能监控,发现 CPU 使用情况飙升到100%! ! !

Хотя QPS увеличился с более чем 1000 до 6000, это намного ниже предельного значения, а количество подключений увеличилось с 0 до 3000, что также намного ниже предельного значения (может пользователь просто вышел на работу, там сначала были запросы, а затем ответ задерживался, что приводило к слишком большому количеству очередей команд, открывая много соединений).

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

Дальше продолжаем отслеживать особенности Redis.


Мониторинг команд сервера

Войдите в Redis-cli и используйте команду info, чтобы просмотреть состояние сервера и статистику команд.Брат Сян подытожил два исключения:

  • При запросе медленного журнала медленных команд Redis первые десять команд являются «ключами *» и занимают много времени.Выполнение «ключей *» при текущем бизнес-трафике определенно заблокирует бизнес, что приведет к медленным запросам и высокой загрузке ЦП. . Стоит отметить, что интерфейс «ключи *» не открыт на уровне приложения, и нет никакого фонового человека или фоновой программы для запуска этой команды.

  • Просмотрите исполнение инструкций Redis, исключите «EXEC», «PLASHALL» и т. Д. В инструкции по использованию услуг существует 7,5 миллиона вызовов на время потребления, а набор вызовов 8,4 миллиона составляет 3,33. S, DEL имеет 265 миллионов звонков В течение среднего времени 69S и Hmset имеет общее потребление времени 64-м, а Hmget имеет 6,8 миллиона звонков при среднем потреблении 9с, а HGETALL составляет 14 миллиардов вызовов в среднем 205-е годы, клавиши имеют 2 десятки миллионов звонков, потребляют 3740-х. В целом, эти инструкции пропорциональны размеру стоимости, поэтому его можно исследовать недавний рост этих инструкций. Или в последнее время не существует преобразования бизнеса, которое часто использует вышеупомянутые инструкции, которые также приведут к процессору.

(Я забыл сделать скриншот в то время, следующее изображение просто показывает значение команд и параметров)

Статистику команды Redis можно просмотреть через info commandstats, где формат команды

cmdstat_XXX: calls=XXX,usec=XXX,usec_per_call=XXX
调用次数、耗费CPU时间、每个命令平均耗费CPU(单位为微秒)

Просмотр медленных команд с помощью команды slowlog (по умолчанию в журнал будет записано более 10 мс, только время выполнения команды, не включая операции ввода-вывода и не записывает медленный ответ, вызванный только сетевой задержкой)

(Я также забыл сделать скриншоты в то время, поэтому я представлю, как выглядит slowlog)

xxxxx> slowlog get 10
 3) 1) (integer) 411           
    2) (integer) 1545386469     
    3) (integer) 232663          
    4) 1) "keys"              
       2) "mecury:*"

Поля на рисунке представляют:

  • 1 = Уникальный идентификатор журнала
  • 2 = момент времени выполнения команды, выраженный в виде временной метки UNIX.
  • 3=Просмотр времени выполнения команды, в микросекундах, 230 мс в 🌰
  • 4=Выполненные команды, расположенные в виде массива. Полная команда — это ключи mucury:*

Следовательно, по этим параметрам в основном можно определить, что внезапно возникает большое количествоkeys *Команда вызвала увеличение нагрузки на ЦП, что привело к задержке ответа, проблема не открыта в нашем приложении.keys *Команда Σ(о゚д゚оノ)

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


Суммировать

  • Для дрожания Redis вы можете сначала посмотреть на мониторинг веб-страниц (Alibaba Cloud отлично справляется!)
  • Просмотр статуса команды Redis и медленных команд через команды
  • Рассмотрите возможность оптимизации использования Redis в вашем коде.
  • Если трафик продолжает расти, вам нужно подумать об обновлении =-=

Справочная статья

  1. Устранение неисправностей эффективности Redis Performance и решающее руководство (7)
  2. redis info command