You need to enable JavaScript to run this app.
导航
COSBench 使用指南
最近更新时间:2025.06.13 15:28:17首次发布时间:2025.04.27 11:38:25
我的收藏
有用
有用
无用
无用

COSBench(Cloud Object Storage Benchmark) 是一款 Intel 团队基于 Java 语言开发,用于衡量对象存储服务性能的压测工具。您可以使用 COSBench 工具对 TOS 进行读写性能压测,便于您评估对象存储 TOS 的性能,确保业务稳定。

运行环境

推荐在 CentOS 7.6 及以上版本环境运行 COSBench 工具,其他环境可能存在非预期问题。

使用 COSBench

  1. 下载针对 TOS 的 COSBench 工具安装包,并解压至本地。

    说明

    COSBench 工具不能直接用于压测 TOS,使用该工具前,您需要修改 COSBench 工具源码,然后使用修改后的源码制作 TOS COSBench 工具包,具体操作,请参见附录:制作 TOS COSBench 工具包

  2. 执行以下命令,安装 COSBench 的依赖库。

    sudo yum install nmap-ncat java curl java-1.8.0-openjdk-devel -y
    
  3. 编辑 COSBench 工具包中的 s3-config-sample.xml 文件,配置压测任务信息。
    示例代码如下:

    <workload name="s3-sample" description="sample benchmark for s3">
    
      <storage type="s3" config="accesskey=***;secretkey=***;endpoint=http://tos-s3-cn-beijing.ivolces.com;path_style_access=false;" />
    
      <workflow>
    
        <workstage name="init" closuredelay="90">
          <work type="init" workers="1" config="cprefix=examplebucket;containers=r(1,2)" />
        </workstage>
    
        <workstage name="prepare">
          <work type="prepare" workers="10" config="cprefix=examplebucket;containers=r(1,2);objects=r(1,1000);sizes=c(4)KB" />
        </workstage>
    
        <workstage name="main">
          <work name="main" workers="100" runtime="300">
            <operation type="read" ratio="80" config="cprefix=examplebucket;containers=u(1,2);objects=u(1,1000)" />
            <operation type="write" ratio="20" config="cprefix=examplebucket;containers=u(1,2);objects=u(1001,2000);sizes=c(4)KB" />
          </work>
        </workstage>
    
        <workstage name="cleanup">
          <work type="cleanup" workers="10" config="cprefix=examplebucket;containers=r(1,2);objects=r(1,2000)" />
        </workstage>
    
        <workstage name="dispose">
          <work type="dispose" workers="1" config="cprefix=examplebucket;containers=r(1,2)" />
        </workstage>
    
      </workflow>
    
    </workload>
    

    压测任务配置包含 5 个阶段,您需要配置每个阶段的参数,说明如下:

    • init 阶段:初始化存储桶资源,该阶段会创建存储桶。
    • prepare 阶段:准备测试数据,该阶段主要向存储桶写入数据,需要指定写入对象的大小及数量,用于 main 阶段读取,如果在 main 阶段没有配置读取对象的操作,则无需设置此阶段。
    • main 阶段:定义测试行为,该阶段需要指定压测任务的运行时间、操作类型。
    • cleanup 阶段:清理测试数据,该阶段会删除上传的对象。
    • dispose 阶段:释放存储桶资源,该阶段会删除创建的存储桶。
      部分参数说明如下:
    参数
    说明

    accesskey

    火山引擎账号的 Access Key ID 信息。

    说明

    查看 AK/SK 信息的具体步骤,请参见获取当前身份的 Access Key

    secretkey

    火山引擎账号的 Secret Access Key 信息。

    endpoint

    S3 Endpoint 地址,详细介绍,请参见地域及访问域名

    cprefix

    存储桶名称的前缀。

    csuffix

    存储名称的后缀,可选参数。

    containers

    存储桶的数量和命名规则,例如设置 containers=r(1,2)cprefix=examplebucket,表示将创建 2 个存储桶,名称为 examplebucket1examplebucket2

    objects

    每个存储桶要写入的对象数量和命名规则。

    sizes

    设置对象的大小。

    ratio

    不同操作类型在测试中所占的比例,例如设置写入操作的 ratio80,读取操作的 ratio 20,表示在测试过程中,写入操作占总操作数的 80%,读取操作占总 20%。

    runtime

    测试持续时间,单位为秒。

    workers

    执行对应阶段的工作线程数。

  4. 编辑 cosbench-start.sh 文件,在该文件中添加如下参数,调整缓冲区的大小并关闭 md5 校验功能。缓存区的大小需不小于测试对象的大小,您可以根据实际情况设置该值。

    -Dcom.amazonaws.sdk.s3.defaultStreamBufferSize=104857600 -Dcom.amazonaws.services.s3.disableGetObjectMD5Validation=true -Dcom.amazonaws.services.s3.disablePutObjectMD5Validation=true
    

    Image

  5. 执行以下命令,启动 COSBench 工具。

    sudo bash start-all.sh
    

    在 Debian 等操作系统中,可能由于 nmap 工具版本差异,导致 nc 命令的探测操作失败,影响 COSBench 启动。如果您遇到此类情况,可以编辑 cosbench-start.sh 文件,在 nc 探测命令中增加 -q 1 参数来解决问题。
    Image

  6. 执行以下命令,提交测试任务。

    sudo bash cli.sh submit conf/s3-config-sample.xml
    
  7. 在浏览器打开 http://ip:19088/controller/index.html 地址(ip 需替换为压测服务器的 ip),查看测试任务状态。
    Image

  8. 完成测试后,执行以下命令,停止 COSBench 工具。

    sudo bash stop-all.sh
    

