memtier_benchmark:Redis高吞吐量基准测试工具
mhr18 2024-12-06 16:24 18 浏览 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中运行以下命令:
- ## 安装编译环境
- yum install -y autoconf automake make gcc-c++
- ## 安装依赖包
- yum install -y pcre-devel zlib-devel libmemcached-devel wget git
2. 编译安装libevent
CentOS 6.6预装的libevent版本较老,必须手动编译安装新版本的libevent。在shell中运行以下命令,下载、编译和安装libevent-2.0.22:
- cd /root/Downloads
- wget https://github.com/libevent/libevent/releases/download/release-2.0.22-stable/libevent-2.0.22-stable.tar.gz
- tar xvzf libevent-2.0.22-stable.tar.gz
- cd libevent-2.0.22-stable
- ./configure
- make && make install
3. 更新库文件配置
在shell中运行以下命令,更新libevent库文件的配置:
- echo "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:\${PKG_CONFIG_PATH}" >> /etc/profile
- source /etc/profile
- ldconfig /usr/local/lib
4. 编译安装memtier_benchmark工具
在shell中运行以下命令,下载、编译和安装memtier_benchmark工具,最后加入系统运行路径:
- cd /root/Downloads
- git clone https://github.com/RedisLabs/memtier_benchmark.git
- cd memtier_benchmark
- autoreconf -ivf
- ./configure --prefix=/usr/local/memtier
- make && make install
- echo "export PATH=/usr/local/memtier/bin:\${PATH}" >> /etc/profile
- source /etc/profile
5. 验证安装
在shell中运行以下命令,验证memtier_benchmark是否安装成功:
- memtier_benchmark --help
三、常用选项
memtier_benchmark是一款用于Memcached/Redis的NoSQL流量生成器和性能基准测试工具,可以在Shell中通过如下方式调用:
- 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字节之间均匀取值:
- 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的测试键访问模式符合常见的高斯分布的钟型曲线。当使用高斯分布时,你还可以控制和设置标准偏差和期望值,它们是高斯分布的关键参数。例如,你可以通过以下参数调用这个基准测试工具:
- 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,但是只会读取和写入最后一个字节,你可以通过以下参数调用这个基准测试工具:
- memtier-benchmark --data-offset=1048575 --data-size=1 <additional parameters>
相关推荐
- 【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库
-
如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...
- Pure Storage推出统一数据管理云平台及新闪存阵列
-
PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...
- 对Java学习的10条建议(对java课程的建议)
-
不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...
- SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!
-
官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...
- JDK21有没有什么稳定、简单又强势的特性?
-
佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...
- 「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了
-
在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...
- Java面试题及答案最全总结(2025版)
-
大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...
- 数据库日常运维工作内容(数据库日常运维 工作内容)
-
#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...
- 分布式之系统底层原理(上)(底层分布式技术)
-
作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...
- oracle 死锁了怎么办?kill 进程 直接上干货
-
1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...
- SpringBoot 各种分页查询方式详解(全网最全)
-
一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...
- 《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略
-
《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...
- LoadRunner(loadrunner录制不到脚本)
-
一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...
- Redis数据类型介绍(redis 数据类型)
-
介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...
- RMAN备份监控及优化总结(rman备份原理)
-
今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)