Как заставить WebLogic использовать все процессоры на многопроцессорной машине - PullRequest
3 голосов
/ 22 августа 2009

Вчера мы заметили своеобразное поведение с Java / Web Logic на одном из наших многопроцессорных серверов, поэтому хотели подумать об этом.

По какой-то причине в Web Logic / Java используется только один процессор из двух доступных процессоров. Когда мы работали с большой нагрузкой, я видел, что процессор на одном из них достигает почти 100%, а другой процессор полностью простаивает. Имеет ли значение, если это виртуальная машина (но это не виртуальная машина)

Интересно, что любые другие действия ОС указывают на активность процессора на обоих.

С уважением, _UB

Ответы [ 3 ]

2 голосов
/ 22 августа 2009

В обычных сценариях WebLogic (и, следовательно, Java) должен иметь возможность использовать все доступные процессоры на сервере, на котором он работает. В WebLogic есть пул потоков обработки запросов, и когда запросы поступают одновременно, они обрабатываются одновременно. Если на сервере установлено несколько процессоров, они должны использоваться потоками Java.

Если веб-приложение Java, работающее в WebLogic, использует SingleThreadModel в своих сервлетах, никакие два потока не могут выполнять сервлет одновременно, и, таким образом, вы могли видеть только один ЦП на работе. Эта модель не рекомендуется, и я думаю, что в любом случае она не очень используется.

Я слышал, как некоторые люди жалуются на то, что они не могут заставить свои серверы приложений Java использовать более 1 ЦП при запуске ОС виртуальной машины, такой как VMWare, даже если они выделили более одного ЦП для ВМ. Я понятия не имею, в чем причина такого странного поведения.

Может быть, вам следует попробовать поразить несколько очень простых страниц JSP параллельными запросами и посмотреть, не используется ли более 1 ЦП. Если это работает, проблема в вашем приложении.

1 голос
/ 22 августа 2009

Документы WebLogic дают советы по , как настроить для многопроцессорных машин . В итоге вы получите кластерную среду.

0 голосов
/ 12 июля 2012

Запустите эту программу на Java, чтобы проверить, использует ли Java все доступные процессоры (в моем случае 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 (;;) {
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...