附录:制作 TOS COSBench 工具包

COSBench 工具不能直接用于压测 TOS,使用该工具前,您需要修改 COSBench 工具源码,然后使用修改后的源码制作 TOS COSBench 工具包。

环境准备

本文在以下环境制作 TOS COSBench 工具包,供您参考。

  • 操作系统:macOS x86_64
  • IDE 版本:Eclipse 4.15
  • JDK 版本:1.8

操作步骤

  1. GitHub 网站下载 COSBench 源码压缩包,并解压至本地。
    Image

  2. 在 Eclispe 导入 COSBench 源码。

    1. 在 Eclipse 中,单击 File > Import... > Existing Projects into Workspace。
    2. Import Projects 对话框,选择 COSBench 源码中的 dev 目录,单击 Finish
      Image
    3. 单击 Eclipse > Settings... > Plug-in Development > Target Platform。
    4. Target Platform 对话框,单击 Add... 。
    5. Target Content 对话框的 Name 处,自定义 platform 的名称。
    6. 单击 Add... > Directory,依次添加 COSBench 源码 dist 目录下的 main、osgi、osgi/libs 文件夹,单击 Finsh
      Image
    7. Target Platform 对话框,选中自定义的 platform,单击 Apply and Close
      Image
  3. 配置 S3Storage.java 文件。

    1. 在 cosbench-s3 文件夹中找到 S3Storage.java 文件。
    2. 修改 S3Storage.java 文件的 clientConf.withSignerOverride 的值,修改为 AWSS3V4SignerType,指定使用 AWS V4 签名。修改后的示例如下:
    clientConf.withSignerOverride("AWSS3V4SignerType");
    

    Image

    1. 修改 S3Storage.java 文件的 client.setS3ClientOptions 的值,增加 disableChunkedEncoding,禁用 ChunkedEncoding。修改后的示例如下:
    client.setS3ClientOptions(new S3ClientOptions().withPathStyleAccess(parms.getBoolean(PATH_STYLE_ACCESS_KEY)).disableChunkedEncoding());
    

    Image

    1. 修改 S3Storage.java 文件的 client.putObject 的值,从而可以使用 BufferedInputStream 上传对象。修改后的示例如下:
    client.putObject(container, object, new BufferedInputStream(data), metadata);
    

    Image

  4. 生成 COSBench 工具包。

    1. 在 Eclipse 中,单击 File > Export... > Plug-in Development > Deployable plugins and fragments。
    2. Deployable plug-ins and fragments 对话框**,**单击 Select All,设置 Directory 为 COSBench 源码中的 dist/osgi 目录。
      Image
    3. 单击 Options 页签,选中 Use class files compiled int the workspace,单击 Finish
      Image
  5. 在 COSBench 源码目录下,执行以下命令,创建交付包。

    sh pack.sh cosbench-tos
    

    Image

  6. 执行以下命令,打包 COSBench 工具包。

    zip -r -X cosbench-tos.zip cosbench-tos