我想知道如何协调以下错误?
JVM无法使用大页面内存,因为它没有足够的内存 将页面锁定在内存中的权限
设置为:
设置JAVA_OPTS = -Xms20g -Xmx20g -XX:+ UseConcMarkSweepGC -XX:+ UseParNewGC -XX:+ UseLargePages -Duser.timezone =“GMT”%DEBUG%
这发生在Windows Server 2003上。
答案 0 :(得分:5)
在错误上搜索导致openjdk-6中的hotspot/src/os/win32/vm/os_win32.cpp源文件,其中包含以下注释:
// 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.
如果您使用的是Windows 2003,这可能有所帮助。如果没有,我没有任何其他建议。
答案 1 :(得分:1)
我只面对以下设置配置是不够的:
Windows 2003上提供Windows大页面支持。为了使用
大页面内存,管理员必须先分配额外的权限 给用户:
- 选择控制面板 - >管理工具 - >地方安全政策
- 选择本地政策 - >用户权利分配
- 双击“锁定内存中的页面”,添加用户和/或组
- 重启
请注意,管理员也需要执行上述步骤,作为管理员 默认情况下,没有权限将页面锁定在内存中。
必须使用管理规则调用将调用java解释器(java program.java )的程序。示例:Eclipse,Netbeans,cmd等在2003年之后制作的Windows中,您需要进行上述设置,然后单击右键打开菜单并在图标上选择“以管理员身份运行”或可执行的来电程序。
答案 2 :(得分:0)
只有Windows Server 2003支持大页面内存。要使用它,管理员必须首先为将运行该应用程序的用户分配其他权限: 1.选择控制面板 - >管理工具 - >本地安全政策 2.选择本地政策 - >用户权利分配 3.双击“锁定内存中的页面”,添加用户和/或组 4.重启机器