Redis 突然變 “慢” 了,是運(yùn)維還是開發(fā)的錯(cuò)?

CSDN
CSDN
眾所周知 Redis 是單線程,有著極快的響應(yīng)速度,但是有一天 Redis 突然變"慢"了,運(yùn)維甚至開發(fā)都慌了,開始一系列的騷操作了,但是一點(diǎn)效果都沒有,why?

1.jpeg

作者 | 不才陳某 責(zé)編 | 張文

頭圖 | CSDN 下載自視覺中國

來源 | 碼猿技術(shù)專欄(ID:oneswholife)

1

前言

眾所周知 Redis 是單線程,有著極快的響應(yīng)速度,但是有一天 Redis 突然變"慢"了,運(yùn)維甚至開發(fā)都慌了,開始一系列的騷操作了,但是一點(diǎn)效果都沒有,why?

遇到問題不要慌。首先需要確定的是:Redis真的變慢了嗎?

今天陳某就來介紹下以什么標(biāo)準(zhǔn)為基線判斷Redis變慢了?

2

Redis真的變慢了?

我們知道一個(gè)應(yīng)用程序在服務(wù)器上運(yùn)行,它的運(yùn)行快慢和硬件乃至底層操作系統(tǒng)都有巨大的關(guān)系,因此 Redis 響應(yīng)慢了就真的是 Redis 的鍋?

如何判斷 Redis 是不是真的變慢了?一個(gè)最直接方法:查看Redis響應(yīng)延遲

大部分情況下 Redis 的延遲很低,但是在某些時(shí)刻延遲突然很高,當(dāng)你發(fā)現(xiàn)Redis 命令的執(zhí)行時(shí)間突然增長到幾秒,基本就可以認(rèn)定 Redis 變慢了。

但是不同的軟硬件環(huán)境下,延遲時(shí)間的標(biāo)準(zhǔn)卻是大相徑庭,比如在服務(wù)器 A 上延遲為 1s 時(shí)基本就能判定 Redis 變慢了,在較好配置的服務(wù)器 B 上甚至延遲10ms 就可以判定 Redis 變慢了。

顯然上述的標(biāo)準(zhǔn)很難判斷,此時(shí)只能通過 Redis 基線性能來判斷。

基線性能:系統(tǒng)在低壓力、無干擾下的基本性能,這個(gè)性能只由當(dāng)前的軟件配置決定。

那么如何確定這個(gè)基線性能呢?很多人疑惑了?

從 2.8.7 版本開始,redis-cli 命令提供了–intrinsic-latency 選項(xiàng),可以用來監(jiān)測(cè)和統(tǒng)計(jì)測(cè)試期間內(nèi)的最大延遲,這個(gè)延遲可以作為 Redis 的基線性能。其中,測(cè)試時(shí)長可以用–intrinsic-latency 選項(xiàng)的參數(shù)來指定(一般情況下 120s足夠監(jiān)測(cè)到最大延遲了)。

本機(jī)測(cè)試(未通過客戶端)的監(jiān)測(cè)命令如下:

2.png

發(fā)現(xiàn)最大的延遲 22988 微秒,因此這里的基線性能為 22988 微秒。

基線性能只和操作系統(tǒng)、硬件配置相關(guān),因此這里可以結(jié)合基線性能判斷 Redis是否真的變慢了?

一般運(yùn)行時(shí)延遲達(dá)到基線性能的 2 倍以上則可判定 Redis 變慢了。

注意:基線性能非常重要,尤其對(duì)于虛擬化的環(huán)境(虛擬機(jī)、容器),他們的基線性能相對(duì)很高,因此結(jié)合基線性能判斷是必要的。

切記:一定要在本機(jī)上運(yùn)行測(cè)試命令,如果通過客戶端則需要考慮網(wǎng)絡(luò)性能的影響。

現(xiàn)在有很多網(wǎng)絡(luò)性能的測(cè)量工具,比如 iperf,如果發(fā)現(xiàn)網(wǎng)絡(luò)阻塞了,此時(shí)就需要聯(lián)絡(luò)公司的網(wǎng)絡(luò)工程師了。

3

總結(jié)

本文介紹了如何判斷 Redis 變慢的標(biāo)準(zhǔn),即是基線性能。只有結(jié)合基線性能和運(yùn)行延遲相對(duì)比,大概超過 2 倍以上則可判斷 Redis 真的變慢了。

THEEND

最新評(píng)論(評(píng)論僅代表用戶觀點(diǎn))

更多
暫無評(píng)論