【问题标题】:RMI performance too slowRMI 性能太慢
【发布时间】:2012-02-27 09:44:50
【问题描述】:

我一直在从事一个关于将数据从一个数据库复制到另一个数据库的项目。用java6编写。并在分布式机器上工作。我们有 9 台服务器机器。一个是我的主控制模块在其上工作的主节点,它获取复制请求并将作业分发到其他 8 台机器。

之前开始用 JMS 编码将任务分发到那台 8 台机器上。有一个 Apache Active MQ 服务器在另一台计算机上工作。但我发现这不太合适,机器需要更紧密地耦合,因为它会导致一些代码开销,并且有必要为发送到从机的所有消息返回响应消息。我决定改变主节点和其他 8 台从机之间的互连,并用 RMI 编码。

我为从机编写了一个 RMI 服务器,为主节点机器编写了一个客户端。然后在主节点上创建线程来触发从机上的分布式任务。

问题是性能急剧下降。通常我能够在大约 6 分钟内将大约 6GB 的数据从一个特定的数据库复制到另一个数据库。现在复制9GB数据需要1个半小时以上。当任务在从机上执行时,它曾经消耗大量 CPU。我观察到 CPU 使用率超过 90%。现在它从不使用超过 15%。

我需要了解导致这种性能下降的原因。我应该怎么办 ?我应该使用故障排除工具吗?

编辑------------

好的,我只在我的笔记本电脑上创建了一个从模块实例,并发送了 16 个任务来处理它并使用 jvisualvm 分析 CPU。结果在图片CPU Profiler result 中。

当我使用 JMS 进行机器通信时,包中的控制方法(例如 failTask​​IfAbort()、performSanityCheck() 等)也存在。这让我觉得,RMI 线程在某种程度上是低优先级的。

我还上传了从 jvisualvm 导出的 nps 文件。你可以在这里得到它:exported profile result

【问题讨论】:

  • 如何使用 RMI 复制数据?你在传递物体吗?如果是这样,可能是它的 RMI 序列化是问题所在?
  • jdk中的jvisualvm告诉你什么?
  • 所以你说 JMS/RMI 与传输几乎没有关系(我假设处理),但你也说它对性能产生了巨大的影响。 ;) 顺便说一句,即使线程的优先级最低,如果有空闲 CPU,它仍然会以 100% 的速度运行。只有在没有空闲 CPU 并且它必须与更高优先级的线程竞争时,优先级才重要。
  • 我怀疑它是无关的。看来您的瓶颈是从数据库中获取数据所需的时间。如果您一次下载到 8 个客户端,则每个客户端可能只能获得 1/8 的数据库带宽。我会看看当你只有一个客户端时它的表现(即 CPU 利用率高得多)
  • 我同意 Peter Lawrey 的观点。如果您没有修改复制逻辑,很可能是您的数据库无法处理所有并行传输。

标签: java performance jms cpu rmi


【解决方案1】:

对模块进行了一些 CPU 采样,它似乎在 oracle.net.ns.Packet.receive() 上花费了大约 90%。所以是的,它是关于从 db 获取数据。这解释了为什么 CPU 使用率降低了。它等待数据库返回数据。实际上,我很傻,没有考虑数据库端的查询性能。我以为我之前复制了这 9 GB 的数据并得到了很好的结果。问题在于访问分区表。它与用于任务分配的 RMI/JMS 无关。

【讨论】:

    【解决方案2】:

    来自cmets,

    我怀疑它是无关的。看来您的瓶颈是从数据库中获取数据所需的时间。如果您一次下载到 8 个客户端,则每个客户端可能只能获得 1/8 的数据库带宽。当您只有一个客户端时,我会看看它的性能(即 CPU 利用率要高得多)

    顺便说一句:您可能会发现数据受限于服务器的网络适配器,或者它从数据库中检索数据的速度。如果是前者,您的服务器上可能有一个备用网络适配器,可用于增加带宽。

    【讨论】:

    • 我让服务器管理员检查是否有任何限制 CPU 使用的资源管理正在运行,还让网络团队检查是否有任何限制(一些防火墙配置,网络带宽限制等),并要求数据库管理员:D没有限制,我复制相同数量的其他一些表的数据真的非常快,所以我真的不认为这是网络限制或数据库速度限制跨度>
    • 您是否一次将其复制到八台不同的机器上?如果您只有一个查询,它应该会更快。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    相关资源
    最近更新 更多