我们在一个运行调度算法的可笑的Linux机器上内部有第三方Java应用程序。应用程序运行速度太慢,无法满足我们所需的负载。由于货币原因,我们没有代码,供应商也不会对应用程序进行任何更改,因此我无法改进代码。该应用程序是单线程的,其设计不适合并行化(因此我无法在2个盒子之间拆分负载)。
我可以(软件或硬件方面)做些什么来提高应用程序的性能?
答案 0 :(得分:6)
获取最新版本的Java(较新版本往往会有性能改进)
Give Java more memory to work with(基准来看看这是否有所不同)
使用top
衡量它正在做什么。升级任何有问题(更多内存,更快的CPU,SSD)。有些CPU在单线程工作负载上比其他CPU更好(阅读:不要在Bulldozer上运行;带Turbo Boost的东西可能会有帮助。)
与其他experimental JVM options一起玩(基准以确定这是否有所不同)
删除在此计算机上运行的所有其他应用程序(基准测试是否有任何好处 - 如果没有帮助就没有浪费钱)
支付供应商的费用,使其更快或为您提供代码(即:给他们货币的理由来解决这个问题)
寻找替代方案
编写您自己的替代
答案 1 :(得分:1)
1)您可以改进运行应用程序的硬件。通过查看应用程序使用的资源来执行此操作。是最大化CPU,还是使用所有内存(或两者)?如果是这样,您可以相应地添加更多CPU功率或RAM。
2)有没有办法可以缓存应用程序的结果?你能避免使用它吗?
否则,你真的无法做得更多。如果成为一个更大的问题,您可能必须编写自己的调度算法,或者更好的是,找到更好的供应商。
答案 2 :(得分:1)
您可以预处理输入,以便应用程序可以做的工作少吗?
例如,应用程序可能做的第一件事就是使用合并排序对要调度的作业列表进行排序。如果您对列表进行预排序,那么应用程序的排序将无需执行任何操作。您可以比应用程序更快地对列表进行排序 - 使用多个核心,提前完成等等。
答案 3 :(得分:1)
在更快的计算机上运行它。这可能是该地段最便宜的解决方案。