# Vdbench

## 一、vdbench简介    

​    vdbench是一个 I/O 工作负载生成器,用于验证数据完整性和度量直接附加和网络连接的存储的性能。它是一个免费的工具,容易使用,而且常常用于测试和基准测试。

可以使用vdbench测试磁盘和文件系统的读写性能。

**vdbench中常用的一些名词解释:**

- HD    主机定义

- SD    存储定义

- WD   工作负载定义

- RD    运行定义

- FSD   文件系统存储定义

- FWD  文件工作负载定义

## 二、vdbench的安装和配置

###   1、linux下配置vdbench

   (1)下载Vdbench

  下载地址:http://www.oracle.com/technetwork/cn/server-storage/vdbench-downloads-1901681-zhs.html           下载之后解压;多客户端情况下解压到相同路径下

  (2)然后安装java(vdbench的运行依赖于java)

  ```
java -version
yum install jre
  ```

 (3)进入vdbench相应目录下./vdbench -t 来测试一下vdbench的可用性,如果正常,会在目录下自动生成一个output目录。

  ```
[root@localhost vdbench50407]# cd /vdbench50407/
[root@localhost vdbench50407]# ./vdbench -t
  ```

  显示如下信息:

![1611040361482](MdSource\1611040361482.png)

### 2、Windows下配置vdbench

   (1)解压vdbench包(vdbench的linux版本的包和windows是同一个),解压之后,下载32位的java,安装java,配置windows上java的环境变量;(注意:目前vdbench在windows支持32位的java)
   (2)打开dos窗口,切换到vdbench目录,执行命令 vdbench -t来测试vdbench的可用性

```
PS C:\vdbench> .\vdbench -t
```

![1611040443741](MdSource\1611040443741.png)   

(3)多客户端场景下,先在每个客户端上执行.\vdbench rsh 开启监控

## 三、vdbench的使用

  vdbench运行依赖配置文件,vdbench通过读取配置文件参数执行测试场景。

###   **1、脚本的编写**

  这部分可以参考解压后的example文件;也可以参考output目录下的parmfile.html

```
[root@localhost vdbench50407]# cat example1
```

![1611040725403](MdSource\1611040725403.png)

  ```
  [root@localhost output]# cat parmfile.html
  ```

![1611040518276](MdSource\1611040518276.png)  

###   **2、vdbench文件系统测试**

​        **对于一个文件系统,配置以下参数:**

  (1)**HD**(Host Define):主机定义。与虚拟块设备相同。

​    非必选项,单机运行时不需要配置HD参数,一般只有在多主机联机测试时才需要配置

- hd= 标识主机定义的名称,多主机运行时,可以使用hd1、hd2、hd3…区分 ,第一行为公共参数
- system= 主机IP地址或主机名
- vdbench= vdbench执行文件存放路径,当多主机存放路径不同时,可在hd定义时单独指定
- user= slave和master通信使用用户
- shell= 可选值为`rsh`、`ssh`或`vdbench`,默认值为`rsh`,多主机联机测试时,mater和slave主机间通信方式  当参数值为`rsh`时,需要配置master和slave主机rsh互信,考虑到rsh使用明文传输,安全级别不够,通常情况下不建议使用这种通信方式  当参数值为`ssh`时,需要配置master和slave主机ssh互信,通常Linux主机联机时使用此通信方式  当参数值为`vdbench`,需要在所有slave主机运行`vdbench rsh`启用vdbench本身的rsh守护进程,通常Window主机联机时使用此通信方式

**(2)FSD**(File System Define):文件系统定义

- fsd= 标识文件系统定义的名称,多文件系统时(`fsd1`、`fsd2`、`fsd3`…),可以指定`default`(将相同的参数作为所有fsd的默认值)
- anchor= 文件写入根目录
- width=  每层文件夹的子文件夹数
- depth= 创建目录层级数(即目录深度)
- files=  测试文件个数(vdbench测试过程中会生成多层级目录结构,实际只有最后一层目录会生成测试文件)
- sizes= (size,size,...) 每个测试文件大小
- distribution= 可选值为`bottom`或`all`,默认为`bottom`  –当参数值为`bottom`时,程序只在最后一层目录写入测试文件  –当参数值为`all`时,程序在每一层目录都写入测试文件
- openflags= 用于打开一个文件系统 (Solaris) 的 flag_list,一般要加o_direct参数绕过缓存
- shared= 可选值为`yes`或`no`,默认值为`no`,一般只有在多主机联机测试时指定  vdbench不允许不同的slave之间共享同一个目录结构下的所有文件,因为这样会带来很大的开销,但是它们允许共享同一个目录结构。加入设置了shared=yes,那么不同的slave可以平分一个目录下所有的文件来进行访问,相当于每个slave有各自等分的访问区域,因此不能测试多个客户的对同一个文件的读写  –当多主机联机测试时,写入的根目录`anchor`为同一个路径时,需要指定参数值为`yes`
- 最后一层生成文件夹个数=`width`^`depth`   测试文件个数=(`width`^`depth`)*`files`

