JVM no puede usar la memoria de páginas grandes porque no tiene el privilegio suficiente para bloquear páginas en la memoria

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

  •  06-07-2019
  •  | 
  •  

Pregunta

Me pregunto ¿cómo puedo conciliar el siguiente error?

  

JVM no puede usar la memoria de páginas grandes porque no tiene suficiente   privilegio de bloquear páginas en la memoria

Las configuraciones son:

  

establezca JAVA_OPTS = -Xms20g -Xmx20g -XX: + UseConcMarkSweepGC -XX: + UseParNewGC   -XX: + UseLargePages -Duser.timezone = " GMT " % DEBUG%

Esto sucedió en Windows Server 2003.

¿Fue útil?

Solución 3

Solo Windows Server 2003 admite la memoria de páginas grandes. Para usarlo, el administrador primero debe asignar privilegios adicionales al usuario que ejecutará la aplicación: 1. seleccione Panel de control - > Herramientas administrativas - > política de seguridad local 2. selecciona Políticas locales - > Asignación de derechos de usuario 3. Haga doble clic en " Bloquear páginas en la memoria " ;, agregue usuarios y / o grupos 4. reinicie la máquina

Otros consejos

Al buscar en Google en el error se accede a hotspot / src / os / win32 / vm / os_win32.cpp archivo de origen en openjdk-6 que contiene el siguiente comentario:

// 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.

Si está utilizando Windows 2003, esto podría ayudar. Si no, no tengo ninguna otra sugerencia.

Me he dado cuenta de que solo configurar las configuraciones a continuación no es suficiente:

  

El soporte para páginas grandes de Windows está disponible en Windows 2003. Para usar
  memoria de página grande, el administrador primero debe asignar privilegios adicionales
  al usuario:

     
    
        
  • selecciona Panel de control - > Herramientas administrativas - > Política de seguridad local
  •     
  • selecciona Políticas locales - > Asignación de derechos de usuario
  •     
  • haga doble clic en " Bloquear páginas en la memoria " ;, agregue usuarios y / o grupos
  •     
  • reiniciar
  •     
  
     

Tenga en cuenta que los pasos anteriores también son necesarios para el administrador, como administradores
  de forma predeterminada, no tiene el privilegio de bloquear páginas en la memoria.

El programa que llamará al intérprete de java (java program.java ) debe llamarse con reglas administrativas. Ejemplo: Eclipse, Netbeans, cmd, etc. En Windows fabricado después de 2003, necesita hacer la configuración arriba, y luego puede hacer clic con el botón derecho para abrir el menú y seleccionar " ejecutar como administrador " en la Icono o programa ejecutable de llamadas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top