Java Support for Large Memory Pages
2011-09-15 16:18
495 查看
http://www.oracle.com/technetwork/java/javase/tech/largememory-jsp-137182.html
At
a Glance
Core
DatabaseDesktopAccessibilitySecurityToolsWeb
ServicesReal-Time
Beginning with Java SE 5.0 there is a cross-platform flag for requesting large memory pages:-XX:+UseLargePages (on by default for Solaris, off by default for Windows and Linux). The goal of large page support is to optimize processor Translation-Lookaside
Buffers.
A Translation-Lookaside Buffer (TLB) is a page translation cache that holds the most-recently used virtual-to-physical address translations. TLB is a scarce system resource. A TLB miss can be costly as the processor must then read from the hierarchical page
table, which may require multiple memory accesses. By using bigger page size, a single TLB entry can represent larger memory range. There will be less pressure on TLB and memory-intensive applications may have better performance.
However please note sometimes using large page memory can negatively affect system performance. For example, when a large mount of memory is pinned by an application, it may create a shortage of regular memory and cause excessive paging in other applications
and slow down the entire system. Also please note for a system that has been up for a long time, excessive fragmentation can make it impossible to reserve enough large page memory. When it happens, either the OS or JVM will revert to using regular pages.
Operating system configuration changes to enable large pages:
Solaris:
As of Solaris 9, which includes
Multiple Page Size Support (MPSS), no additional configuration is necessary.
Linux:
Large page support is included in 2.6 kernel. Some vendors have backported the code to their 2.4 based releases. To check if your system can support large page memory, try the following:
If the output shows the three "Huge" variables then your system can support large page memory, but it needs to be configured. If the command doesn't print out anything, then large page support is not available. To configure the system to use large page memory,
one must log in as root, then:
Increase SHMMAX value. It must be larger than the Java heap size. On a system with 4 GB of physical RAM (or less) the following will make all the memory sharable:
Specify the number of large pages. In the following example 3 GB of a 4 GB system are reserved for large pages (assuming a large page size of 2048k, then 3g = 3 x 1024m = 3072m = 3072 * 1024k = 3145728k, and 3145728k / 2048k = 1536):
Note the /proc values will reset after reboot so you may want to set them in an init script (e.g. rc.local or sysctl.conf).
Windows:
Only Windows Server 2003 supports large page memory. In order to use it, the administrator must first assign additional privilege to the user who will be running the application:
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 the machine
Java Support for Large Memory Pages
Overview | Technologies | Documentation | Community | Support | Downloads |
At
a Glance
Core
DatabaseDesktopAccessibilitySecurityToolsWeb
ServicesReal-Time
» Overview | » Basic | » CORBA | » HotSpot VM | » JNDI | » Mntr-Mgmt | » Tools APIs | » XML |
Buffers.
A Translation-Lookaside Buffer (TLB) is a page translation cache that holds the most-recently used virtual-to-physical address translations. TLB is a scarce system resource. A TLB miss can be costly as the processor must then read from the hierarchical page
table, which may require multiple memory accesses. By using bigger page size, a single TLB entry can represent larger memory range. There will be less pressure on TLB and memory-intensive applications may have better performance.
However please note sometimes using large page memory can negatively affect system performance. For example, when a large mount of memory is pinned by an application, it may create a shortage of regular memory and cause excessive paging in other applications
and slow down the entire system. Also please note for a system that has been up for a long time, excessive fragmentation can make it impossible to reserve enough large page memory. When it happens, either the OS or JVM will revert to using regular pages.
Operating system configuration changes to enable large pages:
Solaris:
As of Solaris 9, which includes
Multiple Page Size Support (MPSS), no additional configuration is necessary.
Linux:
Large page support is included in 2.6 kernel. Some vendors have backported the code to their 2.4 based releases. To check if your system can support large page memory, try the following:
# cat /proc/meminfo | grep Huge HugePages_Total: 0 HugePages_Free: 0 Hugepagesize: 2048 kB #
If the output shows the three "Huge" variables then your system can support large page memory, but it needs to be configured. If the command doesn't print out anything, then large page support is not available. To configure the system to use large page memory,
one must log in as root, then:
Increase SHMMAX value. It must be larger than the Java heap size. On a system with 4 GB of physical RAM (or less) the following will make all the memory sharable:
# echo 4294967295 > /proc/sys/kernel/shmmax
Specify the number of large pages. In the following example 3 GB of a 4 GB system are reserved for large pages (assuming a large page size of 2048k, then 3g = 3 x 1024m = 3072m = 3072 * 1024k = 3145728k, and 3145728k / 2048k = 1536):
# echo 1536 > /proc/sys/vm/nr_hugepages
Note the /proc values will reset after reboot so you may want to set them in an init script (e.g. rc.local or sysctl.conf).
Windows:
Only Windows Server 2003 supports large page memory. In order to use it, the administrator must first assign additional privilege to the user who will be running the application:
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 the machine
相关文章推荐
- There is insufficient memory for the Java Runtime Environment to continue
- There is insufficient memory for the Java Runtime Environment to continue问题解决
- There is insufficient memory for the Java Runtime Environment to continue.
- Java Code Examples for com.sun.jna.Memory
- Java HotSpot(TM) Server VM warning: Insufficient space for shared memory file: /tmp/hsperfdata_ch
- [Android] Error:java.lang.OutOfMemoryError: GC overhead limit exceeded;Execution failed for task ':t
- Can ORACLE use both memory_target and AIX large pages at the same time ?
- 拦截短信java.lang.OutOfMemoryError: array size too large
- 64位Ubuntu14.04 tomcat日志报错 There is insufficient memory for the Java Runtime Environment to continue
- There is insufficient memory for the Java Runtime Environment to continue. 解决
- 【转】Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared memory file:
- How-to: resolve " java.lang.OutOfMemoryError: unable to create new native thread" for hbase thrift
- Java HotSpot(TM) 64-Bit Server VM warning: Insufficient space for shared memory file...
- javaServer pages for beginners
- 大内存( Very Large Memory)和 大页( HugePages)系列二--配置大页
- Mobile Java: "Unprecedented Support" for Java Verification Among Carriers @ JDJ
- Java 读large excel Out of memory解决办法
- This UDF provides automation support for Java applications
- java.sql.SQLException: Packet for query is too large (1055975 > 1048576). You ca
- Configuring Java CAPS for SSL Support - Index