**(3)FWD**(FileSystem Workload Defile):文件系统工作负载定义

- fwd= 标识文件系统工作负载定义的名称,多文件系统工作负载定义时,可以使用fwd1、fwd2、fwd3…区分
- fsd= 要使用的文件系统定义的 ID。
- host= 要用于此工作负载的主机的 ID。
- fileio= random 或 sequential,表示文件 I/O 将执行的方式。
- fileselect= random 或 sequential,标识选择文件或目录的方式。
- xfersizes= 数据传输(读取和写入操作)处理的数据大小。
- operation= mkdir、rmdir、create、delete、open、close、read、write、getattr 和 setattr。选择要执行的单个文件操作。
- rdpct= 可选值为`0`~`100`,读操作占比百分比,一般混合读写时需要指定,当值为60时,则混合读写比为6:4
- threads= 此工作负载的并发线程数量。每个线程需要至少 1 个文件。

**(4)RD**(Run Define):运行定义

- rd= 标识运行定义的名称

- fwd= 要使用的文件系统工作负载定义的 ID,fwd*标识执行所有工作负载。

- fwdrate= 每秒执行的文件系统操作数量。设置为max,表示不做任何限制,按照最大强度自适应

- format= 可选值为`yes`、`no`或`restart`,标识预处理目录和文件结构的方式  

  –yes表示删除目录和文件结构再重新创建  

  –no表示不删除目录和文件结构  

  –restart表示只创建未生成的目录或文件,并且增大未达到实际大小的文件

- operations= 覆盖 fwd 操作。选项相同。

- elapsed= 测试运行持续时间(单位为秒)

- interval= 结果输出打印时间间隔(单位为秒)

### **3、运行脚本**

  ```
  ./vdbench -f example1 -o dir_name -jn
  ```

其中-jn是为了做数据校验,-o为本次生成的结果所在目录,会自动生成

```
./vdbench -f paracgf -o test1 -jn
```

![1611041653756](MdSource\1611041653756.png)

###   **4、输出结果**

​      会回写输出一大堆东西,如果没有出现错误,最后会出现:

  ```
   Vdbench execution completed successfully. Output directory: /vdbench50407/output
  ```

  ![1611041673362](MdSource\1611041673362.png)

每次运行后,vdbench 会创建一个dir_name文件夹 :

![1611042904705](MdSource\1611042904705.png)

  **(1)errorlog.html**——当为测试启用了数据验证(-jn)时,它可包含一些数据块中的错误的相关信息:

![1611042712881](MdSource\1611042712881.png)

  - 无效的密钥读取
  - 无效的 lba 读取(一个扇区的逻辑字节地址)
  - 无效的 SD 或 FSD 名称读取
  - 数据损坏,即使在使用错误的 lba 或密钥时
  - 数据损坏
  - 坏扇区

  **(2)flatfile.html**——包含 vdbench 生成的一种逐列的 ASCII 格式的信息。

  **(3)histogram.html**—— 仅适用于文件系统工作负载。响应时间直方图,报告所有请求的FWD操作的响应时间详细信息。

  **(4)logfile.html**——包含 Java 代码写入控制台窗口的每行信息的副本。logfile.html 主要用于调试用途

  **(5)parmfile.html**——显示已包含用于测试的配置文件

  **(6)sdN.histogram.html、sdN.html**——每个 N 存储定义的柱状图和存储定义 “N” 报告。

  **(7)wdN.histogram.html、wdN.html**——每个 N 负载定义的柱状图和负载定义 “N” 报告。

  **(8)hdN.histogram.html、hdN.html**——每个 N 主机定义的柱状图和主机定义 “N” 报告。

  **(9)summary.html**——主要报告文件,显示为在每个报告间隔的每次运行生成的总工作负载,以及除第一个间隔外的所有间隔的加权平均值。

  - interval:报告间隔序号

  - I/O rate:每秒观察到的平均 I/O 速率

  - MB sec:传输的数据的平均 MB 数

  - bytes I/O:平均数据传输大小

  - read pct:平均读取百分比

  - resp time:以读/写请求持续时间度量的平均响应时间。所有 vdbench 时间都以毫秒为单位。

  - resp max:在此间隔中观察到的最大响应时间。最后一行包含最大值总数。

  - resp stddev:响应时间的标准偏差

  - cpu% sys+usr:处理器繁忙 = 100(系统 + 用户时间)(Solaris、Windows、Linux)

  - cpu% sys:处理器利用率:系统时间

  - window :start summary.html unix:firefox summary.html &

  **(10)totals.html**——记录全部数据计算之后的平均值,一般测试结果从该文件取值,除第一个间隔外所有间隔的加权平均值

