百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

memtier_benchmark:Redis高吞吐量基准测试工具

mhr18 2024-12-06 16:24 14 浏览 0 评论

memtier_benchmark是Redis Labs推出的一款命令行工具,它能够产生各种各样的流量模式,可以对Memcached和Redis实例进行基准测试。这个工具提供了丰富的自定义选项和报表功能,通过命令行界面就能够轻松地使用。这个工具的一些优点如下所述:

  • memtier_benchmark同时支持Redis和Memcached(二进制和文本)协议,因此你可以对这两种NoSQL系统进行基准测试,甚至可以比较它们在不同场景中的性能。
  • memtier_benchmark能够启动多个工作线程(使用-t选项指定数量),每个线程能够驱动若干个客户端(使用-c选项指定数量)。多线程使得你能够更好的利用客户端主机的硬件资源,即便使用单台主机,你也能够生成较高的流量负载。
  • memtier_benchmark能够迭代运行多次基准测试(使用-x选项指定迭代次数),它会自动生成测试报告,包含最好和最坏的运行结果,以及聚合平均值。
  • memtier_benchmark能够控制GET和SET操作数量的比率(使用--ratio选项),这样便能针对各种访问模式进行基准测试。
  • memtier_benchmark能够控制GET和SET操作的访问模式。每种操作的访问模式都可以独立设置,可以是随机访问或连续访问。
  • memtier_benchmark能够为测试键设置相同的过期时间,也可以在指定范围之内设置不同的过期时间(使用--expiry-range选项)。

一、环境描述

1. 虚拟机配置

  • CPU:单核 2.4GHz
  • 内存:DDR3 1333 2GB
  • 硬盘:120GB
  • IP地址:192.168.21.136
  • 操作系统:CentOS 6.6 x86_64 Minimal

2. 编译环境

  • GCC:4.4.7 20120313
  • YUM源:官方Base源

3. memtier_benchmark

  • 版本:1.2.8
  • 安装方式:GIT下载和编译安装(本文内容)

二、安装步骤

1. 安装编译环境和依赖包

在shell中运行以下命令:


  1. ## 安装编译环境
  2. yum install -y autoconf automake make gcc-c++
  3. ## 安装依赖包
  4. yum install -y pcre-devel zlib-devel libmemcached-devel wget git

2. 编译安装libevent

CentOS 6.6预装的libevent版本较老,必须手动编译安装新版本的libevent。在shell中运行以下命令,下载、编译和安装libevent-2.0.22:


  1. cd /root/Downloads
  2. wget https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz
  3. tar xvzf libevent-2.0.22-stable.tar.gz
  4. cd libevent-2.0.22-stable
  5. ./configure
  6. make && make install

3. 更新库文件配置

在shell中运行以下命令,更新libevent库文件的配置:


  1. echo "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:\${PKG_CONFIG_PATH}" >> /etc/profile
  2. source /etc/profile
  3. ldconfig /usr/local/lib

4. 编译安装memtier_benchmark工具

在shell中运行以下命令,下载、编译和安装memtier_benchmark工具,最后加入系统运行路径:


  1. cd /root/Downloads
  2. git clone https://github.com/RedisLabs/memtier_benchmark.git
  3. cd memtier_benchmark
  4. autoreconf -ivf
  5. ./configure --prefix=/usr/local/memtier
  6. make && make install
  7. echo "export PATH=/usr/local/memtier/bin:\${PATH}" >> /etc/profile
  8. source /etc/profile

5. 验证安装

在shell中运行以下命令,验证memtier_benchmark是否安装成功:


  1. memtier_benchmark --help

三、常用选项

memtier_benchmark是一款用于Memcached/Redis的NoSQL流量生成器和性能基准测试工具,可以在Shell中通过如下方式调用:


  1. memtier_benchmark [options]

1. 连接和通用选项

  • -s或--server=ADDR
    服务器地址(默认值为localhost)。
  • -p或--port=PORT
    服务器端口(默认值为6379)。
  • -S或--unix-socket=SOCKET
    UNIX域套接字的名称(默认值为none)。
  • -P或--protocol=PROTOCOL
    使用的协议(默认值为redis)。其他受支持的协议:memcache_text和memcache_binary.
  • -x或--run-count=NUMBER
    完整测试的迭代执行次数。
  • -D或--debug
    输出调试信息。
  • --client-stats=FILE
    生成每个客户端的统计文件。
  • --out-file=FILE
    输出结果文件的名称(默认值为stdout)。
  • --show-config
    运行基准测试之前,输出详细的配置信息。
  • --hide-histogram
    不输出详细的延迟柱状图。
  • --help
    输出帮助信息。
  • --version
    输出版本信息。

