ホームページ  >  記事  >  データベース  >  Redis のパフォーマンス分析および監視ソリューションの紹介

Redis のパフォーマンス分析および監視ソリューションの紹介

尚
転載
2020-03-10 09:20:072411ブラウズ

Redis のパフォーマンス分析および監視ソリューションの紹介

1. redis スローログ分析

SLOWLOG サブコマンド [引数]

以下は、redis のスロー クエリ設定パラメーターです。 .conf :

slowlog-log-slower-than 10000     #查询时间超过10ms的会被记录
slowlog-max-len 128     #最多记录128个慢查询

上記のパラメータは、動的にクエリしたり、redis で設定したりできます。config get および config set コマンドを使用します。

スロー クエリの読み取り: 指定した数のスロー クエリを取得できます

127.0.0.1:6320> slowlog get 1
 1) 1) (integer) 394689     #slowlog的唯一编号
    2) (integer) 1480851711     #此次slowlog事件的发生时间
    3) (integer) 10639     #耗时
    4) 1) "HGET"     #slowlog事件所对应的redis 命令
       2) "hash:submit_sent_150004"
       3) "15000429648122734363745165312"

スローログ統計のリセット:

SLOWLOG RESET

redis スロー コマンド分析:

1. Redis は単一のスレッドを使用してクライアント要求を処理します。リクエストの処理が遅い場合、他のすべてのクライアントはこのリクエストが処理されるまで待機します。多くの遅いコマンドを実行する必要がある場合は、実行のために Redis スレーブに遅いクエリを配置することをお勧めします。

2.keys コマンドについて: 遅いコマンドの実行によって引き起こされる遅延の非常に一般的な原因は、運用環境での KEYS コマンドの使用です。 Redis のドキュメントに記載されているように、KEYS はデバッグ目的にのみ使用してください。

Redis2.8 では、大規模なコレクションをクエリするための新しいコマンドが導入されました。詳細については、SCAN、SSCAN、HSCAN、および ZSCAN コマンドを確認してください。

  • SCAN は、現在選択されている Redis データベース内のキーのセットを反復処理します。

  • SSCAN は、sets コレクション型の要素を反復処理します。

  • HSCAN は、ハッシュ タイプのフィールドとそれに関連付けられた値を反復処理します。

  • ZSCAN は、ソートされたセット タイプの要素とそれに関連付けられたスコアを反復処理します。

これらのコマンドは増分反復が可能であり、呼び出しごとに少数の要素のみを返すため、大規模なコレクションと呼ばれる KEYS や SMEMBERS などのコマンドの欠点なしに運用環境で使用できます。キーまたは要素が長時間 (数秒も) サーバーをブロックする可能性があります。

2. SCAN、SSCAN、HSCAN、ZSCAN コマンドの使用方法

SCAN はカーソルベースのイテレータです。これは、コマンドを呼び出すたびに、サーバーが更新されたカーソルを返し、ユーザーが次の呼び出しでカーソル パラメーターとして使用する必要があることを意味します。

反復はカーソルが 0 に設定されると開始され、サーバーから返されたカーソルが 0 になると終了します。次に、SCAN 反復の例を示します。

127.0.0.1:6319> scan 0
1) "65536"
2)  1) "list:submit_sent_2016-12-02-13:50_130806"
    2) "list:submit_sent_2016-12-01-15:01_130479"
    3) "list:submit_sent_2016-12-01-13:21_178888"
    4) "list:submit_sent_2016-12-02-10:46_186064"
    5) "list:submit_sent_2016-12-01-16:48_135546"
    6) "list:submit_sent_2016-12-02-14:27_185158"
    7) "list:submit_sent_2016-12-02-09:57_186532"
    8) "list:submit_sent_2016-12-01-13:24_183217"
    9) "list:submit_sent_2016-12-02-08:29_189316"
   10) "list:submit_sent_2016-12-01-13:46_177645"
127.0.0.1:6319> scan 65536
1) "884736"
2)  1) "list:submit_sent_2016-12-01-17:55_175010"
    2) "list:submit_sent_2016-12-02-18:28_138052"
    3) "list:submit_sent_2016-12-01-18:17_150243"
    4) "list:submit_sent_2016-12-01-11:22_137606"
    5) "list:submit_sent_2016-12-01-21:15_183748"
    6) "list:submit_sent_2016-12-02-11:47_155212"
    7) "list:submit_sent_2016-12-01-11:01_137065"
    8) "list:submit_sent_2016-12-02-08:03_181202"
    9) "list:submit_sent_2016-12-02-12:16_136096"
   10) "list:submit_sent_2016-12-01-18:12_159893"

