gpt4 book ai didi

java - 加速 Elasticsearch 测试容器

转载 作者:行者123 更新时间:2023-12-03 08:11:12 26 4
gpt4 key购买 nike

我已将 Java 集成测试移至使用 Elasticsearch 测试容器,而不是使用嵌入式 Elasticsearch。测试速度慢了 1 小时,这对生产力造成了巨大影响。我正在寻找加快速度的方法。

我尝试在 Elasticsearch 容器上使用像 reuse 这样的参数,但这并没有产生任何影响。我最新的配置是

    private static final String ELASTICSEARCH_VERSION = "7.11.2";
private static ElasticsearchContainer elasticsearchContainer;
private static final DockerImageName ELASTICSEARCH_IMAGE =
DockerImageName
.parse("docker.elastic.co/elasticsearch/elasticsearch")
.withTag(ELASTICSEARCH_VERSION);
            elasticsearchContainer = new ElasticsearchContainer(ELASTICSEARCH_IMAGE)
.withEnv("foo", "bar").withSharedMemorySize(1000000000L);
elasticsearchContainer.addExposedPorts(9200, 9300);
elasticsearchContainer.withStartupTimeout(Duration.of(5, ChronoUnit.MINUTES));
elasticsearchContainer.start();
    private static RestHighLevelClient getRestHighLevelClient(ElasticsearchContainer container) {
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY,
new UsernamePasswordCredentials(ELASTICSEARCH_USERNAME,
ELASTICSEARCH_PASSWORD));
RestClientBuilder restClientBuilder = RestClient.builder(HttpHost.create(container.getHttpHostAddress()))
.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder
.setDefaultCredentialsProvider(credentialsProvider)
.setKeepAliveStrategy((response, context) -> 3 * 60 * 1000));
// Try to prevent SocketTimeoutException when fetching larger batch size
restClientBuilder.setRequestConfigCallback(
requestConfigBuilder -> requestConfigBuilder.setSocketTimeout(2 * 60 * 1000));

return new RestHighLevelClient(restClientBuilder);
}

Gradle 配置(gradle 守护进程崩溃过一次,因此增加到 2g)

org.gradle.jvmargs=-Xms2g -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

关于加快测试速度有什么建议吗?

最佳答案

对于任何性能工作或优化的一般建议是在引入更改之前进行衡量。我建议您在得出结论之前分析您的测试运行。

您无需大量使用分析器即可估算其中的一些指标。

  • Elastic 容器启动需要多长时间?

对我来说需要 8.2 秒(我使用elasticsearch-oss:7.10.2):

14:35:55.803 [main] INFO  🐳 [docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2] -
Container docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2
started in PT8.264592S
  • 您多久启动一次新容器? Docker 镜像将自然缓存,因此不必担心,但根据您组织测试套件的方式,启动新容器的时间可能会增加。

您可以阅读有关 Testcontainers in the docs 管理的容器生命周期的更多信息。 .

例如,如果您使用 JUnit,您可以检查是否在 @BeforeEach@BeforeAll 中启动新容器,或者在整个测试套件中使用单例容器。

  • 容器中的应用程序速度有多快?

因素之一是允许 Docker 使用多少资源。默认情况下,Docker is configured 2G内存可能会成为瓶颈。如果容器中没有足够的可用内存,Elastic 的行为可能会比应有的速度慢(如果开始交换等,甚至会更慢)。为其提供充足的 CPU 和内存以获得最快的结果。

如果查看这三件事没有帮助,那么也许您可以分析测试运行以检查瓶颈是什么。

关于java - 加速 Elasticsearch 测试容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70778593/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com