2. 测试选项

  • -n或--requests=NUMBER
    每个客户端发出的请求总数(默认值为10000)。若使用“allkeys”,则基准测试会使用整个测试键的范围。
  • -c或--clients=NUMBER
    每个线程驱动的客户端的数量(默认值为50)。
  • -t或--threads=NUMBER
    基准测试使用的线程数量(默认值为4)。
  • --test-time=SECS
    基准测试的持续时间,以秒为单位。
  • --ratio=RATIO
    SET和GET操作的比率(默认值为1:10)。
  • --pipeline=NUMBER
    管道请求的并发数量(默认值为1)。
  • --reconnect-interval=NUM
    执行重新连接之后的请求数量。
  • --multi-key-get=NUM
    使用Redis的MGET命令,这个命令最多可以一次获取NUM个键的值(默认值为0)。
  • -a或--authenticate=CREDENTIALS
    登录Redis服务器时使用的凭证。根据使用的协议,可以是PASSWORD或USER:PASSWORD。
  • --select-db=DB
    当测试一台Redis服务器时,选择它的DB编号。
  • --distinct-client-seed
    每个客户端都使用一个不同的随机数种子。
  • --randomize
    基于时间戳的随机数种子(默认为常数值)。

3. 对象选项

  • -d或--data-size=SIZE
    对象数据的大小(默认值为32)。
  • --data-offset=OFFSET
    值的真实大小等于data-size + data-offset。基准测试将会使用Redis的SETRANGE和GETRANGE命令(默认值为0)。
  • -R或--random-data
    基准测试将会使用随机化的测试数据。
  • --data-size-range=RANGE
    基准测试使用的测试数据的大小是随机的,数据大小在指定的范围之内(min-max)。
  • --data-size-list=LIST
    根据权重列表设置测试数据的大小(size1:weight1,..sizeN:weightN)。
  • --data-size-pattern=R|S
    当这个选项设置为R时,就需要和--data-size-range选项一起使用,测试数据的大小将会在指定的范围之内随机取值。当这个选项设置为S时,定义的测试数据大小将会在测试键的范围之内均匀分布,请参考--key-maximum选项。默认值为R。
  • --expiry-range=RANGE
    测试键的过期时间是一个随机值,这个随机值在指定的范围之内。

4. 导入数据选项

  • --data-import=FILE
    从文件中读取对象数据。
  • --data-verify
    当基准测试结束时,执行数据验证过程。
  • --verify-only
    只执行--data-verify选项的数据验证过程,而不会执行其他测试。
  • --generate-keys
    为导入的对象生成测试键。
  • --no-expiry
    忽略导入数据中的过期信息。

5. 测试键选项

  • --key-prefix=PREFIX
    测试键的前缀(默认值为“memtier-”)。
  • --key-minimum=NUMBER
    测试键ID的最小值(默认值为0)。
  • --key-maximum=NUMBER
    测试键ID的最大值(默认值为10000000)。
  • --key-pattern=PATTERN
    SET和GET操作的访问模式(默认值为R:R)。可以取以下值:
    G:高斯分布;
    R:均匀随机;
    S:连续访问;
    P:并行访问(在连续访问模式中,每个客户端都具有测试键范围的一个子集)。
  • --key-stddev
    高斯分布使用的标准偏差(默认值为测试键范围的1/6)。
  • --key-median
    高斯分布使用的期望值(默认值为测试键范围的中心值)。

6. 等待选项

  • --wait-ratio=RATIO
    SET和WAIT操作的比率(默认不使用WAIT命令,默认值为1:0)。
  • --num-slaves=RANGE
    等待指定范围之内的随机数量的从机作出应答。
  • --wait-timeout=RANGE
    等待指定范围之内的时间,单位为毫秒(正太分布的中心值在这个范围的中间)。

四、伪随机数据、高斯访问模式和范围操作

1. 伪随机数据

memtier_benchmark基准测试工具能够生成随机化的测试数据,而数据大小则取决于已知的大小范围。首先,将--data-size-pattern选项设置为“S”(连续分配);然后,通过--data-size-range选项指定随机化的测试数据的大小范围。以下示例将会产生基准测试的键空间,其中的测试数据的大小将会在4字节至204字节之间均匀取值:


  1. memtier-benchmark --random-data --data-size-range=4-204 --data-size-pattern=S --key-minimum=200 --key-maximum=400 <additional parameters>

在上文的示例中,我们已经使用--random-data选项来生成随机数据了;除此之外,我们还使用--key-minimum和--key-maximum选项来控制测试键ID的取值范围,总共产生200个测试键。第一个测试键,memtier-200,将会持有4字节的数据;下一个测试键,将会持有5字节的数据;以此类推,直到最后一个测试键,memtier-400,将会持有204字节的数据。

2. 高斯访问模式

memtier_benchmark基准测试工具能够使用高斯分布(也叫做正态分布)来访问测试数据。在支持高斯访问模式之前,你可以将基准测试的访问模式设置为均匀随机分布或连续分布。但是,为了更好的模拟真实用例,你可以使用这个新的选项,确保memtier_benchmark的测试键访问模式符合常见的高斯分布的钟型曲线。当使用高斯分布时,你还可以控制和设置标准偏差和期望值,它们是高斯分布的关键参数。例如,你可以通过以下参数调用这个基准测试工具:


  1. memtier-benchmark --random-data --data-size-range=4-204 --data-size-pattern=S --key-minimum=200 --key-maximum=400 --key-pattern=G:G --key-stddev=10 --key-median=300 <additional parameters>

