当前位置: 首页 > news >正文

解决ptmalloc2内存过大的三种方案

除了 JVM 负责管理的堆内存外,Java 还拥有一些堆外内存,由于它不使用 JVM 的垃圾回收机制,所以更稳定、持久,处理 IO 的速度也更快。这些堆外内存就会由 C 库内存池负责分配,这是 Java 受到 C 库内存池影响的原因。进程申请内存的速度,以及总内存空间都受到C库内存池的影响,JVM的堆外内存会先走内存池,内存池选择策略:如果主要分配 256KB 以下的内存,特别是在多线程环境下,应当选择 TCMalloc;否则应使用 Ptmalloc2,它的通用性更好。二者性能对比请查看 TCMalloc : Thread-Caching Malloc

子线程内存池最多只能到 8 倍的 CPU 核数,比如在 32 核的服务器上,最多只会有 256 个子线程内存池,每个子线程预分配的内存是 64MB。

解决ptmalloc2内存过大的三种方案(转自http://fengfu.io):

第一种:控制分配区的总数上限。默认64位系统分配区数为:cpu核数*8,如当前环境16核系统分配区数为128个,每个64M上限的话最多可达8G,限制上限后,后续不够的申请会直接走mmap分配和munmap回收,不会进入ptmalloc2的buffer池。 所以第一种方案调整一下分配池上限个数到4:

export MALLOC_ARENA_MAX=4

第二种:之前讲到ptmalloc2默认会动态调整mmap分配阈值,因此对于较大的内存请求也会进入ptmalloc2的内存buffer池里,这里可以去掉ptmalloc的动态调整功能。可以设置 M_TRIM_THRESHOLD,M_MMAP_THRESHOLD,M_TOP_PAD 和 M_MMAP_MAX 中的任意一个。这里可以固定分配阈值为128K,这样超过128K的内存分配请求都不会进入ptmalloc的buffer池而是直接走mmap分配和munmap回收(性能上会有损耗,当前环境大概10%)。:

export MALLOC_MMAP_THRESHOLD_=131072

export MALLOC_TRIM_THRESHOLD_=131072

export MALLOC_TOP_PAD_=131072

export MALLOC_MMAP_MAX_=65536

第三种:使用tcmalloc来替代默认的ptmalloc2。google的tcmalloc提供更优的内存分配效率,性能更好,ThreadCache会阶段性的回收内存到CentralCache里。 解决了ptmalloc2中arena之间不能迁移导致内存浪费的问题。

http://www.lqws.cn/news/510427.html

相关文章:

  • 使用GDB调试程序方法
  • 02-Linux内核源码编译
  • java语言中的XML解析
  • 解决Fedora21下无法使用NWJS网页透明效果的问题
  • mybatisPlus动态表前缀
  • 磁悬浮轴承遇上“热浪”挑战:多参数自适应补偿策略揭秘
  • [学习] C语言编程中线程安全的实现方法(示例)
  • day041-web集群架构搭建
  • 棋盘格标定板和圆形标定板的优劣性
  • windows 上 build 时,微软给出的 vcpkg 工具,如何使用
  • MySQL 8.x配置MGR高可用+ProxySQL读写分离(三):配置ProxySQL主从分组信息
  • [3D-Portfolio] docs | js集中式配置 | React组件 | 组件嵌套
  • [附源码+数据库+毕业论文]基于Spring+MyBatis+MySQL+Maven+jsp实现的超市库存商品管理系统,推荐!
  • 16、nrf52840蓝牙学习(唯一ID加密与解密)
  • 华为认证预约考试、考试时长、取消/改期、补考时间汇总
  • C++ <vector>
  • Redis 乱码和LocalDateTime类型缓存问题
  • 鸿蒙开发深入解析:Data Ability 数据共享机制全面指南
  • 工业弧焊机器人气保焊节气装置
  • 搭建智能问答系统,有哪些解决方案,比如使用Dify,LangChain4j+RAG等
  • 【Altium】原理图位号自动标注
  • spring中的切面类实践
  • WPF CommunityToolkit.Mvvm
  • 【技术难题】el-table的全局数据排序实现示例,不受分页影响,以及异步请求带来的页面渲染问题
  • 针对基于深度学习的侧信道分析(DLSCA)进行超参数的贝叶斯优化
  • VIVADO导出仿真数据到MATLAB中进行分析
  • python基础(字符串-复习)
  • 关于素数、唯一分解等内容的详细讲解(从属于GESP五级)
  • vscode + Jlink 一键调试stm32 单片机程序(windows系统版)
  • HarmonyOS Next的HiLog日志系统完全指南:从入门到精通