(11)hdx-n.stdout.html——包含一个特定从属服务器的日志信息

(12)parascan.html——包含当前正在分析的参数数据的运行轨迹。如果出现解析错误或参数错误,此文件将显示正在解析的最新参数。

(13)skew.html——工作量偏差报告。




## 四、运行

### 1、单机

单机不需要添加HD,否则会有如下报错:

```
Current system IP address is '127.0.0.1'. Invalid network definition for multi-host processing.
```

linux:

```
fsd=fsd1,anchor=/mnt/nfs,depth=1,width=2,files=10,size=100m,openflags=o_direct
fwd=fwd1,fsd=fsd1,host=localhost,operation=write,xfersize=1m,fileio=sequantial,fileselect=sequantial,threads=2
rd=rd1,fwd=fwd1,fwdrate=max,format=restart,elapsed=300,interval=1
```

windows

```
fsd=fsd1,anchor=E:\Sigle-FileSystem,depth=2,width=3,files=10,size=200M
fwd=fwd1,fsd=fsd1,operation=write,xfersize=1M,fileio=sequential,fileselect=rando
m,threads=2
rd=rd1,fwd=fwd1,fwdrate=max,format=yes,elapsed=30,interval=1
```



### 2、联机

#### linux免密通信

10.0.20.232 node232
10.0.20.233 node233
10.0.20.234 node234

将每个节点IP和主机名的映射关系写入到`/etc/hosts`配置文件内

```
echo '10.0.20.232 node232' >> /etc/hosts
echo '10.0.20.233 node233' >> /etc/hosts
echo '10.0.20.234 node234' >> /etc/hosts
```

主节点生成公钥文件,并拷贝到其他从节点(配置主节点到从节点免秘钥登录)

```
ssh-keygen
ssh-copy-id node233
ssh-copy-id node234
```



#### windows建立通信

1、所有slave主机运行vdbench本身rsh守护进程

```
./vdbench rsh
```

此命令是用于windows系统多主机联机跑vdbench时使用,因为windows操作系统不支持ssh,因此,vdbench提供了rsh的通信方式。在目标主机上执行此工具后,vdbench将会启动一个java socket用于vdbench slave与master之间通信

2、master主机运行测试参数文件即可

```
三节点针对文件系统联机测试,1M顺序写,目录深度为1,每层目录数为2,每个目录文件数为2,每个文件大小为200M,测试时间为30s,报告间隔1s
PS C:\vdbench> more .\Multi-FileSystem.txt

hd=default,vdbench=C:\vdbench,user=Eli,shell=vdbench
hd=hd1,system=10.0.20.225
hd=hd2,system=10.0.20.221
fsd=fsd1,anchor=Z:\Sigle-FileSystem-01,depth=1,width=2,files=2,size=200M
fsd=fsd2,anchor=Z:\Sigle-FileSystem-02,depth=1,width=2,files=2,size=200M
fwd=default,operation=write,xfersize=1M,fileio=sequential,fileselect=random,threads=4
fwd=fwd1,fsd=fsd1,host=hd1
fwd=fwd2,fsd=fsd2,host=hd2
rd=rd1,fwd=fwd*,fwdrate=max,format=yes,elapsed=30,interval=1
```

```
vdbench -f "Multi-FileSystem.txt"
```



## 五、结果分析

当vdbench运行完负载测试后,会在安装目录下生成目标文件夹,里边包含测试结果文件

### 1、输出文件

**errorlog.html**

- 无效的密钥读取
- 无效的 lba 读取(一个扇区的逻辑字节地址)
- 无效的 SD 或 FSD 名称读取
- 数据损坏
- 坏扇区

