jvm和linux hugepage

在linux中启动huge page:

1.查看/proc/meminfo的 Hugepagesize配置,默认是是2m

2.计算jvm堆需要的huge page个数,因为huge page是linux中全局使用的,最好保留10%给其他情况使用

3.将计算出来的值写入 /proc/sys/vm/nr_hugepages

4.修改 /etc/sysctl.conf的sys.nr_hugepages 在重启后仍然生效

5.在jvm启动参数中加入-XX:+UserLargePages

linux上支持的hugepage的大小,依赖于cpu 处理器的支持。目前Intel支持 4K、8K、2M、256M等。jvm的LargePageSizeInBytes依赖系统的配置。

在Solaris上,jvm可以随意设置LargePageSizeInBytes。


在linux 2.6.32之后,系统默认启用transparent_hugepage透明大页

通过/sys/kernel/mm/transparent_hugepage/enabled 查看启动情况,默认值是madvise:只有程序明确使用transparent_hugepage时,才会使用transparent_hugepage。但是JVM不会明确使用transparent_hugepage,需要将值设置为always。

对于JVM参数UserLargePages,如果在启动了transparent_hugepage后,不需要再设置了。

如果仍然设置了UserLargePages:

1.系统配置了hugepages,就使用系统配置

2.系统没有配置hugepages,就使用正常page,不再使用hugepage

在Redhat上可以通过命令查看transparent_hugepage的使用:

总的使用量:grep AnonHugePages /proc/meminfo 

每个线程的使用量:grep -e AnonHugePages  /proc/*/smaps | awk  '{ if($2>4) print $0} ' |  awk -F "/"  '{print $0; system("ps -fp " $3)} '

你可能感兴趣的:(jvm和linux hugepage)