【问题标题】:Re-Architect Application to Run on Multiple Servers(JVMs) to enhance performance重新架构应用程序以在多个服务器 (JVM) 上运行以提高性能
【发布时间】:2011-12-27 05:50:14
【问题描述】:

我有一个遗留的内部业务应用程序,它在一个 JVM 中运行,它存在许多性能问题,更具体地说,关于 Heap UsageRunning Concurrent Threads,它的核心是一个调度应用程序,其中用户可以从前端安排一些任务,当时间到了,任务就启动了,所有代码都是自制的,我们没有使用任何第三方调度程序来进行调度,现在我的目标是提高应用程序的性能,并且有一些选项可以我可以尝试,例如使用 Quartz 之类的调度机制或将应用程序分发到不同的 jvm,我在这里遇到的挑战是我从来没有遇到过这种重新构建应用程序的情况,所以我不知道从哪里开始,我知道 SO 不是提出此类问题的正确地方,但不确定如何处理,任何帮助/建议将不胜感激。

【问题讨论】:

  • 您为什么认为多个 JVM 会提高性能?尤其是当您提到有关堆使用和线程的内容时。你的意思是你想尝试让它成为一个跨多个物理服务器运行的分布式应用程序?
  • @BrianRoach:我是剖析东西的新手,还在学习它,所以我可能没有很多常识性问题的答案

标签: java performance architecture


【解决方案1】:

通过阅读您的帖子,我没有得到您真正了解性能问题的根本原因是什么的印象。解决任何此类问题的第一步应该是在提出解决方案之前确定原因。我会先问一些非常高级的问题。

  • 您目前执行多少并发任务/线程?
  • 作业是否受 CPU 或 IO 限制?
  • 应用在什么软件堆栈上运行?
  • 应用在什么硬件上运行?

通过跨多个 JVM 分发应用程序,您总是会增加复杂性,这很好,只要它是有效且必需的解决方案。

【讨论】:

  • 我同意你的观点,它是一个 java web 应用程序,应用程序在 Linux x64 机器上运行,我仍在配置我的分析器,以便我可以更详细地分析系统,但是远程服务器的 jprofiler 配置不是那么直接,但至少对我来说。
【解决方案2】:

我建议您使用实际工作负载来运行应用程序,以使服务器处于繁忙状态并对其进行分析以查找 CPU、内存和资源瓶颈。

恕我直言:如果您使用超过 1 - 8 GB 的堆并且完全 GC 时间是一个问题,那么分离 JVM 可能是一个选项。如果你使用的比它少得多,它不太可能有帮助。

在您对问题有很好的了解之前,不要对应该采用哪种解决方案得出任何结论,否则您最终可能会花费大量时间优化错误的事情并可能使问题变得更糟。

【讨论】:

  • 我同意,这就是我尝试安装 jprofiler 的原因,以便我可以分析远程安装的应用程序以研究统计数据,但在配置 jprofiler 时遇到了一些困难 - stackoverflow.com/q/8053484/164299
  • 你能在你的电脑上运行这个应用程序吗?我的 IDE 中有我的分析器,当我想分析应用程序或单元测试时,我单击运行旁边的配置文件按钮。
  • 是的,我可以在我的 localpc 上运行该应用程序,但在我的本地应用程序没有完整的填充数据之间,分析器无法在我的本地应用程序上运行。
  • 它只需要一个真实的数据样本。
  • 首先,我试图让探查器在我的本地机器上运行,但它没有工作,所以试图运行到远程应用程序但仍然有一些配置问题,这真的让我很难时间,最糟糕的是我已经花了足够的时间在它上面,并且没有前进我也遵循手册中提到的相同步骤,所以不确定实际上错过了什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-01
  • 1970-01-01
相关资源
最近更新 更多