2

我们在一个运行调度算法的可笑的大 Linux 机器上拥有一个内部的 3rd 方 java 应用程序。对于我们需要的负载,应用程序运行得太慢了。我们没有代码,供应商不会因为金钱原因对应用程序进行任何更改,因此我无法改进代码。该应用程序是单线程的,它的设计不适合并行化(所以我不能在 2 个盒子之间分配负载)。

在软件或硬件方面,我可以做些什么来提高应用程序的性能?

4

4 回答 4

6
  • 获取最新版本的 Java(较新版本往往具有性能改进)

  • 给 Java 更多的内存来使用(基准看看这是否有任何区别)

  • 衡量它在做什么top。升级任何有问题的东西(更多内存、更快的 CPU、SSD)。一些 CPU 在单线程工作负载方面比其他 CPU 更好(阅读:不要在Bulldozer上运行它;带有Turbo Boost的东西可能会有所帮助)。

  • 使用其他实验性 JVM 选项(基准测试看看这是否有任何区别)

  • 删除在这台机器上运行的任何其他应用程序(基准测试看看是否有任何好处——如果没有帮助就浪费钱)

  • 向供应商付款以使其更快或给您代码(即:给他们金钱上的理由来解决这个问题)

  • 寻找替代方案

  • 编写自己的替代方案

于 2012-06-07T16:43:08.453 回答
1

1) You can improve the hardware that the application runs on. Do this by looking at what resources the application is using. Is it maxing out CPU, or using all the memory (or both)? If so, you can add more CPU power or RAM accordingly.

2) Is there a way you can cache the results from the application? Can you ever avoid using it?

Otherwise, there really isn't much more you can do. If becomes a bigger problem, you might have to write your own scheduling algorithm, or better yet, find a better vendor.

于 2012-06-07T16:41:18.890 回答
1

您可以预处理输入以减少应用程序要做的工作吗?

例如,也许应用程序做的第一件事是使用合并排序对要调度的作业列表进行排序。如果您预先对列表进行排序,则应用程序的排序将无事可做。您可能能够比应用程序更快地对列表进行排序 - 使用许多内核,提前完成,等等。

于 2012-06-07T17:00:15.603 回答
1

在速度更快的计算机上运行它。这可能是最便宜的解决方案。

于 2012-06-08T00:26:11.917 回答