Redis生产性能测试优化案例

Redis性能测试,最近有人告诉我redis查询数据很慢,首先登录Redis机器进行了redis-benchmark本机性能测试,本机性能并不慢,并且生产我们自己系统部署的系统并不慢,不跨路由情况下也很快,然后ping了一下对方的主机,延迟时间是20ms左右,并且IP和redis主机IP不在一个网段,因此初步断定可能是跨网络传输......

[root@master src]# redis-benchmark --help

Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]

 -h <hostname>      Server hostname (default 127.0.0.1)

 -p <port>          Server port (default 6379)

 -s <socket>        Server socket (overrides host and port)

 -a <password>      Password for Redis Auth

 -c <clients>       Number of parallel connections (default 50)

 -n <requests>      Total number of requests (default 100000)

 -d <size>          Data size of SET/GET value in bytes (default 2)

 -dbnum <db>        SELECT the specified db number (default 0)

 -k <boolean>       1=keep alive 0=reconnect (default 1)

 -r <keyspacelen>   Use random keys for SET/GET/INCR, random values for SADD

  Using this option the benchmark will expand the string __rand_int__

  inside an argument with a 12 digits number in the specified range

  from 0 to keyspacelen-1. The substitution changes every time a command

  is executed. Default tests use this to hit random keys in the

  specified range.

 -P <numreq>        Pipeline <numreq> requests. Default 1 (no pipeline).

 -e                 If server replies with errors, show them on stdout.

                    (no more than 1 error per second is displayed)

 -q                 Quiet. Just show query/sec values

 --csv              Output in CSV format

 -l                 Loop. Run the tests forever

 -t <tests>         Only run the comma separated list of tests. The test

                    names are the same as the ones produced as output.

 -I                 Idle mode. Just open N idle connections and wait.

[root@master ~]# cd /opt/

[root@master opt]# ls

alibaba-rocketmq

alibaba-rocketmq-3.2.6.tar.gz

apache-activemq-5.8.0

apache-activemq-5.8.0-bin.tar.gz

cacti-0.8.8b.tar.gz

flume1.6

grafana-2.5.0

grafana-2.5.0.linux-x64.tar.gz

hadoop

hadoop_data

haproxy-1.5.0

haproxy-1.5.0.tar.gz

httpd-2.2.23

httpd-2.2.23.tar.gz

libevent-1.4.14b-stable

libevent-1.4.14b-stable.tar.gz

memcached

memcached-1.4.25.tar.gz

mongodb

mongodb-linux-x86_64-1.6.3.tgz

nagios

nagios-3.4.3.tar.gz

nagios-plugins-1.4.13

nagios-plugins-1.4.13.tar.gz

php-5.4.10

php-5.4.10.tar.gz

sequoiadb-1.8-linux_x86_64-installer.run.tar.gz

solr-6.2.0

solr-6.2.0.tgz

SRC

tomcat

zookeeper-3.4.6

zookeeper-3.4.6.tar.gz

[root@master opt]# wget http://download.redis.io/releases/redis-3.2.6.tar.gz

--12:15:24--  http://download.redis.io/releases/redis-3.2.6.tar.gz

Resolving download.redis.io... 109.74.203.151

Connecting to download.redis.io|109.74.203.151|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 1544806 (1.5M) [application/x-gzip]

Saving to: `redis-3.2.6.tar.gz'

100%[=============================>] 1,544,806   23.8K/s   in 96s    

12:17:05 (15.8 KB/s) - `redis-3.2.6.tar.gz' saved [1544806/1544806]

[root@master opt]# tar -zxvf redis-3.2.6.tar.gz 

[root@master opt]# cd redis-3.2.6

[root@master redis-3.2.6]# ls

00-RELEASENOTES  BUGS  CONTRIBUTING  COPYING  deps  INSTALL  Makefile  MANIFESTO  README.md  redis.conf  runtest  runtest-cluster  runtest-sentinel  sentinel.conf  src  tests  utils

[root@master redis-3.2.6]# cd src/

[root@master src]# ls

[root@master src]# ./configure

-bash: ./configure: No such file or directory

[root@master src]# make && make install 

[root@master src]# ./redis-server  & 

[1] 6808

[root@master src]# 6808:C 22 Dec 12:19:40.299 # Warning: no config file specified, using the default config. In order to specify a config file use ./redis-server /path/to/redis.conf

