2

スケジューリングアルゴリズムを実行する途方もなく重いLinuxボックス上にサードパーティのJavaアプリケーションが社内にあります。アプリケーションの実行速度が遅すぎて、必要な負荷がかかりません。コードがなく、金銭的な理由でベンダーがアプリケーションに変更を加えることはないため、コードを改善することはできません。アプリケーションはシングルスレッドであり、その設計は並列化には適していません(したがって、負荷を2つのボックスに分割することはできません)。

アプリケーションのパフォーマンスを向上させるために、ソフトウェアまたはハードウェアのいずれかで何ができますか?

4

4 に答える 4

6
  • 最新バージョンのJavaを利用する(新しいバージョンではパフォーマンスが向上する傾向があります)

  • Javaで動作するメモリを増やします(これが違いを生むかどうかを確認するためのベンチマーク)

  • で何をしているのかを測定しtopます。問題が発生しているものはすべてアップグレードします(より多くのメモリ、より高速なCPU、SSD)。一部のCPUは、他のCPUよりもシングルスレッドの作業負荷に優れています(ブルドーザーでこれを実行しないでください。ターボブーストを使用したものが役立つ場合があります)。

  • 他の実験的なJVMオプションで遊んでください(これが違いを生むかどうかを確認するためのベンチマーク)

  • このマシンで実行されている他のアプリケーションをすべて削除します(利点があるかどうかを確認するためのベンチマーク-役に立たない場合はお金を無駄にする意味はありません)

  • ベンダーに支払いをして、より速くするか、コードを提供します(つまり、これを修正するための金銭的な理由をベンダーに提供します)

  • 代替案を探す

  • あなた自身の代替案を書く

于 2012-06-07T16:43:08.453 に答える
1

1)アプリケーションを実行するハードウェアを改善できます。これを行うには、アプリケーションが使用しているリソースを確認します。CPUを使い果たしているのですか、それともすべてのメモリ(または両方)を使用しているのですか?その場合は、それに応じてCPUパワーまたはRAMを追加できます。

2)アプリケーションからの結果をキャッシュする方法はありますか?あなたはそれを使うのを避けることができますか?

そうでなければ、実際にできることはそれほど多くありません。より大きな問題になる場合は、独自のスケジューリングアルゴリズムを作成する必要があるかもしれません。さらに良いのは、より良いベンダーを見つけることです。

于 2012-06-07T16:41:18.890 に答える
1

入力を前処理して、アプリケーションの作業を減らすことができますか?

たとえば、アプリケーションが最初に行うことは、マージソートを使用してスケジュールされるジョブのリストをソートすることです。リストを事前に並べ替えると、アプリケーションの並べ替えは機能しなくなります。アプリケーションよりも速くリストを並べ替えることができる場合があります。多くのコアを使用したり、事前に並べ替えたりすることができます。

于 2012-06-07T17:00:15.603 に答える
1

より高速なコンピューターで実行します。これはおそらくロットの中で最も安価なソリューションです。

于 2012-06-08T00:26:11.917 に答える