我们正在尝试使用HornetQ存储和转发机制......但是使用核心网桥将消息从一个独立的HornetQ实例转发到另一个实例非常慢.我们无法将吞吐率提高到每秒200条以上.
令人惊讶的事实是,如果我们直接在目的地HornetQ实例指向同一客户端(即向转发HornetQ实例发布消息),我们开始观察每秒超过1000条消息的吞吐率(此客户端是基于JMS的).这基本上意味着在Forwarding HornetQ实例和Destination HornetQ实例之间配置的核心桥是有问题的.
以下是在Forwarding HornetQ上配置核心桥的相关章节:
<connectors>
<connector name="netty-bridge">
<factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
<param key="host" value="destination.xxx.com"/>
<param key="port" value="5445"/>
<param key="batch-delay" value="50"/>
<param key="tcp-send-buffer-size" value="1048576"/>
<param key="tcp-receive-buffer-size" value="1048576"/>
<param key="use-nio" value="true"/>
</connector>
</connectors>
<address-settings>
<address-setting match="jms.queue.Record">
<dead-letter-address>jms.queue.RecordDLQ</dead-letter-address>
<max-size-bytes>262144000</max-size-bytes>
<page-size-bytes>10485760</page-size-bytes>
<address-full-policy>PAGE</address-full-policy>
</address-setting>
</address-settings>
<queues>
<queue name="jms.queue.Record">
<address>jms.queue.Record</address>
</queue>
</queues>
<bridges>
<bridge name="core-bridge">
<queue-name>jms.queue.Record</queue-name>
<forwarding-address>jms.queue.Record</forwarding-address>
<retry-interval>1000</retry-interval>
<retry-interval-multiplier>1.0</retry-interval-multiplier>
<reconnect-attempts>-1</reconnect-attempts>
<confirmation-window-size>10485760</confirmation-window-size>
<static-connectors>
<connector-ref>netty-bridge</connector-ref>
</static-connectors>
</bridge>
</bridges>
Run Code Online (Sandbox Code Playgroud)
以下是在Destination HornetQ上配置核心桥的相关章节:
<acceptors>
<acceptor name="netty">
<factory-class>org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class>
<param key="host" value="${hornetq.remoting.netty.host:192.168.2.xxx}"/>
<param key="port" value="${hornetq.remoting.netty.port:xxxx}"/>
<param key="tcp-send-buffer-size" value="1048576"/>
<param key="tcp-receive-buffer-size" value="1048576"/>
<param key="use-nio" value="true"/> …Run Code Online (Sandbox Code Playgroud) 我是Java NIO的新手并且已经使用了一点.我有一个通用的查询.如果您正在设计一个超低延迟应用程序与高吞吐量应用程序,那么这两个应用程序中的哪一个明显受益于使用非阻塞IO?
我的理解是非阻塞IO当然应该有助于高吞吐量,因为工作线程没有阻塞,因此不等待响应,并且可以自由地发送新请求,直到之前的请求被提供.一旦我们获得先前激活的请求的响应,工作线程就可以异步处理它们,从而提高吞吐量.
但是,我无法看到非阻塞IO如何直接使低延迟应用程序受益.
我猜"异步行为是避免争用的好方法." 如果是这种情况,低争用意味着低延迟.因此,NIO可能有助于降低延迟.是否有意义?
我是卡夫卡的初学者
我们正在寻找调整我们的kafka集群(5节点集群)的大小,以处理17,000个事件/秒,每个事件大小为600字节.我们计划复制3次并保留一周的事件
我在kafka文档页面中读到了
assuming you want to be able to buffer for 30 seconds and
compute your memory need as write_throughput*30.
Run Code Online (Sandbox Code Playgroud)
那么整篇文章到底是什么?如果它是每秒MB的数量 - 我看9960MB /秒
if consider that as my write throughput then the memory calculates as 292GB(9960MB/Sec * 30 )
Run Code Online (Sandbox Code Playgroud)
那么什么是292GB代表一个节点或整个集群的内存需求(5个节点)
我真的很感激有关内存和磁盘大小的一些见解.
关心VB
我在我的机器上安装了二进制安装程序的ejbberd-2.1.10(Win7 32bit 2.93GHz Core2Duo 3GB RAM).由于我们的设置需要非常高的消息吞吐量,因此我查看了 性能调优参考,并在我的ejabberd.cfg和ejabberdctl.cfg文件中进行了更改.
{整形器,正常,{MAXRATE,千万}}
ERL_MAX_PORTS = 65536
ERL_PROCESSES = 250000
ERL_MAX_ETS_TABLES = 20000
现在,当clientA向clientB发送消息时,每条消息包含10条消息,每条消息为1500字节
所用时间如下
1)使用默认值-14.3秒
2)使用上面给出的覆盖值 - 1.70283秒
这仍然不符合性能要求.谁能帮助我如何进一步推动这个限制??? 我错过了什么或设置了错误的值.对此的任何帮助都会非常棒.
谢谢
我使用 RestSharp 作为底层 HTTP 客户端库,在黑盒服务上制作压力/吞吐量测试客户端。线程池和服务点连接限制已提高到 5000,但这应该不用担心,因为我们每秒测试大约 500-1000 个请求。高分辨率(微秒)计时器组件用于以我们想要测试的速率抛出请求。
RestSharp 代码大致如下
restClient.ExecuteAsync(postRequest, res =>
{
stopwatch.Stop();
lock (this.countLocker)
{
this.roundTrips.Add(stopwatch.ElapsedMilliseconds);
if (res.ResponseStatus == ResponseStatus.Completed &&
(res.StatusCode == HttpStatusCode.OK ||
res.StatusCode == HttpStatusCode.NoContent))
{
this.responseCount++;
}
else
{
// Treat all other status codes as errors.
this.reportError(res);
}
}
});
Run Code Online (Sandbox Code Playgroud)
在发送过多请求时,我们会观察到服务会在一段时间后溢出一些错误 503 响应,但 RestSharp 将这些响应视为完整响应,因为这是来自服务器的有效响应;没有抛出实际的异常。
不清楚的是,当 RestSharp 由于底层连接错误而遇到异常时
The underlying connection was closed: A connection that was expected to be kept alive was closed by the server.
at RestSharp.Http.GetRawResponseAsync(IAsyncResult result, Action`1 callback) …Run Code Online (Sandbox Code Playgroud) 这个问题适用于Haswell上带有XMM/YMM寄存器的压缩单预备浮点运算.
因此,根据Agner Fog 提供的令人敬畏的,令人敬畏的 表,我知道MUL可以在端口p0和p1上完成(recp thruput为0.5),而只有ADD只在端口p1上完成(recp thruput为1) ).我可以除了这个限制,但我也知道FMA可以在端口p0或p1上完成(recp吞吐量为0.5).因此,当我的FMA可以使用p0或p1并同时执行ADD和MUL时,为什么普通ADD仅限于p1是令人困惑的.我误解了桌子吗?或者有人可以解释为什么会这样?
也就是说,如果我的读数是正确的,为什么英特尔不会仅使用FMA op作为普通MUL和普通ADD的基础,从而增加ADD和MUL的吞吐量.或者,什么会阻止我使用两个同时独立的FMA操作来模拟两个同时独立的ADD操作?做ADD-by-FMA有哪些处罚?显然,使用的寄存器数量更多(ADD为2 reg,而FMA为ADD为3 reg),但除此之外?
在我的Android应用程序中,我使用Amazon DynamoDB.我创建了10个表,其中包含读取容量10和写入容量5.今天我收到了来自亚马逊的电子邮件.它花了我11.36美元.
我不明白免费等级的含义.以下是我从亚马逊上读到的内容:
DynamoDB客户可获得25 GB的免费存储空间,以及最多25个写入容量单元和25个读取容量单位的持续吞吐量容量(足够的吞吐量以处理每月多达2亿个请求)和250万个来自DynamoDB Streams的读取请求.
请更清楚地告诉我有关免费等级的含义:25个读取和25个写入容量单位!
我期望简单的中间流操作,例如limit(),开销很小.但这些示例之间的吞吐量差异实际上很重要:
final long MAX = 5_000_000_000L;
LongStream.rangeClosed(0, MAX)
.count();
// throughput: 1.7 bn values/second
LongStream.rangeClosed(0, MAX)
.limit(MAX)
.count();
// throughput: 780m values/second
LongStream.rangeClosed(0, MAX)
.limit(MAX)
.limit(MAX)
.count();
// throughput: 130m values/second
LongStream.rangeClosed(0, MAX)
.limit(MAX)
.limit(MAX)
.limit(MAX)
.count();
// throughput: 65m values/second
Run Code Online (Sandbox Code Playgroud)
我很好奇:快速降低吞吐量的原因是什么?它是链式流操作或我的测试设置的一致模式吗?(到目前为止我没有使用JMH,只是用秒表设置快速实验)
我有一个安装到文件系统的 EFS。最近,我的突发信用开始下降,直到达到 0,因此每当使用 efs 时,吞吐量利用率就会达到最大值(100%)。这使得 EFS 超级慢并且几乎无法访问。该问题的解决方案是将吞吐量模式从突发更改为弹性。因此,虽然眼前的问题已经解决,但我们仍然需要知道安装到此 EFS 的哪些消费者消耗了这么多吞吐量,但我找不到任何相关指标来显示客户端的吞吐量消耗。实际上我没有找到任何可以显示 EFS 用户是谁的指标。
我花了很多时间试图寻求解决方案,看看每个消费者的消费情况是多少,但确实找不到答案。有谁知道如何了解安装到此 EFS 的客户端的消耗情况?
太感谢了!
throughput ×10
java ×2
amazon-efs ×1
apache-kafka ×1
avx ×1
capacity ×1
core ×1
diskspace ×1
ejabberd ×1
flops ×1
fma ×1
hadoop ×1
hornetq ×1
java-stream ×1
keep-alive ×1
low-latency ×1
memory ×1
messaging ×1
mnesia ×1
nio ×1
nonblocking ×1
performance ×1
quote ×1
restsharp ×1
sse ×1
xmpp ×1