**flatfile.html**

vdbench 生成的一种逐列的 ASCII 格式的信息,可以使用`parseflat`参数解析结果

  ./vdbench parseflat -i <flatfile.html> -o output.csv [-c col1 col2 ..][-a] [-f col1 value1 col2 value2..]
    -i input flatfile, e.g. output/flatfile.html
    -o output CSV file name (default stdout)
    -c which column to write to CSV. Columns are written in the order specified
    -f filters: 'if (colX == valueX) ... ...' (Alphabetic compare)
    -a include only the 'avg' data. Default: include only non-avg data.
    -i是表示待分析的文件,这里写vdbench输出目录里的flatfile.html这个文件,写其它文件不能正常解析;
    -o是解析后的输出文件,可以手动指定存放目录。文件格式为CSV,此文件的列由-c参数指定,列的顺序为-c参数的顺序
    -a是表示csv文件中只记录测试过程中的avg值,根据自己的需求格式导出

```
* Run             : Name of run from RD=
* Interval        : Reporting interval number
* Xfersize        : data transfer size requested
* Threads         : number of threads requested
* Reqrate         : Requested FWD rate
* Rate            : Requested operations per second
* Rate_std        : Requested operations per second standard deviation
* Rate_max        : Requested operations per second max
* Resp            : Requested response time
* Resp_std        : Requested response time standard deviation
* Resp_max        : Requested response time max
* MB/sec          : Megabytes per second (MB=1024*1024)
* MB_read         : Megabytes read per second
* MB_write        : Megabytes written per second
* Read_rate       : Reads per second
* Read_rate_std   : Reads per second stddev
* Read_rate_max   : Reads per second max
* Read_resp       : Read response time
* Read_resp_std   : Read response time stddev
* Read_resp_max   : Read response time max
* Write_rate      : Writes per second
* Write_rate_std  : Writes per second stddev
* Write_rate_max  : Writes per second max
* Write_resp      : Write response time
* Write_resp_std  : Write response time stddev
* Write_resp_max  : Write response time max
* Mkdir_rate      : Mkdirs per second
* Mkdir_rate_std  : Mkdirs per second stddev
* Mkdir_rate_max  : Mkdirs per second max
* Mkdir_resp      : Mkdir response time
* Mkdir_resp_std  : Mkdir response time stddev
* Mkdir_resp_max  : Mkdir response time max
* Rmdir_rate      : Rmdirs per second
* Rmdir_rate_std  : Rmdirs per second stddev
* Rmdir_rate_max  : Rmdirs per second max
* Rmdir_resp      : Rmdir response time
* Rmdir_resp_std  : Rmdir response time stddev
* Rmdir_resp_max  : Rmdir response time max
* Create_rate     : Creates per second
* Create_rate_std : Creates per second stddev
* Create_rate_max : Creates per second max
* Create_resp     : Create response time
* Create_resp_std : Create response time stddev
* Create_resp_max : Create response time max
* Open_rate       : Opens per second
* Open_rate_std   : Opens per second stddev
* Open_rate_max   : Opens per second max
* Open_resp       : Open response time
* Open_resp_std   : Open response time stddev
* Open_resp_max   : Open response time max
* Close_rate      : Closes per second
* Close_rate_std  : Closes per second stddev
* Close_rate_max  : Closes per second max
* Close_resp      : Close response time
* Close_resp_std  : Close response time stddev
* Close_resp_max  : Close response time max
* Delete_rate     : Deletes per second
* Delete_rate_std : Deletes per second stddev
* Delete_rate_max : Deletes per second max
* Delete_resp     : Delete response time
* Delete_resp_std : Delete response time stddev
* Delete_resp_max : Delete response time max
* Getattr_rate    : Getattrs per second
* Getattr_rate_std: Getattrs per second stddev
* Getattr_rate_max: Getattrs per second max
* Getattr_resp    : Getattr response time
* Getattr_resp_std: Getattr response time stddev
* Getattr_resp_max: Getattr response time max
* Setattr_rate    : Setattrs per second
* Setattr_rate_std: Setattrs per second stddev
* Setattr_rate_max: Setattrs per second max
* Setattr_resp    : Setattr response time
* Setattr_resp_std: Setattr response time stddev
* Setattr_resp_max: Setattr response time max
* Access_rate     : Accesses per second
* Access_rate_std : Accesses per second stddev
* Access_rate_max : Accesses per second max
* Access_resp     : Access response time
* Access_resp_std : Access response time stddev
* Access_resp_max : Access response time max
* Compratio       : Requested compression ratio
* Dedupratio      : Requested dedup ratio
* cpu_used        : kstat: cpu% user+sys
* cpu_user        : kstat: cpu% user
* cpu_kernel      : kstat: cpu% sys
* cpu_wait        : kstat: cpu% wait
* cpu_idle        : kstat: cpu% idle
```

  示例如下:

