3

昨日、当社のマルチプロセッサ サーバーの 1 つで Java/Web Logic の奇妙な動作に気付いたので、それについてご意見をお聞かせください。

何らかの理由で、Web Logic/Java は使用可能な 2 つのプロセッサのうち 1 つのプロセッサのみを使用します。重い負荷をかけたとき、一方の CPU がほぼ 100% に達し、もう一方のプロセッサが完全にアイドル状態になっていることがわかりました。これが仮想マシンであるかどうかは重要ですか (..しかし、これは仮想マシンではありません)

興味深いことに、他の OS アクティビティは、両方のプロセッサ アクティビティを示しています。

よろしく、_UB

4

3 に答える 3

2

一般的なシナリオでは、WebLogic (および Java) は、それが実行されているサーバーで使用可能なすべてのプロセッサを使用できる必要があります。WebLogic には要求処理スレッドのプールがあり、要求が同時に到着すると、それらは同時に処理されます。サーバーに複数のプロセッサがある場合は、それらを Java スレッドで使用する必要があります。

WebLogic で実行されている Java Web アプリケーションがそのサーブレットでSingleThreadModelを使用している場合、2 つのスレッドが同時にサーブレットを実行できないため、1 つの CPU しか動作していないことがわかります。このモデルは推奨されておらず、とにかくあまり使用されていないと思います。

VMWare などの仮想マシン OS を実行している場合、VM 専用に複数の CPU を使用している場合でも、Java アプリケーション サーバーに複数の CPU を使用させることができないと不平を言う人がいると聞きました。当時、この奇妙な行動の理由が何であったかはわかりません。

おそらく、いくつかの非常に単純な JSP ページに同時リクエストをヒットさせて、複数の CPU が使用されているかどうかを確認する必要があります。これが機能する場合、問題はアプリケーションにあります。

于 2009-08-21T21:27:44.117 に答える
1

WebLogic のドキュメントには、マルチプロセッサ マシンの構成方法に関するアドバイスが記載されています。クラスター化された環境になります。

于 2009-08-21T20:45:18.523 に答える
0

この Java プログラムを実行して、Java が利用可能なすべての CPU (私の場合は 8) を利用しているかどうかをテストします。

public class MultiThreadCPUEater implements Runnable {
    public static void main(String[] args) {
        for (int i = 0; i < 8; i++) {
            MultiThreadCPUEater multiThreadCPUEater = new MultiThreadCPUEater();
            Thread thread = new Thread(multiThreadCPUEater);
            thread.start();
        }
    }

    @Override
    public void run() {
        for (;;) {
        }
    }
}
于 2012-07-12T16:30:18.030 に答える