2011-08-15 18 views
3

CentOS 5.4 VPS上でJavaサーバーを実行しています。 VPS統計: - 2.5GHzのシングルコアCPU - RAM 2GBの - OpenJDKの1.6私はjavaプロセスから非常に高いCPUの使用状況を経験してきたJavaメソッドの実行時間が高い

を(も日JDK 1.7を試してみました)。私はその後、Javaプロセスのプロファイリングを試して、何がスローダウンを引き起こしているのかを見てみました。私は、Random.nextInt():787msのような単純なメソッドは、1回の呼び出しを終了するのに1000分の1ミリ秒かかると分かりました。メソッドのほとんどはこの時間がかかりすぎず、私のサーバー上で非常に高いCPU使用率を引き起こしています。これはCentOSに間違っていますか?またはJava?私のVPSで正しく構成されていないものがありますか?

+2

使用されているランダムな方法によっては、マシンにエントロピーが残っていない可能性があり、次の番号を生成する前にさらに表示されるのを待っています。 –

+1

それにもかかわらず...ランダムintを取得するには、ほとんどの秒を取るべきではありません。仮想環境では、仮想サーバーが過剰にオーバーサブスクライブされたハードウェア上にある可能性があります。このハードウェアは、vmstatなどのOSレベルのツールを使用して表示されません。あなたがSSHを箱に入れた場合、それは反応的か不調かを感じるでしょうか? –

+0

JavaがCPUの97%程度を取っていないときはかなり高速です。私は – Zachar543

答えて

0

あなたがプログラム内の処理時間を測定するときに、次のようなもの、すなわち、あなたのタイミングを再現することができます:

long start = System.currentTimeMillis(); 

/* Your code */ 

[...]  

long time = System.currentTimeMillis() - start; 

System.out.println("Measurement: " + time); 

また、あなたはJavaが97%を取っていないときに、それが速い」とはどういう意味ですかCPUの "? Javaが最初に97%を採用しているのはなぜですか?複数のスレッドが実行されていますか?あなたの計算は短期間か長時間実行されていますか?

+0

タイミングを試しますちょっとだけで。 「JavaがCPUの97%を占めていないときには高速です」というコメントは、これらのメソッドがこのような時間を費やしているときに、単純なタスクを実行するためにCPUの大部分を使用すると言っていました。 – Zachar543

3

タイミングをソースコードに追加する代わりに、BTrace:http://kenai.com/projects/btraceのようなJavaエージェントを使用して、必要な情報を取得できるようにしますが、アプリケーションのソースコードを駄目にすることはありません。

BTraceは、EurekaJ、(私はBTtrace出力を視覚化するために作成したプロジェクト)として、ビジュアライザと結合することができます。http://eurekaj.haagen.name

他の市販のプロファイリング・オプションは、このようなJProfilerをまたはYourKitとして、また利用可能であるが、彼らはありません値札が付いてくる。

関連する問題