```
   .\vdbench.bat parseflat -i .\Multi-FileSystem\flatfile.html -c run Interval Xfersize Threads Reqrate Rate Rate_std Rate_max Resp Resp_std Resp_max MB/sec MB_read MB_write Read_rate Read_rate_std Read_rate_max   -o .\output.csv
vdbench parseflat arguments:
Argument 0: -i
Argument 1: .\Multi-FileSystem\flatfile.html
Argument 2: -c
Argument 3: run
Argument 4: Interval
Argument 5: Xfersize
Argument 6: Threads
Argument 7: Reqrate
Argument 8: Rate
Argument 9: Rate_std
Argument 10: Rate_max
Argument 11: Resp
Argument 12: Resp_std
Argument 13: Resp_max
Argument 14: MB/sec
Argument 15: MB_read
Argument 16: MB_write
Argument 17: Read_rate
Argument 18: Read_rate_std
Argument 19: Read_rate_max
Argument 20: -o
Argument 21: .\output.csv
17:37:42.271 ParseFlat completed successfully.
```

![16111336172489](MdSource\16111336172489.png)

**histogram.html**  一种包含报告柱状图的响应时间、文本格式的文件

**logfile.html**  包含 Java 代码写入控制台窗口的每行信息的副本。logfile.html 主要用于调试用途

**parmfile.html**  包含测试运行配置参数信息

**summary.html**  记录全部数据信息,显示每个报告间隔内总体性能情况及工作负载情况,以及除第一个间隔外的所有间隔的加权平均值

**totals.html**  记录全部数据计算之后的平均值,一般测试结果从该文件取值,除第一个间隔外所有间隔的加权平均值

### 2、结果分析

#### 2.1、文件系统

测试参数如下:hd=default,vdbench=C:\vdbench,user=Eli,shell=vdbench

```
hd=hd1,system=10.0.20.225
hd=hd2,system=10.0.20.221
fsd=fsd1,anchor=Z:\Sigle-FileSystem-01,depth=1,width=2,files=2,size=200M
fsd=fsd2,anchor=Z:\Sigle-FileSystem-02,depth=1,width=2,files=2,size=200M
fwd=default,operation=write,xfersize=1M,fileio=sequential,fileselect=random,threads=4
fwd=fwd1,fsd=fsd1,host=hd1car
fwd=fwd2,fsd=fsd2,host=hd2
rd=rd1,fwd=fwd*,fwdrate=max,format=yes,elapsed=30,interval=1
```

测试结果如下:

![1611049230241](MdSource\1611049230241.png)



`totals.html`一般包括两个部分,第一部分为文件存储目录结构及数据填充的平均性能值,第二部分为执行测试过程中除第一个时间间隔外所有时间间隔平均性能值,主要看第二部分的内容

- **Interval**
   报告间隔序号,测试结果一般为除第一个时间间隔外所有时间间隔加权平均值
   如elapsed=600,interval=5,则性能结果为第2个间隔到第120个间隔的平均值(avg_2-120)
- **ReqstdOps**
  - **rate**
     每秒读写I/O个数(**读写IOPS**),可以通过`rd`运行定义参数`fwdrate`控制
     当`fwdrate`为`max`时,以最大I/O速率运行工作负载
     当`fwdrate`为低于最大I/0速率的一个数值时,可以限制读写速度,以固定I/O速率运行工作负载
  - **resp**
     读写请求响应时间(**读写时延**),单位为`ms`
- **cpu%**
  - **tatol**
     总的cpu占用率
  - **sys**
     系统cpu占用率
- **read pct**
   读取请求占总请求数百分比占比,当为0时表示写,当为100时表示读
- **read**
  - **rate**
     每秒读I/O个数(**读IOPS**)
  - **resp**
     读请求响应时间(**读时延**),单位为`ms`
- **write**
  - **rate**
     每秒写I/O个数(**写IOPS**)
  - **resp**
     写请求响应时间(**写时延**),单位为`ms`