カーソル値 0 で反復を開始し、返されるカーソルが再び 0 になるまで SCAN を呼び出します (完全な反復と呼ばれます)。

スキャンのカウント オプション: 出力の数を指定します

127.0.0.1:6319> scan 0 count 20
1) "884736"
2)  1) "list:submit_sent_2016-12-02-13:50_130806"
    2) "list:submit_sent_2016-12-01-15:01_130479"
    3) "list:submit_sent_2016-12-01-13:21_178888"
    4) "list:submit_sent_2016-12-02-10:46_186064"
    5) "list:submit_sent_2016-12-01-16:48_135546"
    6) "list:submit_sent_2016-12-02-14:27_185158"
    7) "list:submit_sent_2016-12-02-09:57_186532"
    8) "list:submit_sent_2016-12-01-13:24_183217"
    9) "list:submit_sent_2016-12-02-08:29_189316"
   10) "list:submit_sent_2016-12-01-13:46_177645"
   11) "list:submit_sent_2016-12-01-17:55_175010"
   12) "list:submit_sent_2016-12-02-18:28_138052"
   13) "list:submit_sent_2016-12-01-18:17_150243"
   14) "list:submit_sent_2016-12-01-11:22_137606"
   15) "list:submit_sent_2016-12-01-21:15_183748"
   16) "list:submit_sent_2016-12-02-11:47_155212"
   17) "list:submit_sent_2016-12-01-11:01_137065"
   18) "list:submit_sent_2016-12-02-08:03_181202"
   19) "list:submit_sent_2016-12-02-12:16_136096"
   20) "list:submit_sent_2016-12-01-18:12_159893"

スキャンの一致オプション: パターンで一致させるkeysコマンドと同様に、MATCH パラメータを次の位置に追加するだけです。 SCAN コマンドの終わり

127.0.0.1:6319> scan 0 match *submit_sent*
1) "65536"
2)  1) "list:submit_sent_2016-12-02-13:50_130806"
    2) "list:submit_sent_2016-12-01-15:01_130479"
    3) "list:submit_sent_2016-12-01-13:21_178888"
    4) "list:submit_sent_2016-12-02-10:46_186064"
    5) "list:submit_sent_2016-12-01-16:48_135546"
    6) "list:submit_sent_2016-12-02-14:27_185158"
    7) "list:submit_sent_2016-12-02-09:57_186532"
    8) "list:submit_sent_2016-12-01-13:24_183217"
    9) "list:submit_sent_2016-12-02-08:29_189316"
   10) "list:submit_sent_2016-12-01-13:46_177645"
127.0.0.1:6319> scan 0 count 15  match *submit_sent*     #查找匹配的数据并返回15个
1) "2031616"
2)  1) "list:submit_sent_2016-12-02-13:50_130806"
    2) "list:submit_sent_2016-12-01-15:01_130479"
    3) "list:submit_sent_2016-12-01-13:21_178888"
    4) "list:submit_sent_2016-12-02-10:46_186064"
    5) "list:submit_sent_2016-12-01-16:48_135546"
    6) "list:submit_sent_2016-12-02-14:27_185158"
    7) "list:submit_sent_2016-12-02-09:57_186532"
    8) "list:submit_sent_2016-12-01-13:24_183217"
    9) "list:submit_sent_2016-12-02-08:29_189316"
   10) "list:submit_sent_2016-12-01-13:46_177645"
   11) "list:submit_sent_2016-12-01-17:55_175010"
   12) "list:submit_sent_2016-12-02-18:28_138052"
   13) "list:submit_sent_2016-12-01-18:17_150243"
   14) "list:submit_sent_2016-12-01-11:22_137606"
   15) "list:submit_sent_2016-12-01-21:15_183748"

Sscan クエリ セット収集メソッド:

redis 127.0.0.1:6379> sadd myset 1 2 3 foo foobar feelsgood
(integer) 6
redis 127.0.0.1:6379> sscan myset 0 match f*
1) "0"
2) 1) "foo"
   2) "feelsgood"
   3) "foobar"
redis 127.0.0.1:6379>

hscan クエリ ハッシュ収集メソッド:

redis 127.0.0.1:6379> hmset hash name Jack age 33
OK
redis 127.0.0.1:6379> hscan hash 0
1) "0"
2) 1) "name"
   2) "Jack"
   3) "age"
   4) "33"

Linux カーネルが透過的ヒュージ ページ機能を有効にすると、 Redis はフォーク呼び出しを使用します。その場合、ディスク上のデータの永続性に対して大きな遅延ペナルティが発生します。

このメソッドを使用して、システム カーネルのこの機能をオフにすることができます:

