Como fazer WebLogic usar todos os processadores em uma máquina de processador de múltiplos

StackOverflow https://stackoverflow.com/questions/1314077

  •  19-09-2019
  •  | 
  •  

Pergunta

Notamos um comportamento peculiar com Web Logic Java / em um de nossos servidores com múltiplos processadores, ontem, então queria obter os seus pensamentos sobre ele.

Por alguma razão, Web Logic / Java usar apenas um processador de dois processadores disponíveis. Quando corremos alguns carga pesada, eu podia ver o CPU em um atingindo quase 100% e o outro processador é completamente ocioso. Não importa se esta é uma máquina virtual (..mas esta não é uma máquina virtual)

Uma coisa interessante é que qualquer outro sistema operacional-atividades indicam atividade do processador em ambos.

Saudações, _UB

Foi útil?

Solução

Em cenários comuns, WebLogic (e, portanto, Java) deve ser capaz de usar todos os processadores disponíveis no servidor onde ele está correndo. WebLogic tem um pool de threads de processamento de solicitação e quando os pedidos estão chegando ao mesmo tempo, eles são manipulados simultaneamente. Se o servidor tiver vários processadores aqueles deve ser então utilizado por encadeamentos Java.

Se o aplicativo web Java em execução no WebLogic está usando SingleThreadModel em seu servlet (s), há dois segmentos podem executar o servlet simultaneamente e, portanto, você pode ver apenas uma CPU no trabalho lá. Este modelo não é recomendado e eu não acho que muito usada de qualquer maneira.

Já ouvi algumas pessoas reclamando que eles não podem obter os seus servidores de aplicativos Java para usar mais de 1 CPU ao executar um sistema operacional de máquina virtual, como o VMWare, mesmo quando eles têm dedicado mais de uma CPU para o VM. Eu não tenho nenhuma idéia do que foi a razão para este comportamento estranho então.

Talvez você deve tentar acertar alguma página JSP muito simples com solicitações simultâneas e ver se mais de 1 CPU está sendo usado. Se isso funcionar, o problema está na sua aplicação.

Outras dicas

docs O WebLogic dar conselhos sobre como configurar para multi-processador máquinas . Você iria acabar com um ambiente de cluster.

Executar este programa em Java para testar se o Java tira proveito de todas as CPUs disponíveis (8 no meu 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 (;;) {
        }
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top