小编pmp*_*mpm的帖子

Spring Batch:具有多线程执行程序的Tasklet具有与Throttling算法相关的非常糟糕的性能

使用Spring批处理2.2.1,我已经配置了Spring Batch Job,我使用了这种方法:

配置如下:

  • Tasklet使用ThreadPoolTask​​Executor限制为15个线程

  • throttle-limit等于线程数

  • 块用于:

    • 1个JdbcCursorItemReader的同步适配器,允许许多线程按照Spring Batch文档推荐使用它

      您可以将调用同步到read(),只要处理和写入是块中最昂贵的部分,您的步骤可能仍然比单线程配置快得多.

    • JdbcCursorItemReader上的saveState为false

    • 基于JPA的Custom ItemWriter.请注意,它对一个项目的处理可能在处理时间方面有所不同,可能需要几毫秒到几秒(> 60秒).

    • commit-interval设置为1(我知道它可能会更好,但不是问题)

  • 关于Spring Batch doc Recommendmandation,所有jdbc池都没问题

由于以下原因,运行批处理会导致非常奇怪和糟糕的结果:

  • 在某些步骤中,如果项目需要一些时间来处理,那么线程池中的几乎所有线程最终都不会执行任何操作而只会处理,只有慢速编写器正在工作.

看看Spring Batch代码,根本原因似乎在这个包中:

  • 组织/ springframework的/批号/复读/支持/

这种工作方式是一种功能还是限制/错误?

如果它是一个功能,配置的方式是什么方式使所有线程不被长时间的处理工作挨饿而不必重写所有内容?

请注意,如果所有项目都占用相同的时间,一切正常,多线程就可以了,但如果其中一项处理需要花费更多时间,那么多线程在慢速进程工作时几乎无用.

注意我打开了这个问题:

java performance spring multithreading spring-batch

8
推荐指数
1
解决办法
2万
查看次数

在 JMeter 中通过非 GUI 模式绘制结果图

是否有可能在 JMeter 测试中获得下面提到的图形结果,该测试在非 GUI 模式下执行。我可以使用 csv 提取其值,但我们需要在非 GUI 模式下运行测试才能获取仪表板结果。这有什么可能性吗?

在此输入图像描述

performance jmeter listener performance-testing

6
推荐指数
1
解决办法
5155
查看次数

如何使用 Jetty 客户端根据请求获取 bytesIn/bytesOut

我正在使用 Jetty Client 11,并且想计算每个请求发送/接收的字节。

我正在使用高级 HttpClient 。我已阅读此文档,但没有看到任何有关如何执行此操作的信息:

我发现有一种方法可以通过执行以下操作来获取此信息:

        ConnectionStatistics connectionStatistics = new ConnectionStatistics();
        httpClient.addBean(connectionStatistics);

Run Code Online (Sandbox Code Playgroud)

然后:

        Request request = httpClient.newRequest(uri)
                .version(HttpVersion.HTTP_2)
                .timeout(CONNECTION_TIMEOUT_SECONDS, TimeUnit.SECONDS);
        request.send(listener);
        ConnectionStatistics connectionStatistics = httpClient.getBean(ConnectionStatistics.class);
        System.out.println(connectionStatistics.getSentBytes()+"/"+ connectionStatistics.getReceivedBytes());

Run Code Online (Sandbox Code Playgroud)

我肯定做错了什么,因为它甚至在全球范围内都不起作用,它总是给出 0。

无论如何,我不知道如何让它根据请求工作。

编辑:

我尝试过@sbordet 回答:

httpClient.newRequest(...)
  .onRequestContent((req, buf) -> requestBytes.add(buf.remaining()))
  ...
  .onResponseContent((res, buf) -> responseBytes.add(buf.remaining()))
  ...
  send(...);
Run Code Online (Sandbox Code Playgroud)

它对于响应效果很好。 但是对于请求,我想测量发送的字节数,它总是给出 0 (注意我只有没有内容的获取),而我希望有原始大小(原始 HTTP 请求字节,包括标头大小...)

java http jetty jetty-9 http2

3
推荐指数
1
解决办法
224
查看次数