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

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

1.jpeg

作者 | 不才陳某 責編 | 張文

頭圖 | CSDN 下載自視覺中國

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

1

前言

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

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

今天陳某就來介紹下以什么標準為基線判斷Redis變慢了?

2

Redis真的變慢了?

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

如何判斷 Redis 是不是真的變慢了?一個最直接方法:查看Redis響應延遲

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

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

顯然上述的標準很難判斷,此時只能通過 Redis 基線性能來判斷。

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

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

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

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

2.png

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

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

一般運行時延遲達到基線性能的 2 倍以上則可判定 Redis 變慢了。

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

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

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

3

總結

本文介紹了如何判斷 Redis 變慢的標準,即是基線性能。只有結合基線性能和運行延遲相對比,大概超過 2 倍以上則可判斷 Redis 真的變慢了。

THEEND

最新評論(評論僅代表用戶觀點)

更多
暫無評論