A JVM não pode usar a memória de página grande porque não tem privilégio suficiente para bloquear as páginas na memória

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

  •  06-07-2019
  •  | 
  •  

Pergunta

Gostaria de saber como posso reconciliar o seguinte erro?

A JVM não pode usar a memória de página grande porque não tem privilégio suficiente para bloquear as páginas na memória

As configurações são:

Definir java_OPTS = -xms20g -xmx20g -xx:+useconCmarksweepgc -xx:+useParnewgc -xx:+uselargePages -duser.TimeZone = "GMT" %de depuração %

Isso aconteceu no Windows Server 2003.

Foi útil?

Solução 3

Somente o Windows Server 2003 suporta memória de página grande. Para usá -lo, o administrador deve primeiro atribuir privilégio adicional ao usuário que estará executando o aplicativo: 1. Selecione Painel de controle -> Ferramentas Administrativas -> Política de Segurança Local 2. Selecione Políticas Locais -> Atribuição de Direitos do Usuário 3. Double Clique em "Bloquear páginas na memória", adicione usuários e/ou grupos 4. Reinicie a máquina

Outras dicas

Pesquilo no Google sobre o erro leva ao hotspot/src/os/win32/vm/os_win32.cpp Arquivo de origem no OpenJDK-6 Wich contém o seguinte comentário:

// Windows large page support is available on Windows 2003. In order to use
// large page memory, the administrator must first assign additional privilege
// to the user:
//   + select Control Panel -> Administrative Tools -> Local Security Policy
//   + select Local Policies -> User Rights Assignment
//   + double click "Lock pages in memory", add users and/or groups
//   + reboot
// Note the above steps are needed for administrator as well, as administrators
// by default do not have the privilege to lock pages in memory.
//
// Note about Windows 2003: although the API supports committing large page
// memory on a page-by-page basis and VirtualAlloc() returns success under this
// scenario, I found through experiment it only uses large page if the entire
// memory region is reserved and committed in a single VirtualAlloc() call.
// This makes Windows large page support more or less like Solaris ISM, in
// that the entire heap must be committed upfront. This probably will change
// in the future, if so the code below needs to be revisited.

Se você estiver usando o Windows 2003, isso pode ajudar. Caso contrário, não tenho nenhuma outra sugestão.

Enfrentei que apenas as configurações definidas abaixo não são suficientes:

O suporte à página grande do Windows está disponível no Windows 2003. para usar
Memória de página grande, o administrador deve primeiro atribuir privilégios adicionais
para o usuário:

  • Selecione Painel de Controle -> Ferramentas Administrativas -> Política de Segurança Local
  • Selecione Políticas Locais -> Atribuição de Direitos do Usuário
  • Clique duas vezes em "Páginas de bloqueio na memória", adicione usuários e/ou grupos
  • reinício

Nota As etapas acima também são necessárias para o administrador, como administradores
Por padrão, não tem o privilégio de bloquear as páginas na memória.

O programa que chamará o intérprete Java (Java Program.java) deve ser chamado com rulles administrativos. Exemplo: Eclipse, NetBeans, CMD, etc. No Windows Made After 2003, você precisa fazer configurações acima e, depois de clicar com o botão direito para abrir o menu e escolher "Corra como Admnistrator" no ícone ou programa de chamadas executáveis.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top