6808:M 22 Dec 12:19:40.300 * Increased maximum number of open files to 10032 (it was originally set to 1024).

                _._                                                  

           _.-``__ ''-._                                             

      _.-``    `.  `_.  ''-._           Redis 3.2.6 (00000000/0) 64 bit

  .-`` .-```.  ```\/    _.,_ ''-._                                   

 (    '      ,       .-`  | `,    )     Running in standalone mode

 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379

 |    `-._   `._    /     _.-'    |     PID: 6808

  `-._    `-._  `-./  _.-'    _.-'                                   

 |`-._`-._    `-.__.-'    _.-'_.-'|                                  

 |    `-._`-._        _.-'_.-'    |           http://redis.io        

  `-._    `-._`-.__.-'_.-'    _.-'                                   

 |`-._`-._    `-.__.-'    _.-'_.-'|                                  

 |    `-._`-._        _.-'_.-'    |                                  

  `-._    `-._`-.__.-'_.-'    _.-'                                   

      `-._    `-.__.-'    _.-'                                       

          `-._        _.-'                                           

              `-.__.-'                                               

6808:M 22 Dec 12:19:40.302 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.

6808:M 22 Dec 12:19:40.302 # Server started, Redis version 3.2.6

6808:M 22 Dec 12:19:40.303 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

6808:M 22 Dec 12:19:40.303 * The server is now ready to accept connections on port 6379

[root@master src]# ps -ef |grep redis

root      6808  3687  0 12:19 pts/0    00:00:00 ./redis-server *:6379

root      6812  3687  0 12:19 pts/0    00:00:00 grep redis

[root@master src]# ./redis-cli 

127.0.0.1:6379> set name gaojingsong

OK

127.0.0.1:6379> get name

"gaojingsong"

127.0.0.1:6379> 

[root@master src]# redis-benchmark --help

Usage: redis-benchmark [-h <host>] [-p <port>] [-c <clients>] [-n <requests]> [-k <boolean>]

 -h <hostname>      Server hostname (default 127.0.0.1)

 -p <port>          Server port (default 6379)

 -s <socket>        Server socket (overrides host and port)

 -a <password>      Password for Redis Auth

 -c <clients>       Number of parallel connections (default 50)

 -n <requests>      Total number of requests (default 100000)

 -d <size>          Data size of SET/GET value in bytes (default 2)

 -dbnum <db>        SELECT the specified db number (default 0)

 -k <boolean>       1=keep alive 0=reconnect (default 1)

 -r <keyspacelen>   Use random keys for SET/GET/INCR, random values for SADD

  Using this option the benchmark will expand the string __rand_int__

  inside an argument with a 12 digits number in the specified range

  from 0 to keyspacelen-1. The substitution changes every time a command

  is executed. Default tests use this to hit random keys in the

  specified range.

 -P <numreq>        Pipeline <numreq> requests. Default 1 (no pipeline).

 -e                 If server replies with errors, show them on stdout.

                    (no more than 1 error per second is displayed)

 -q                 Quiet. Just show query/sec values

 --csv              Output in CSV format

 -l                 Loop. Run the tests forever

 -t <tests>         Only run the comma separated list of tests. The test

                    names are the same as the ones produced as output.

 -I                 Idle mode. Just open N idle connections and wait.

Examples:

 Run the benchmark with the default configuration against 127.0.0.1:6379:

   $ redis-benchmark

 Use 20 parallel clients, for a total of 100k requests, against 192.168.1.1:

   $ redis-benchmark -h 192.168.1.104 -p 6379 -n 100000 -c 20

 Fill 127.0.0.1:6379 with about 1 million keys only using the SET test:

   $ redis-benchmark -t set -n 1000000 -r 100000000

 Benchmark 127.0.0.1:6379 for a few commands producing CSV output:

   $ redis-benchmark -t ping,set,get -n 100000 --csv

 Benchmark a specific command line:

   $ redis-benchmark -r 10000 -n 10000 eval 'return redis.call("ping")' 0

 Fill a list with 10000 random elements:

   $ redis-benchmark -r 10000 -n 10000 lpush mylist __rand_int__

 On user specified command lines __rand_int__ is replaced with a random integer

 with a range of values selected by the -r option.

[root@master src]# 

[root@master src]# ./redis-benchmark -h localhost  -p 6379 -n 100000 -c  20

====== PING_INLINE ======

  100000 requests completed in 3.07 seconds

  20 parallel clients

  3 bytes payload

  keep alive: 1



 

87.71% <= 1 milliseconds

99.02% <= 2 milliseconds

99.50% <= 3 milliseconds

99.74% <= 4 milliseconds

99.90% <= 5 milliseconds

99.95% <= 6 milliseconds

99.98% <= 7 milliseconds

99.99% <= 8 milliseconds

99.99% <= 9 milliseconds

100.00% <= 10 milliseconds

100.00% <= 11 milliseconds

100.00% <= 11 milliseconds

32530.91 requests per second

====== PING_BULK ======

  100000 requests completed in 3.01 seconds

  20 parallel clients

  3 bytes payload

  keep alive: 1

88.97% <= 1 milliseconds

99.07% <= 2 milliseconds

99.51% <= 3 milliseconds

99.74% <= 4 milliseconds

99.84% <= 5 milliseconds

99.91% <= 6 milliseconds

99.97% <= 7 milliseconds

99.99% <= 8 milliseconds

100.00% <= 9 milliseconds

100.00% <= 10 milliseconds

33189.51 requests per second

6808:M 22 Dec 12:23:34.353 * 10000 changes in 60 seconds. Saving...

6808:M 22 Dec 12:23:34.373 * Background saving started by pid 6844

6844:C 22 Dec 12:23:34.402 * DB saved on disk

6844:C 22 Dec 12:23:34.404 * RDB: 0 MB of memory used by copy-on-write

6808:M 22 Dec 12:23:34.475 * Background saving terminated with success

====== SET ======

  100000 requests completed in 3.23 seconds

  20 parallel clients

  3 bytes payload

  keep alive: 1

87.45% <= 1 milliseconds

98.73% <= 2 milliseconds

99.45% <= 3 milliseconds

99.73% <= 4 milliseconds

99.87% <= 5 milliseconds

99.92% <= 6 milliseconds

99.94% <= 7 milliseconds

99.95% <= 8 milliseconds

99.96% <= 9 milliseconds

99.96% <= 10 milliseconds

99.98% <= 11 milliseconds

99.98% <= 12 milliseconds

99.98% <= 14 milliseconds

99.98% <= 16 milliseconds

99.98% <= 17 milliseconds

99.98% <= 19 milliseconds

99.99% <= 36 milliseconds

99.99% <= 37 milliseconds

100.00% <= 38 milliseconds

100.00% <= 38 milliseconds

30959.75 requests per second

====== GET ======

  100000 requests completed in 3.12 seconds

  20 parallel clients

  3 bytes payload

  keep alive: 1

87.80% <= 1 milliseconds

98.61% <= 2 milliseconds

99.31% <= 3 milliseconds

99.64% <= 4 milliseconds

99.82% <= 5 milliseconds

99.93% <= 6 milliseconds

99.98% <= 7 milliseconds

99.99% <= 8 milliseconds

100.00% <= 9 milliseconds

32102.73 requests per second

====== INCR ======

  100000 requests completed in 3.00 seconds

  20 parallel clients

  3 bytes payload

  keep alive: 1

87.90% <= 1 milliseconds

99.01% <= 2 milliseconds

99.59% <= 3 milliseconds

99.82% <= 4 milliseconds

99.90% <= 5 milliseconds

99.93% <= 6 milliseconds

99.97% <= 7 milliseconds

99.99% <= 8 milliseconds

100.00% <= 9 milliseconds

100.00% <= 10 milliseconds

100.00% <= 11 milliseconds

33311.12 requests per second

====== LPUSH ======

  100000 requests completed in 3.77 seconds

  20 parallel clients

  3 bytes payload

  keep alive: 1

83.81% <= 1 milliseconds

98.29% <= 2 milliseconds

99.14% <= 3 milliseconds

99.53% <= 4 milliseconds

99.71% <= 5 milliseconds

99.80% <= 6 milliseconds

99.89% <= 7 milliseconds

99.94% <= 8 milliseconds

99.96% <= 9 milliseconds

99.96% <= 10 milliseconds

99.97% <= 11 milliseconds

99.98% <= 12 milliseconds

99.99% <= 13 milliseconds

99.99% <= 14 milliseconds

99.99% <= 15 milliseconds

99.99% <= 16 milliseconds

100.00% <= 18 milliseconds

100.00% <= 19 milliseconds

100.00% <= 20 milliseconds

26546.32 requests per second

====== RPUSH ======

  100000 requests completed in 3.48 seconds

  20 parallel clients

  3 bytes payload

  keep alive: 1

84.31% <= 1 milliseconds

98.87% <= 2 milliseconds

99.48% <= 3 milliseconds

99.76% <= 4 milliseconds

99.86% <= 5 milliseconds

99.95% <= 6 milliseconds

99.97% <= 7 milliseconds

99.99% <= 8 milliseconds

100.00% <= 9 milliseconds

100.00% <= 9 milliseconds

28710.88 requests per second

====== LPOP ======

  100000 requests completed in 3.66 seconds

  20 parallel clients

  3 bytes payload

  keep alive: 1

84.67% <= 1 milliseconds

98.01% <= 2 milliseconds

99.04% <= 3 milliseconds

99.53% <= 4 milliseconds

99.74% <= 5 milliseconds

99.90% <= 6 milliseconds

99.93% <= 7 milliseconds

99.97% <= 8 milliseconds

99.99% <= 9 milliseconds

100.00% <= 10 milliseconds

100.00% <= 10 milliseconds

27292.58 requests per second

====== RPOP ======

  100000 requests completed in 3.34 seconds

  20 parallel clients

  3 bytes payload

  keep alive: 1

85.79% <= 1 milliseconds

98.94% <= 2 milliseconds

99.51% <= 3 milliseconds

99.74% <= 4 milliseconds

99.88% <= 5 milliseconds

99.94% <= 6 milliseconds

99.97% <= 7 milliseconds

99.98% <= 8 milliseconds

99.99% <= 9 milliseconds

100.00% <= 10 milliseconds

100.00% <= 10 milliseconds

29985.01 requests per second

====== SADD ======

  100000 requests completed in 3.21 seconds

  20 parallel clients

  3 bytes payload

  keep alive: 1

87.73% <= 1 milliseconds

98.89% <= 2 milliseconds

99.56% <= 3 milliseconds

99.79% <= 4 milliseconds

99.92% <= 5 milliseconds

99.95% <= 6 milliseconds

99.98% <= 7 milliseconds

99.98% <= 8 milliseconds

99.99% <= 9 milliseconds

99.99% <= 10 milliseconds

100.00% <= 11 milliseconds

100.00% <= 11 milliseconds

31133.25 requests per second

====== SPOP ======

  100000 requests completed in 3.39 seconds

  20 parallel clients

  3 bytes payload

  keep alive: 1

85.95% <= 1 milliseconds

98.79% <= 2 milliseconds

99.47% <= 3 milliseconds

99.76% <= 4 milliseconds

99.91% <= 5 milliseconds

99.97% <= 6 milliseconds

99.98% <= 7 milliseconds

100.00% <= 8 milliseconds

100.00% <= 8 milliseconds

29481.13 requests per second

====== LPUSH (needed to benchmark LRANGE) ======

  100000 requests completed in 3.46 seconds

  20 parallel clients

  3 bytes payload

  keep alive: 1

85.96% <= 1 milliseconds

98.75% <= 2 milliseconds

99.43% <= 3 milliseconds

99.73% <= 4 milliseconds

99.88% <= 5 milliseconds

99.95% <= 6 milliseconds

99.97% <= 7 milliseconds

99.99% <= 8 milliseconds

100.00% <= 9 milliseconds

100.00% <= 10 milliseconds

28860.03 requests per second

====== LRANGE_100 (first 100 elements) ======

  100000 requests completed in 5.97 seconds

  20 parallel clients

  3 bytes payload

  keep alive: 1

74.81% <= 1 milliseconds

97.10% <= 2 milliseconds

98.68% <= 3 milliseconds

99.24% <= 4 milliseconds

99.55% <= 5 milliseconds

99.73% <= 6 milliseconds

99.86% <= 7 milliseconds

99.92% <= 8 milliseconds

99.97% <= 9 milliseconds

99.99% <= 10 milliseconds

99.99% <= 11 milliseconds

99.99% <= 12 milliseconds

100.00% <= 13 milliseconds

100.00% <= 15 milliseconds

100.00% <= 16 milliseconds

100.00% <= 18 milliseconds

16747.61 requests per second

====== LRANGE_300 (first 300 elements) ======

  100000 requests completed in 10.89 seconds

  20 parallel clients

  3 bytes payload

  keep alive: 1

58.40% <= 1 milliseconds

87.58% <= 2 milliseconds

95.63% <= 3 milliseconds

97.59% <= 4 milliseconds

98.50% <= 5 milliseconds

99.01% <= 6 milliseconds

99.37% <= 7 milliseconds

99.54% <= 8 milliseconds

99.69% <= 9 milliseconds

99.77% <= 10 milliseconds

99.84% <= 11 milliseconds

99.88% <= 12 milliseconds

99.91% <= 13 milliseconds

99.94% <= 14 milliseconds

99.96% <= 15 milliseconds

99.98% <= 16 milliseconds

99.99% <= 17 milliseconds

100.00% <= 18 milliseconds

100.00% <= 18 milliseconds

9182.74 requests per second

6808:M 22 Dec 12:24:35.036 * 10000 changes in 60 seconds. Saving...

6808:M 22 Dec 12:24:35.041 * Background saving started by pid 6849

6849:C 22 Dec 12:24:35.090 * DB saved on disk

6849:C 22 Dec 12:24:35.096 * RDB: 0 MB of memory used by copy-on-write

6808:M 22 Dec 12:24:35.141 * Background saving terminated with success

====== LRANGE_500 (first 450 elements) ======

  100000 requests completed in 16.20 seconds

  20 parallel clients

  3 bytes payload

  keep alive: 1

44.40% <= 1 milliseconds

74.81% <= 2 milliseconds

87.82% <= 3 milliseconds

94.15% <= 4 milliseconds

96.68% <= 5 milliseconds

97.75% <= 6 milliseconds

98.40% <= 7 milliseconds

98.86% <= 8 milliseconds

99.20% <= 9 milliseconds

99.40% <= 10 milliseconds

99.54% <= 11 milliseconds

99.64% <= 12 milliseconds

99.72% <= 13 milliseconds

99.80% <= 14 milliseconds

99.84% <= 15 milliseconds

99.88% <= 16 milliseconds

99.91% <= 17 milliseconds

99.93% <= 18 milliseconds

99.95% <= 19 milliseconds

99.96% <= 20 milliseconds

99.97% <= 21 milliseconds

99.98% <= 23 milliseconds

99.98% <= 24 milliseconds

99.99% <= 25 milliseconds

99.99% <= 26 milliseconds

99.99% <= 27 milliseconds

99.99% <= 45 milliseconds

99.99% <= 46 milliseconds

100.00% <= 47 milliseconds

100.00% <= 48 milliseconds

100.00% <= 48 milliseconds

6171.32 requests per second

====== LRANGE_600 (first 600 elements) ======

  100000 requests completed in 18.46 seconds

  20 parallel clients

  3 bytes payload

  keep alive: 1

40.02% <= 1 milliseconds

71.38% <= 2 milliseconds

84.18% <= 3 milliseconds

91.95% <= 4 milliseconds

95.62% <= 5 milliseconds

97.24% <= 6 milliseconds

98.01% <= 7 milliseconds

98.56% <= 8 milliseconds

98.95% <= 9 milliseconds

99.20% <= 10 milliseconds

99.35% <= 11 milliseconds

99.46% <= 12 milliseconds

99.58% <= 13 milliseconds

99.67% <= 14 milliseconds

99.75% <= 15 milliseconds

99.80% <= 16 milliseconds

99.84% <= 17 milliseconds

99.89% <= 18 milliseconds

99.90% <= 19 milliseconds

99.92% <= 20 milliseconds

99.94% <= 21 milliseconds

99.95% <= 22 milliseconds

99.96% <= 23 milliseconds

99.96% <= 24 milliseconds

99.97% <= 25 milliseconds

99.97% <= 26 milliseconds

99.98% <= 27 milliseconds

99.98% <= 28 milliseconds

99.98% <= 29 milliseconds

99.99% <= 30 milliseconds

99.99% <= 31 milliseconds

99.99% <= 32 milliseconds

99.99% <= 33 milliseconds

100.00% <= 34 milliseconds

100.00% <= 35 milliseconds

100.00% <= 36 milliseconds

5415.94 requests per second

====== MSET (10 keys) ======

  100000 requests completed in 3.76 seconds

  20 parallel clients

  3 bytes payload

  keep alive: 1

82.57% <= 1 milliseconds

98.52% <= 2 milliseconds

99.29% <= 3 milliseconds

99.63% <= 4 milliseconds

99.84% <= 5 milliseconds

99.93% <= 6 milliseconds

99.97% <= 7 milliseconds

99.99% <= 8 milliseconds

100.00% <= 9 milliseconds

100.00% <= 9 milliseconds

26609.90 requests per second

[root@master src]# 6808:M 22 Dec 12:25:36.080 * 10000 changes in 60 seconds. Saving...

6808:M 22 Dec 12:25:36.081 * Background saving started by pid 6856

6856:C 22 Dec 12:25:36.087 * DB saved on disk

6856:C 22 Dec 12:25:36.087 * RDB: 0 MB of memory used by copy-on-write

6808:M 22 Dec 12:25:36.181 * Background saving terminated with success

猜你喜欢

转载自gaojingsong.iteye.com/blog/2346827