JVM大页内存的学习与使用
JVM大页内存的学习与使用
原理和背景
操作系统是计算机的重要组成部分.
现代的操作系统一般都采用 段页式内存管理.
段一般是为了管理和权限
页主要是为了虚拟内存和物理内存的映射.
分页管理可以让物理上不连续的内存在程序看来是逻辑地址连续的.
但是这也意味着分页分页内存管理需要有一个虚拟内存和物理内存的映射关系
为了加快操作系统的速度, 一般采用硬件的MMU进行映射管理.
而CPU内部有一块TLB 就是进行快速查找使用的
CPU内存的寄存器容量是非常小的, 所以为了提高寸土寸金的利用率.
大小恒定的TLB如果能够过滤查找更多的内存时, 他的效果是最佳的
2M的内存页比4KB的内存也, TLB 能够多存储512倍的地址空间
所以使用比默认地址页更大的内存页面, 是很好的提高访存性能的方法.
64位系统的寻址空间其实非常大, 一般操作系统都采用 48位的虚拟地址空间
理论上可以访问 256T的内存.
页面大小一般是从 2的12次方开始计算 也就是 4KB
然后每次提升 2的9次方. 也就是 2MB和 1GB.
JVM
JVM 其实是一套小型的虚拟机.
其实自己也是一套操作系统.
也进行进程管理, 内存管理, IO管理等.
他的性能其实也受到硬件等的制约.
比较大的内存情况下, 使用大页内存能够加快TLB的访存处理
对性能有比较好的提高.
其实需要说明TLB: 每个核心都有自己的TLB.
Linux环境下的不管是多进程结构(Nginx) 还是 多线程结构(JVM) 其实都是prcess的概念.
他的TLB其实是多核心理论上需要保持同步.
进程切换时, 其实TLB就会被刷出和刷入, 是进程切换的一大时间损耗.
如果能够减少TLB的内容, 并且符合程序的空间和时间局限性, 那么性能可能会有较大的提升.
不需要加载太多的TLB, 并且可以访存更大的地址, 提高性能.
大页内存的种类
透明大页和大页
透明大页是 redhat 发明的
他的目标是减少管理成本, 只要开启了, 他会自主的帮你去扩展连续的页面作为大页使用.
他不会造成不使用透明大页的内存浪费, 但是他的申请和释放会有比较大的延迟,
所以很多大型内存应用,比如Oracle数据库 严令需要关闭透明大页
大页内存
大页内存在有足够空间时指定, 并且设置了之后不使用大页内存的程序无法访问这一块内存.
基本上可以理解为是独占独享的, 不会被释放,也不会被swap到磁盘
性能是最优秀的, 但是也是比较浪费空间的一种方式.
开启也大页内存 需要说明必须修改默认共享段的大小, 理论上可以设置的很大
大于操作系统的内存也可以.
透明大页的使用方式
查看透明大页的情况:
cat /sys/kernel/mm/transparent_hugepage/enabled
如果JVM使用透明大页需要修改为:
echo "madvise" > /sys/kernel/mm/transparent_hugepage/enabled
JVM 支持在 madvise mode 中配置时使用 THP ,但需要使用 -XX:+UseTransparentHugePages。
完成此操作后,Java 堆以及其他内部 JVM 数据结构将由 transparent huge pages 支持。
可以在 JVM的启动日志里面: -Xlog:gc+init -Xlog:pagesize 进行查看.
标准大页的使用方式
查看系统里面的大页信息
ls /sys/kernel/mm/hugepages/
一般会得到两个:
hugepages-2048kB hugepages-524288kB
一般可以采用在线修改. 或者是修改 sysctl.conf的方式进行
如果没发重启机器 或者是其他方式, 可以使用 如下方式进行处理.
echo 64009 > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages
需要注意 JVM的参数与 透明大页的不一样:
-XX:+UseLargePages 或者是 -XX:+UseHugeTLBFS 进行启用.
优缺点
两种方法各有利弊,选择哪一种取决于多个方面。
THP 更易于设置和使用,但在使用 HugeTLB 页面时你有更多控制权。
如果延迟是你最关心的问题,那么你可能应该使用 HugeTLB 页面,因为你永远不会等待操作系统释放足够的连续内存。
作为替代方案,你可以将 defrag THP 选项配置为在没有 large pages 可用时不停止,但这可能会带来吞吐量成本。
如果内存占用是一个问题,THP 是避免必须预先提交整个 Java 堆的更好选择。
使用哪种类型的 large pages 取决于应用程序和环境,但在很多情况下,使用任何类型的 large pages 都会对性能产生积极影响。
来源: https://juejin.cn/post/7011002046899978253
JVM大页内存的学习与使用的更多相关文章
- 大页内存(HugePages)在通用程序优化中的应用
今天给大家介绍一种比较新奇的程序性能优化方法-大页内存(HugePages),简单来说就是通过增大操作系统页的大小来减小页表,从而避免快表缺失.这方面的资料比较贫乏,而且网上绝大多数资料都是介绍它在O ...
- [development][dpdk][hugepage] 大页内存的挂载
参考: [development][dpdk][hugepage] 为不同的结点分配不同大小的大页内存 完成了以上内容之后, 下一步需要做的是挂载, 大页内存只有被挂载了之后,才能被应用程序使用. 挂 ...
- [development][dpdk][hugepage] 为不同的结点分配不同大小的大页内存
这个事来自dpdk, 所以, 先参考. http://dpdk.org/doc/guides/linux_gsg/sys_reqs.html 当前, 假设你已经读过上边内容, 知道大页内存时候, dp ...
- 大页内存(HugePages)
原文转载自:http://blog.csdn.net/yutianzuijin/article/details/41912871 今天给大家介绍一种比较新奇的程序性能优化方法—大页内存(HugePag ...
- OpenStack 高性能虚拟机之大页内存
目录 文章目录 目录 前文列表 虚拟存储器系统 页式虚拟存储器 大页内存 Linux 的大页内存 大页的实现原理 大页内存配置 透明巨型页 THP 大页面对内存的影响 Nova 虚拟机的大页内存设置 ...
- Linux大页内存管理等---菜鸟初学
1. 查看linux的内存情况: free -m 2. 查看是否开启大页的方法: cat /proc/meminfo |grep -i HugePage AnonHugePages: 276480 k ...
- Linux 之 hugepage 大页内存理论
HugePages是通过使用大页内存来取代传统的4kb内存页面,使得管理虚拟地址数变少,加快了从虚拟地址到物理地址的映射以及通过摒弃内存页面的换入换出以提高内存的整体性能.尤其是对于8GB以上的内存以 ...
- JVM运行时内存结构学习
学习JVM运行模型比较重要,先看一幅图片: 运行时数据区(内存结构) : 1.方法区(Method Area)类的所有字段和方法字节码,以及一些特殊方法如构造函数,接口代码也在这里定义.简单来说,所 ...
- 关于JVM加载内存图学习小密招
先看如下代码: Person.java public class Person { private String name; private int age; static int count = 0 ...
- UIO,大页内存,CPU亲和性,NUMA机制等
Linux环境下的UIO(Userspace I/O) UIO 用户空间下驱动程序的支持机制.DPDK使用UIO机制使网卡驱动程序运行在用户态,并采用轮询和零拷贝方式从网卡收取报文,提高收发报文的性能 ...
随机推荐
- 报错信息如下:出现身份验证错误。要求的函数不受支持。可能是由于CredSSP加密数据库修正。
微软官方已出补丁包:CVE-2018-0886 的 CredSSP 更新 Windows Server 2016, all editions.Windows Server 2012 R2 Standa ...
- 善用 vscode 的批量和模板技巧来提效
vs code 其实有很多实用的技巧可以在日常工作中带来很大的提效,但可能是开发中没有相应的痛点场景,因此有些技巧接触的人不多 本篇就来介绍下多光标的批量操作和模板代码两种技巧在日常工作中的提效 涉及 ...
- 【csharp】抽象类与接口有哪些不同?什么时候应该使用抽象类?
抽象类与接口有哪些不同? 抽象类和接口是在面向对象编程中两个不同的概念,它们有一些重要的区别.以下是抽象类和接口的主要不同点: 抽象类(Abstract Class): 成员类型: 抽象类可以包含抽象 ...
- Redis配置模式及各自优缺点
大家好,我是闲者,今天简单聊下redis部署模式.Redis支持多种不同的数据结构和模式,以满足不同的使用场景.以下是一些常见的Redis配置和模式示例以及详解.原文地址:Redis配置模式及各自优缺 ...
- 动态规划问题(六)最长公共子序列(LCS)
问题描述 给你两个字符串,要求得到这两个字符串的最长公共子序列长度. 比如:对于输入的字符串 S1 "AGGTAB" 和 S2 "GXTXAYB",它们 ...
- linux中mysql下载安装部署
创建mysql文件 mkdir mysql 首先通过yum下载wget命令 yum -y install wget 在mysql文件中通过wget下载MySQL存储库 wget https://dev ...
- SaaS 营销,如何利用 RPA 实现自动化获客?
大家好,这次给大家带来如何利用 RPA 实现自动化获客. 一.RPA 是什么?难吗? RPA 对大家来说,可能挺陌生的,其实它很简单. Robotic Process Automation(简称 RP ...
- 聊聊GaussDB AP是如何执行SQL的
本文分享自华为云社区<GaussDB AP是如何执行SQL的>,作者:yd_270088468. 前言 介绍GaussDB AP各组件是如何协调工作的,会着重介绍SQL引擎. 1.SQL引 ...
- 云图说 | 通过Helm模板快速部署中间件应用
摘要:通过全容器化Helm模板,快速部署中间件应用. 云容器引擎基于Kubernetes Helm标准的模板提供统一的资源管理与调度,高效地实现了模板的快速部署与后期管理,大幅简化了Kubernete ...
- 云小课|MRS基础原理之CarbonData入门
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:CarbonDat ...