首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HornetQ性能分析

HornetQ性能分析
EN

Stack Overflow用户
提问于 2014-03-18 05:51:07
回答 1查看 130关注 0票数 0

我使用的是hornetq核心客户端api 2.4.0.Final,使用以下代码添加了消息:

代码语言:javascript
复制
            ClientMessage clientMessage = _producerClientSession.createMessage(true);
            clientMessage.putStringProperty(MESSAGE_KEY, message);
            _clientProducer.send(clientMessage);

正如文档中提到的那样,我正在重用ClientSession和ClientProducer。在分析过程中,我们看到这需要平均400+ ms。这看上去对吗?看上去很慢。我们还在ubuntu上安装并运行了AIO。

编辑:这是"iostat -d -x 1“的输出,而在avg上排队的时间是600 is

代码语言:javascript
复制
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00  596.00     0.00  2568.00     8.62     1.20    2.01    0.00    2.01   0.04   2.40

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00    44.00    0.00  611.00     0.00 12904.00    42.24     0.10    0.17    0.00    0.17   0.05   2.80

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00  642.00     0.00  2916.00     9.08     0.02    0.03    0.00    0.03   0.03   2.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00  648.00     0.00  2900.00     8.95     0.03    0.04    0.00    0.04   0.04   2.80

编辑#2我们更新了配置,包括:

代码语言:javascript
复制
    Configuration configuration = new ConfigurationImpl();
    configuration.setPersistenceEnabled(true);
    configuration.setJournalSyncTransactional(false);

以及创建ClientSessionFactory以:

代码语言:javascript
复制
ClientSessionFactory sf = null;
  try {
    hornetQServer.start();
    ServerLocator serverLocator = HornetQClient.createServerLocatorWithoutHA(new TransportConfiguration(InVMConnectorFactory.class.getName()));
    serverLocator.setBlockOnDurableSend(false);
    serverLocator.setProducerWindowSize(100000);

    serverLocator.setBlockOnAcknowledge(false);
    ClientSessionFactory sf = serverLocator.createSessionFactory();

发送时间现在还不到一毫秒。这些设置中的任何一种是否不安全,或者对于典型情况不推荐?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-18 13:46:25

当您有一个生产者时,必须将一条持久消息保存在磁盘上,并同步到您的磁盘上。

客户端将阻塞,直到所有这些发生。

服务器被编程用于管理多个生产者并使用大部分硬件,但是如果您只有一个生产者,则您的性能将因网络延迟+磁盘同步速度而大大降低。

因此,对于单个生产者来说,以非事务方式发送持久消息(每次发送都是同步)听起来是正确的。

编辑:还可以查看ConfigurationImpl上的set/getJournalBufferTimeout_AIO和set/getJournalBufferTimeout_NIO。这些值在服务器同步磁盘上的数据之前发送到TimedBuffer,等待其他客户端同时同步。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22471368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档