Domanda

Abbiamo notato un comportamento particolare con Java / Web Logic su uno dei nostri server multi-processore, ieri, in modo voluto per ottenere i vostri pensieri su di esso.

Per qualche ragione, Web Logic / Java utilizzare un solo processore dei due processori disponibili. Quando abbiamo fatto un po 'di carico pesante, ho potuto vedere la CPU su un unico raggiunge quasi il 100% e l'altro processore è completamente inattivo. Ha importanza se si tratta di una macchina virtuale (..ma non si tratta di una macchina virtuale)

La cosa interessante è che qualsiasi altro sistema operativo-attività indicano l'attività del processore su entrambi.

Saluti, _UB

È stato utile?

Soluzione

In scenari comuni, WebLogic (e quindi Java) dovrebbe essere in grado di utilizzare tutti i processori disponibili nel server in cui è in esecuzione. WebLogic ha un pool di thread di elaborazione richiesta e quando le richieste sono in arrivo simultaneamente, vengono trattati contemporaneamente. Se il server dispone di più processori quelli dovrebbe essere quindi utilizzato da thread Java.

Se l'applicazione Web Java in esecuzione in WebLogic sta usando SingleThreadModel nella sua servlet (s), non ci sono due thread può eseguire il servlet contemporaneamente e quindi si poteva vedere solo una CPU al lavoro lì. Questo modello non è raccomandato e io non immagino molto usata in ogni caso.

Ho sentito alcune persone che si lamentano che non possono ottenere i loro server di applicazioni Java di utilizzare più di 1 CPU quando si esegue un sistema operativo della macchina virtuale, come VMWare, anche quando hanno dedicato più di una CPU per il VM. Non ho idea di quale fosse il motivo di questo strano comportamento, allora.

Forse si dovrebbe cercare di colpire alcuni molto semplice pagina JSP con richieste simultanee e vedere se si utilizza più di 1 CPU. Se funziona, il problema è nella vostra applicazione.

Altri suggerimenti

La documentazione WebLogic dare consigli su come configurare multi-processore macchine . Faresti finisce con un ambiente cluster.

Esegui questo programma Java per verificare se Java si avvale di tutte le CPU disponibili (8 nel mio caso):

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 (;;) {
        }
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top