2012-06-07 77 views
2

我們在一個運行調度算法的荒謬沉重的Linux機器上擁有第三方Java應用程序。應用程序運行速度太慢,無法滿足我們所需的負載。由於金錢原因,我們沒有代碼並且供應商不會對應用程序進行任何更改,因此我無法改進代碼。該應用程序是單線程的,它的設計不適用於並行化(所以我不能在2個盒子之間分割負載)。如何提高你不擁有的代碼的性能?

我可以通過軟件或硬件來提高應用程序的性能嗎?

+0

應用程序在做什麼?可能在磁盤上讀取/寫入一些文件? – piokuc

+0

試圖威脅或賄賂它...... *「如果你跑得不快,我會把你從硬盤上擦掉!「*/*」如果你運行得更快,你可以得到一些免費的CPU時間,我會向你介紹一個漂亮的女性程序「* :-) –

+0

@piokuc該應用程序從一個巨大的文件中讀取,運行算法幾個小時,然後將結果寫回文件,讀取/寫入磁盤的時間可以忽略不計 – AngryHacker

回答

6
  • 獲取關於Java的最新版本(新版本往往有性能方面的改進)

  • Give Java more memory to work with(基準,看看是否有什麼差別)

  • 衡量一下它與top做。升級任何有問題的內存(更多內存,更快的CPU,SSD)。有些CPU在單線程工作負載方面比其他CPU更好(請閱讀:不要在Bulldozer上運行此操作; Turbo Boost可能會有所幫助)。 (見基準,如果這有什麼差別)

  • 播放與其他experimental JVM options

  • 刪除本機(基準上運行的任何其他應用程序,看看是否有任何好處 - 毫無意義浪費錢,如果它不」牛逼的幫助)

  • 支付供應商,使其更快或者給你的代碼(即:讓他們的貨幣原因,解決這個問題)

  • 找到一個替代

  • 寫自己的替代

+1

值得注意的是,大量的「實驗性JVM選項」正在調整垃圾收集器,我發現基於過去的經驗,GC和內存是你可以調整的兩個最大的東西以達到更好的性能 – Matt

+0

如果這個算法確實使用了大量的內存(它不知道它是否確實如此),它肯定會從更大的堆中受益,也可能是多線程垃圾收集器。這真的取決於它在做什麼。我可以想象幾乎完全受CPU限制的有用算法。 –

+0

@BrendanLong它需要大量的內存。它最大可達100 GB。堆已經安裝好了,所以我不能在那裏做更多的事情。 – AngryHacker

1

1)您可以改進應用程序運行的硬件。通過查看應用程序正在使用的資源來做到這一點。它最大限度地使用CPU,或使用所有內存(或兩者)?如果是這樣,您可以相應地添加更多的CPU電源或RAM。

2)有沒有辦法可以緩存應用程序的結果?你能避免使用它嗎?

否則,你可以做的實在太多了。如果成爲更大的問題,則可能需要編寫自己的調度算法,或者更好的方法是找到更好的供應商。

1

你能預處理輸入,以便應用程序較少的工作呢?

例如,應用程序可能做的第一件事是使用合併排序對要排定的作業列表進行排序。如果預先對列表進行排序,那麼應用程序的排序將無法完成。您可能能夠比應用程序更快地對列表進行排序 - 使用多個內核,提前執行,等等。

+0

不幸的不是。目前所有的軟件選項已經耗盡。 – AngryHacker

1

在更快的計算機上運行它。這可能是該地段最便宜的解決方案。