echo never > /sys/kernel/mm/transparent_hugepage/enabled

注: 有効にするには、redis を再起動する必要があります。

3. システムによるスワップの使用によって Redis が影響を受けるかどうかを確認します:

查找redis进程id:
redis-cli -p 6319 info|grep process_id
process_id:32139
查看redis进程的内存使用信息:
cd /proc/32139
查看该进程使用swap分区的统计信息,以不使用或只有少量的4kB为佳:
cat smaps | grep 'Swap:'
同时打印出内存映射和swap使用信息:查看那些较大的内存消耗是否引发了大的swap使用
cat smaps | egrep '^(Swap:Size)'

4. Redis ウォッチドッグを使用して遅延を特定します: 実験的Redis データがバックアップされていることを確認してください。

Redis software watchdog
该功能只能动态启用,使用以下命令:
CONFIG SET watchdog-period 500
注:redis会开始频繁监控自身的延时问题,并把问题输出到日志文件中去。
 
关闭watchdog:
CONFIG SET watchdog-period 0
 
注:打开watchdog功能,会对redis服务性能产生影响。

5. Redis 遅延監視フレームワークについて

Redis 遅延監視フレームワーク

Redis 監視フレームワークを有効にする方法:

CONFIG SET latency-monitor-threshold 100

Default Inこの場合、しきい値は 0 に設定され、redis 監視が無効になります。実際、この監視機能を有効にしても、Redis に追加されるコストはほとんどありません。ただし、Redis が正常に動作している場合、この監視機能をオンにする必要はありません。

LATENCY コマンドの使用方法

最新の遅延イベントの表示:

127.0.0.1:6319> latency latest
1) 1) "command"     #event name
   2) (integer) 1480865648     #发生时间
   3) (integer) 207     #耗时,毫秒
   4) (integer) 239     #从redis启动或上次latency reset以来,这种事件的最大延时记录

遅延イベントの履歴情報の表示:

LATENCY HISTORY イベント- name

特定のイベントに対して、コマンドは最大 160 個の要素を返します。アプリケーションでは、監視やグラフィックスの表示などを行うために生データを取得する必要がある場合があります。

127.0.0.1:6319> latency history command
  1) 1) (integer) 1480865710
     2) (integer) 207
  2) 1) (integer) 1480865711
     2) (integer) 217
  3) 1) (integer) 1480865712
     2) (integer) 198
  4) 1) (integer) 1480865713
     2) (integer) 226
  5) 1) (integer) 1480865714
     2) (integer) 224

統計データをゼロにリセットします:

LATENCY RESET [イベント名 ... イベント名]

遅延イベントをテキスト チャートの形式で表示します:

LATENCY GRAPH event-name
127.0.0.1:6379> latency graph command
command - high 500 ms, low 101 ms (all time high 500 ms)
--------------------------------------------------------------------------------
   #_
  _||
 _|||
_||||
 
11186
542ss
sss

注: 各列は遅延イベントを表します。以下に表示されるのは、イベントが現在時刻よりどれだけ前に発生したか (2 分または 38 秒など) です。統計イベントでは、最小遅延イベントが短い下線として記録されます。 、最大遅延イベントは上から A # で表されます。この数字は、遅延イベントの傾向の変化を反映している可能性があります。

LATENCY DOCTOR、遅延イベント統計に関するインテリジェントな分析と提案:

127.0.0.1:6379> latency doctor
Dave, I have observed latency spikes in this Redis instance.
You don't mind talking about it, do you Dave?
1. command: 5 latency spikes (average 300ms, mean deviation 120ms,
  period 73.40 sec). Worst all time event 500ms.
I have a few advices for you:
- Your current Slow Log configuration only logs events that are
  slower than your configured latency monitor threshold. Please
  use 'CONFIG SET slowlog-log-slower-than 1000'.
- Check your Slow Log to understand what are the commands you are
  running which are too slow to execute. Please check
  http://redis.io/commands/slowlog for more information.
- Deleting, expiring or evicting (becaus
127.0.0.1:6320> latency doctor
I have a few advices for you:
- I detected a non zero amount of anonymous huge pages used by your process. This creates very serious latency events in different conditions, especially 
when Redis is persisting on disk. To disable THP support use the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled', make sure to also 
add it into /etc/rc.local so that the command will be executed again after a reboot. Note that even if you have already disabled THP, you still need to
 restart the Redis process to get rid of the huge pages already created.

Redis の詳細については、PHP 中国語 Web サイトの redis チュートリアル 列に注目してください。

以上がRedis のパフォーマンス分析および監視ソリューションの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。