性能测试最佳实践
使用 OpenSearch Benchmark 进行性能测试时,遵循一些关键的最佳实践至关重要,以确保获得准确、可靠和有意义的结果。这些实践有助于创建真实的测试场景,最大程度地减少可能扭曲结果的外部因素,并生成可比较和可重现的基准。遵循这些指南,您可以深入了解集群的性能,包括识别瓶颈并就集群配置和优化做出明智的决策。
环境设置
性能测试需要仔细关注测试环境。正确配置的环境对于获得可靠和可重现的结果至关重要。
设置测试环境时,务必使用与生产环境紧密匹配的硬件。使用开发或配置不足的硬件将无法提供可转化为生产性能的有意义的结果。本地机器通常硬件有限,并且本地开发库可能与工作负载的库发生冲突,从而阻止基准测试有效运行。
为获得最佳结果,请确保您的负载生成主机或运行 OpenSearch Benchmark 的机器符合最低硬件要求
- CPU: 8+ 核
- RAM: 32+ GB
- 存储: 固态硬盘 (SSD)/NVMe
- 网络: 10 Gbps
我们建议配置测试集群并将其设置配置为与您最有可能在生产环境中部署的设置相符。
测试配置
适当的测试配置包括为您的测试场景设置合适的参数,并确保您的集群配置优化。
基本设置
以下示例显示了一个基本的基准测试配置文件。此配置包括预热时间、测试持续时间以及客户端数量等基本参数
{
"name": "my-benchmark-test-procedure",
"description": "This test procedure runs term query against a cluster. It includes a 300-second warm-up, followed by a 3600-second benchmark using 8 concurrent clients.",
"schedule": [
{
"operation": "term",
"warmup-time=period": 300,
"time-period": 3600,
"clients": 8
}
]
}
索引设置
您的 OpenSearch 索引设置应针对您的特定用例进行优化。尝试将每个索引的分片数量设置为与您的生产集群匹配。但是,如果您是希望专注于单个分片性能并限制影响性能的变量的开发人员,请使用单个主分片,如以下示例 index_settings
所示
{
"index_settings": {
"number_of_shards": 1,
"number_of_replicas": 0,
"refresh_interval": "30s"
}
}
这些设置提供了充足的存储空间,可用于您的文档和测试结果,每个索引有 3 个分片和 1 个副本。
运行测试
运行基准测试包括在测试期间监控系统,并确保在不同测试运行中条件一致。
虽然您可以运行基本测试,但您还可以使用其他 基准测试命令选项 自定义测试运行。以下示例运行一个 geonames
工作负载测试,该测试针对特定主机并将测试结果输出为 csv
格式,可用于对基准测试指标进行进一步分析
opensearch-benchmark run \
--workload=geonames \
--target-hosts=localhost:9200 \
--pipeline=benchmark-only \
--test-procedure=default \
--report-format=csv \
--report-file=benchmark-results.csv
测试期间监控
在测试执行期间,监控各种系统指标至关重要,以确保测试正常运行并识别任何潜在瓶颈。以下命令可帮助您监控系统性能的不同方面
# Monitor system resources
vmstat 1
# Monitor OpenSearch metrics
curl localhost:9200/_cat/nodes?v
curl localhost:9200/_cat/indices?v
# Monitor cluster health
curl localhost:9200/_cluster/health?pretty
收集指标
收集和存储适当的指标对于分析测试结果以及就性能优化做出明智决策非常重要。
基本指标
配置您的基准测试以收集全面的指标。以下示例配置向您展示了如何设置文件存储的指标收集
{
"metrics": {
"store_metrics": true,
"detailed": true,
"metrics_store": {
"type": "file",
"location": "/path/to/metrics"
}
}
}
要跟踪的样本指标
以下 Python 结构可用作模板,并包含在性能测试期间应跟踪的指标列表
metrics_to_track = {
'latency': {
'mean': 'ms',
'median': 'ms',
'p95': 'ms',
'p99': 'ms'
},
'throughput': {
'ops/sec': 'count',
'mb/sec': 'bytes'
},
'system': {
'cpu_usage': '%',
'memory_used': 'bytes',
'disk_io': 'iops'
}
}
计算指标
OpenSearch Benchmark 计算指标的方式与传统客户端-服务器系统不同。有关指标如何计算的详细信息,请参阅 OpenSearch Benchmark 与传统客户端-服务器系统之间的差异。
与 OpenSearch Dashboards 集成
要将 OpenSearch Benchmark 结果与 OpenSearch Dashboards 集成,请使用以下步骤
- 配置 OpenSearch Benchmark 以将结果存储在 OpenSearch 中。
- 在 OpenSearch Dashboards 中为基准测试结果创建索引模式。
- 创建可视化和仪表板以分析基准测试数据。
常见陷阱
使用 OpenSearch Benchmark 进行性能测试时,务必注意一些常见的陷阱,这些陷阱可能导致不准确或误导性的结果。
预热间隔
适当的预热对于准确的性能测试至关重要。如果没有足够的预热期,您的测试结果可能会因初始系统不稳定或缓存效应而出现偏差。
不要在没有预热期的情况下运行测试。
相反,请始终在您的测试中包含足够的预热期。这允许系统在测量开始前达到稳定状态。在以下示例中,geonames
运行的预热期为 300s
opensearch-benchmark execute-test --workload=geonames --workload-params="warmup_time_period:300"
适当的预热期可能会因您的特定工作负载和系统配置而异。从至少 5 分钟(300 秒)开始,并根据您的观察结果进行调整。
比较来自不同环境的结果
性能测试中最常见的错误之一是比较来自不同环境的结果。由于硬件、网络条件和其他环境因素的差异,从笔记本电脑或开发机器获得的结果无法与从生产服务器获得的结果进行比较。
相反,请确保所有比较都在相同或相同的环境下进行。如果您需要比较不同的配置,请确保一次只更改一个变量,同时保持环境一致。
记录您的测试环境
正确记录您的测试环境对于可重现性和准确分析至关重要。如果没有详细的环境信息,将来将难以解释结果或重现测试。
不要在测试报告中遗漏环境详细信息。
相反,请始终全面记录您的测试环境详情。这应包括硬件规格、软件版本以及任何相关的配置设置。以下示例向您展示了如何在使用 Python 脚本运行 OpenSearch Benchmark 时添加环境详情
# DO: Document environment details
def run_benchmark():
environment = {
'hardware': 'AWS m5.2xlarge',
'os': 'Ubuntu 20.04',
'kernel': '5.4.0-1018-aws',
'opensearch': '2.0.0',
'java': 'OpenJDK 11.0.11',
'benchmark_version': '1.0.0'
}
results = opensearch_benchmark.run()
return {'environment': environment, 'results': results}
通过记录这些详细信息,您可以确保您的测试结果得到正确解释,并且在必要时可以重现测试。
使用日志进行故障排除
当遇到问题或意外结果时,OpenSearch Benchmark 日志可以提供有价值的见解。以下是有效使用日志进行故障排除的方法
-
导航到日志文件。主日志文件通常位于
~/.osb/logs/benchmark.log
。 -
查找错误消息。搜索包含“ERROR”或“WARNING”的行以识别潜在问题。
-
检查性能瓶颈。查找指示操作缓慢或资源受限的条目。
-
查看配置详情,例如日志。日志通常包含有关测试配置的信息,这有助于验证您预期的设置是否已正确应用。
-
注意基准测试不同阶段的持续时间,包括预热期和测量期。
通过仔细审查这些日志,您通常可以识别性能问题或意外基准测试结果的根本原因。如果您遇到不认识的日志错误,请向 OpenSearch Benchmark 仓库 提交问题。
安全注意事项
在大多数情况下,基本的身份验证协议应该足以满足测试需求。但是,您可以使用 SSL 进行基准测试期间的安全通信,如以下示例 opensearch.yml
配置所示
security:
ssl: true
verification_mode: full
certificate_authorities:
- /path/to/ca.crt
client_certificate: /path/to/client.crt
client_key: /path/to/client.key
维护
定期维护您的基准测试环境和工具对于长期保持一致和可靠的测试至关重要。
使用以下命令使您的基准测试工具和工作负载保持最新
# Update OpenSearch Benchmark
pip install --upgrade opensearch-benchmark
# Update workloads
opensearch-benchmark update-workload geonames
# Clean old data
opensearch-benchmark clean
Amazon OpenSearch Serverless 考量
使用 Amazon OpenSearch Serverless 进行测试时,请注意并非所有测试过程都可能受支持。请务必查看您正在使用的 README.md
文件,以确认其是否与 OpenSearch Serverless 兼容。如果未提供兼容性信息,您可能需要单独测试这些过程以确定哪些受支持。