-
Notifications
You must be signed in to change notification settings - Fork 10
v3.0 Usage
- JRE 8+
- OS open files limit is at least a bit higher than specified concurrency level
- Few gigabytes of free memory. High-load tests may allocate up to 2-4 GB of the memory depending on the scenario.
- (Remote Storage) Connectivity with the endpoint nodes via the ports used
- (Distributed Mode) Connectivity with the load servers via port #1099
- Download the latest Mongoose tar file
- Copy the tar file to a proper directory and unpack the file:
tar xvf mongoose-<VERSION>.tgz
This command extracts the contents of the distribution into the directory ./mongoose- which will contain several directories and files. One of the files must be mongoose.jar.
Note:
In case of the distributed mode Mongoose should be also deployed to the driver hosts. Each of Mongoose driver serivces should be started using the following command:
java -jar mongoose-/mongoose-storage-driver-service.jar
# Hello World
An user can try Mongoose without a real storage. Mongoose distribution contains a storage mock implementation for the demo/testing purposes.
Start the web storage mock first:
```bash
java -jar <MONGOOSE_DIR>/mongoose-storage-mock.jar
Then open another console and start Mongoose itself:
java -jar <MONGOOSE_DIR>/mongoose.jar
The line starts Mongoose with default scenario and the default configuration. By default Mongoose writes using Amazon S3 API to storage with IP address 127.0.0.1 (local host). Storage mock is already there to store the new objects.
Now you can switch between the two consoles to see how Mongoose regularly reports about objects created and the storage mock regularly reports about objects stored.
The following line contains a typical command that starts Mongoose run to create 100,000 data items of 8KB size:
java -jar <MONGOOSE_DIR>/mongoose.jar --storage-node-addrs=10.64.84.<X>,10.64.84.<Y>,10.64.84.<Z> --load-limit-count=100000 --item-data-size=8KB [email protected] --storage-auth-secret=A5JKVKuSHp5Kme2qcMFlvMqEKbN+QBNF0tRuFleT
Where:
- --storage-node-addrs - the list of storage node IP addresses
- --load-limit-count - the number of data items to create
- --item-data-size - the size data items to create
- --storage-auth-id - "user" authentication identifier
- --storage-auth-secret - "user" authentication secret key
Note:
- If no configuration properties are set in the command line the default configuration is used.
- The default configuration is bundled in the <MONGOOSE_DIR>/mongoose-ui.jar file's under the "/defaults.json" path.
- If you're running against ECS, use its provision environment to obtain credentials and other information like bucket, subtenant, container, etc.
- Please keep in mind that high load require a lot of system resources such as open file descriptors and Java heap memory. It may be necessary to specify the resource limits manually:
ulimit -n 1048576
The expected console output looks like below:
TODO
After several initialization statements Mongoose starts reporting its progress every 10 seconds. Progress information is printed with the following layout:
<TIMESTAMP> <LEVEL> <CLASS> <LOAD_JOB_NAME>↩
n=(<SUCCESS>/<FAIL>);↩
t[s]=(<JOB_TIME>/<DURATION_SUM>)↩
size=(<SIZE>);↩
TP[op/s]=(<AVG>/<AVG_LAST>);↩
BW[MB/s]=(<AVG>/<AVG_LAST>)↩
dur[us]=(<AVG>/<MIN>/<MAX>);↩
lat[us]=(<AVG>/<MIN>/<MAX>)
The summary metrics statement has a bit different metrics layout:
n=(<SUCCESS>/<FAIL>);↩
t[s]=(<JOB_TIME>/<DURATION_SUM>)↩
size=(<SIZE>);↩
TP[op/s]=(<AVG>/<AVG_LAST>);↩
BW[MB/s]=(<AVG>/<AVG_LAST>)↩
dur[us]=(<AVG>/<MIN>/<LOQ>/<MED>/<HIQ>/<MAX>);↩
lat[us]=(<AVG>/<MIN>/<LOQ>/<MED>/<HIQ>/<MAX>)
Where "LOQ" is a low quartile of the distribution and "HIQ" is a high quartile.
The tool saves rich logging information about the events and performance metrics. The particular path for the logs for every run may be determined as log/RUN_ID. The directory contains a subset of the following files:
-
3rdparty.log
Third party libraries logging goes here
-
config.log
Effective run configuration. In case a run was restarted or resumed several times, the log file contains several configurations
-
errors.log
The file contains error and warning messages
-
items.csv
The file contains information about processed data items with the entries pattern:
<ITEM_PATH>,<ITEM_RING_OFFSET>,<ITEM_SIZE>,<RING_LAYER_#>/<UPDATED_RANGES_MASK>
This file is without a header line because some users shuffle it.
-
messages.log
The file contains Mongoose internal log messages.
-
metrics.periodic.csv
The file contains periodic performance metrics records. The header line describes the content:
- DateTimeISO8601,
- LoadId,
- TypeAPI,
- TypeLoad,
- CountConn,
- CountNode,
- CountLoadServer,
- CountSucc,
- CountFail,
- Size,
- JobDuration[s],
- DurationSum[s],
- TPLast[op/s],
- TPAvg[op/s],
- BWAvg[MB/s],
- BWLast[MB/s],
- DurationAvg[us],
- DurationMin[us],
- DurationMax[us],
- LatencyAvg[us],
- LatencyMin[us],
- LatencyMax[us]
-
metrics.total.csv
The file contains summary performance information calculated at the end of the run. The header line describes the content:
- DateTimeISO8601,
- LoadId,
- TypeAPI,
- TypeLoad,
- CountConn,
- CountNode,
- CountLoadServer,
- CountSucc,
- CountFail,
- Size,
- JobDuration[s],
- DurationSum[s],
- TPAvg[op/s],
- TPLast[op/s],
- BWAvg[MB/s],
- BWLast[MB/s],
- DurationAvg[us],
- DurationMin[us],
- DurationLoQ[us],
- DurationMed[us],
- DurationHiQ[us],
- DurationMax[us],
- LatencyAvg[us],
- LatencyMin[us],
- LatencyLoQ[us],
- LatencyMed[us],
- LatencyHiQ[us],
- LatencyMax[us]
-
io.trace.csv
The file contains detailed performance metrics per I/O task finished. The entry pattern is described by header:
- StorageDriver,
- ThreadName,
- StorageNode,
- ItemPath,
- OpCode,
- StatusCode,
- ReqTimeStart[us],
- Duration[us],
- RespLatency[us],
- DataLatency[us],
- TransferSize
The operation code ("OpCode" column) in the io.trace.csv file may have one of the values below
Code | Description |
---|---|
O | CREATE |
1 | READ |
2 | UPDATE |
3 | DELETE |
The status code in the io.trace.csv file may have one of the values below
Code | Description | HTTP response codes |
---|---|---|
O | Pending (internal) | |
1 | Active (internal) | |
2 | Cancelled | |
3 | Unknown failure | all other codes |
4 | Success | 2xx |
5 | I/O Failure | |
6 | Timeout | 504 |
7 | Unrecognized storage response | |
8 | Client failure or invalid request | 100, 400, 405, 409, 411, 414, 416 |
9 | Internal storage failure | 413, 415, 429, 500, 501, 502, 503, 505 |
10 | Item not found on the storage | 404 |
11 | Authentication/access failure | 401, 403 |
12 | Data item corrupted | |
13 | Not enough space on the storage | 507 |
The items processed during the test may be stored in the output file for a further reuse. For example, this output file may be used as input file to read the items written before. To specify the output file the CLI option "--item-output-file=" should be used:
java -jar <MONGOOSE_DIR>/mongoose.jar --item-output-file=items.csv [<OTHER_CLI_OPTIONS>]
To use the item list file the CLI option "--item-input-file=" should be used:
java -jar <MONGOOSE_DIR>/mongoose.jar --item-output-file=items.csv --load-type=read [<OTHER_CLI_OPTIONS>]
To get the latest stable version:
docker pull emcmongoose/mongoose
Otherwise, get the specific version:
docker pull emcmongoose/mongoose:3.0.3
docker run emcmongoose/mongoose java -jar /opt/mongoose/mongoose.jar <ARGS>
docker run -d --expose 1099 emcmongoose/mongoose java -jar /opt/mongoose/mongoose-storage-driver-service.jar
docker run emcmongoose/mongoose --storage-driver-remote --storage-driver-addrs=<ADDR1,ADDR2,...> <ARGS>
docker run -d --expose 9020-9024 emcmongoose/mongoose java -jar /opt/mongoose/mongoose-storage-mock.jar <ARGS>
TODO
- Overview
- Deployment
- User Guide
- Troubleshooting
- Reference