- **mb/sec**
  - **read**
     每秒读取速度
  - **write**
     每秒写入速度
  - **total**
     每秒读写速度总和
- **xfersize**
   每个读写I/O传输数据量(即单个读写I/O大小),单位为字节`B`

## 六、测试说明

### 1、测试总结

1. 线程数(thread)一般设置为客户端CPU线程数总大小 `grep 'processor' /proc/cpuinfo | sort -u | wc -l`
2. 测试总数据量需要为客户端内存大小两倍
3. 测试读模型时需要清理客户端缓存信息 `sync;echo 3 > /proc/sys/vm/drop`

### 2、常见测试参数

- **4M顺序写**
   目录深度2、单级目录数100、单个目录文件数100、单文件大小4M、IO块大小1M、顺序写

  ```
hd=default,vdbench=/vdbench50407,user=root,shell=ssh
hd=hd1,system=10.0.20.232
hd=hd2,system=10.0.20.233
hd=hd3,system=10.0.20.234
fsd=fsd1,anchor=/mnt/nfs,depth=2,width=100,files=100,size=4M,shared=yes,openflags=o_direct
fwd=format,threads=8,xfersize=1m
fwd=default,xfersize=1m,fileio=sequential,fileselect=sequential,operation=write,threads=8
fwd=fwd1,fsd=fsd1,host=hd1
fwd=fwd2,fsd=fsd1,host=hd2
fwd=fwd3,fsd=fsd1,host=hd3
rd=rd1,fwd=fwd*,fwdrate=max,format=restart,elapsed=30,interval=1
  ```

  **4M顺序读**  目录深度2、单级目录数100、单个目录文件数100、单文件大小4M、IO块大小1M、顺序读

  ```
hd=default,vdbench=/vdbench50407,user=root,shell=ssh
hd=hd1,system=10.0.20.232
hd=hd2,system=10.0.20.233
hd=hd3,system=10.0.20.234
fsd=fsd1,anchor=/mnt/nfs,depth=2,width=100,files=100,size=4M,shared=yes,openflags=o_direct
fwd=format,threads=8,xfersize=1m
fwd=default,xfersize=1m,fileio=sequential,fileselect=sequential,operation=read,threads=8
fwd=fwd1,fsd=fsd1,host=hd1
fwd=fwd2,fsd=fsd1,host=hd2
fwd=fwd3,fsd=fsd1,host=hd3
rd=rd1,fwd=fwd*,fwdrate=max,format=restart,elapsed=30,interval=1
  ```

  **8M混合读写**  目录深度2、单级目录数100、单个目录文件数100、单文件大小8M、IO块大小1M、混合读写(读写比为6:4)

  ```
hd=default,vdbench=/vdbench50407,user=root,shell=ssh
hd=hd1,system=10.0.20.232
hd=hd2,system=10.0.20.233
hd=hd3,system=10.0.20.234
fsd=fsd1,anchor=/mnt/nfs,depth=2,width=100,files=100,size=8M,shared=yes,openflags=o_direct
fwd=format,threads=8,xfersize=1m
fwd=default,xfersize=1m,fileio=random,fileselect=random,rdpct=60,threads=8
fwd=fwd1,fsd=fsd1,host=hd1
fwd=fwd2,fsd=fsd1,host=hd2
fwd=fwd3,fsd=fsd1,host=hd3
rd=rd1,fwd=fwd*,fwdrate=max,format=restart,elapsed=30,interval=1
  ```

## 七、Q&A

### 1、open failed for xxx

- **问题描述**
   使用vdbench测试过程中,测试中断,报错信息如下:

  error: 13
  file_open(),open /client/vdb_f00006.file failed
  Maximum native memory allocation: 131,072;Current allocation: 131,072
  open failed for /client/vdb.2_32.dir/vdb_f00006.file

- **原因分析**
   默认vdbench限制了java内存使用量,测试期间java运行内存不足才导致测试异常中断。

- **处理措施**
   修改vdbench运行脚本的java内存参数,最小内存为1G,最大内存为2G

  ```
  [root@node40 vdbench50406]# cat vdbench
  if [ "$1" == "SlaveJvm" ]; then
    $java -client -Xmx2048m -Xms1024m -cp $cp Vdb.SlaveJvm $*
    exit $?
  else
    $java -client -Xmx2048m  -Xms1024m  -cp $cp Vdb.Vdbmain $*
    exit $?
  fi
  ```