上述调用方式会将大部分的读/写访问集中在第100个(memtier-300)测试键上。

3. 范围操作

memtier-benchmark基准测试工具支持Redis的SETRANGE和GETRANGE命令,可用于代替SET和GET命令。这个功能使得你在进行基准测试时,能够明显降低网络流量的消耗,同时你仍然可以使用较大的测试数据。例如,你可以将测试键的值的大小设置为1MB,但是只会读取和写入最后一个字节,你可以通过以下参数调用这个基准测试工具:


  1. memtier-benchmark --data-offset=1048575 --data-size=1 <additional parameters>

相关推荐

使用 Docker 部署 Java 项目(通俗易懂)

前言:搜索镜像的网站(推荐):DockerDocs1、下载与配置Docker1.1docker下载(这里使用的是Ubuntu,Centos命令可能有不同)以下命令,默认不是root用户操作,...

Spring Boot 3.3.5 + CRaC:从冷启动到秒级响应的架构实践与踩坑实录

去年,我们团队负责的电商订单系统因扩容需求需在10分钟内启动200个Pod实例。当运维组按下扩容按钮时,传统SpringBoot应用的冷启动耗时(平均8.7秒)直接导致流量洪峰期出现30%的请求超时...

《github精选系列》——SpringBoot 全家桶

1简单总结1SpringBoot全家桶简介2项目简介3子项目列表4环境5运行6后续计划7问题反馈gitee地址:https://gitee.com/yidao620/springbo...

Nacos简介—1.Nacos使用简介

大纲1.Nacos的在服务注册中心+配置中心中的应用2.Nacos2.x最新版本下载与目录结构3.Nacos2.x的数据库存储与日志存储4.Nacos2.x服务端的startup.sh启动脚...

spring-ai ollama小试牛刀

序本文主要展示下spring-aiollama的使用示例pom.xml<dependency><groupId>org.springframework.ai<...

SpringCloud系列——10Spring Cloud Gateway网关

学习目标Gateway是什么?它有什么作用?Gateway中的断言使用Gateway中的过滤器使用Gateway中的路由使用第1章网关1.1网关的概念简单来说,网关就是一个网络连接到另外一个网络的...

Spring Boot 自动装配原理剖析

前言在这瞬息万变的技术领域,比了解技术的使用方法更重要的是了解其原理及应用背景。以往我们使用SpringMVC来构建一个项目需要很多基础操作:添加很多jar,配置web.xml,配置Spr...

疯了!Spring 再官宣惊天大漏洞

Spring官宣高危漏洞大家好,我是栈长。前几天爆出来的Spring漏洞,刚修复完又来?今天愚人节来了,这是和大家开玩笑吗?不是的,我也是猝不及防!这个玩笑也开的太大了!!你之前看到的这个漏洞已...

「架构师必备」基于SpringCloud的SaaS型微服务脚手架

简介基于SpringCloud(Hoxton.SR1)+SpringBoot(2.2.4.RELEASE)的SaaS型微服务脚手架,具备用户管理、资源权限管理、网关统一鉴权、Xss防跨站攻击、...

SpringCloud分布式框架&amp;分布式事务&amp;分布式锁

总结本文承接上一篇SpringCloud分布式框架实践之后,进一步实践分布式事务与分布式锁,其中分布式事务主要是基于Seata的AT模式进行强一致性,基于RocketMQ事务消息进行最终一致性,分布式...

SpringBoot全家桶:23篇博客加23个可运行项目让你对它了如指掌

SpringBoot现在已经成为Java开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成。本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成,并且对各种技术通...

开发好物推荐12之分布式锁redisson-sb

前言springboot开发现在基本都是分布式环境,分布式环境下分布式锁的使用必不可少,主流分布式锁主要包括数据库锁,redis锁,还有zookepper实现的分布式锁,其中最实用的还是Redis分...

拥抱Kubernetes,再见了Spring Cloud

相信很多开发者在熟悉微服务工作后,才发现:以为用SpringCloud已经成功打造了微服务架构帝国,殊不知引入了k8s后,却和CloudNative的生态发展脱轨。从2013年的...

Zabbix/J监控框架和Spring框架的整合方法

Zabbix/J是一个Java版本的系统监控框架,它可以完美地兼容于Zabbix监控系统,使得开发、运维等技术人员能够对整个业务系统的基础设施、应用软件/中间件和业务逻辑进行全方位的分层监控。Spri...

SpringBoot+JWT+Shiro+Mybatis实现Restful快速开发后端脚手架

作者:lywJee来源:cnblogs.com/lywJ/p/11252064.html一、背景前后端分离已经成为互联网项目开发标准,它会为以后的大型分布式架构打下基础。SpringBoot使编码配置...

取消回复欢迎 发表评论: