Java 执行 JVM Native 方法导致内存碎片

背景🚞

由于需要调用到 C/C++ 的业务对外,使用了 Java 来封装 SDK 进行调用。
事故起因⚡:当 Java 使用 JNI 发生调用 JVM Native 本地方法时,发现内存一直飙升发生 OOM。

操作复现🔍

使用 Jmeter 进行压测高并发环境
1)当 Java 调用 C 时开辟一段内存空间,紧接着再次调用 C 释放内存空间,内存正常。
2)当 Java 调用 C 时开辟一段内存空间时,不进行释放,待多线程开辟大量内存空间,再度批量释放(批量释放的代码就是 for 循环调用 C 提供的方法释放,跟情况 1 释放方法逻辑一致)
发现第二种方法内存释放完后依旧不降,内存无法释放的情况,发生 OOM。

参考帖子📑:

1)https://segmentfault.com/a/1190000042015931?sort=newest

2)https://juejin.cn/post/7255634554987020343#heading-19

3)https://juejin.cn/post/7241395886856880165

最终排查得出🔥

是 Linux 操作系统默认使用的内存分配器是 ptmalloc2,该内存分配器内部有一个内存池,ptmalloc2 在高并发分配内存时,会存在较多内存碎片无法释放的情况,碎片积压到一定程度甚至会导致进程内存不够用,最终OOM。

解决方法🍑

替换内存分配器为 google 的 tcmalloc 或 facebook 的 jemalloc

将内存分配器的库打包到项目部署包中,再用 export LD_PRELOAD 指定函数库

Dockerfile 编写💡

RUN yum upgrade -y; yum group install -y "Development Tools"; \yum install -y wget tcl which zlib-devel git docbook-xsl libxslt graphviz; \yum clean all
RUN mkdir -p /opt && cd /opt && git clone https://github.com/jemalloc/jemalloc.git \&& mkdir /tmp/jprof && mkdir /tmp/nmt && mkdir /tmp/pmap \&& mkdir /diagnosticRUN cd /opt/jemalloc && git checkout -b stable-4 origin/stable-4
RUN cd /opt/jemalloc && ./autogen.sh --enable-prof
RUN cd /opt/jemalloc && make dist
RUN cd /opt/jemalloc && make
RUN cd /opt/jemalloc && make installENV LD_PRELOAD="/usr/local/lib/libjemalloc.so"
ENV MALLOC_CONF="prof_leak:true,prof:true,lg_prof_interval:25,lg_prof_sample:18,prof_prefix:/tmp/jeprof"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/2498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++笔记打卡第21天(map)

1.map基本概念 map中所有元素都是pairpair中第一个元素为key,起到索引作用,第二个元素为value所有元素都会根据元素的键值自动排序 本质: map/multimap属于关联式容器,底层结构是用二叉树实现 优点: 可以根据key值…

HTTP慢连接攻击的原理和防范措施

随着互联网的快速发展,网络安全问题日益凸显,网络攻击事件频繁发生。其中,HTTP慢速攻击作为一种隐蔽且高效的攻击方式,近年来逐渐出现的越来越多。 为了防范这些网络攻击,我们需要先了解这些攻击情况,这样…

【笔试】03

FLOPS FLOPS 是 Floating Point Operations Per Second 的缩写,意为每秒浮点运算次数。它是衡量计算机性能的指标,特别是用于衡量计算机每秒能够执行多少浮点运算。在高性能计算领域,FLOPS 被广泛用来评估超级计算机、CPU、GPU 和其他处理器…

2024年区块链链游即将迎来大爆发

随着区块链技术的不断发展和成熟,其应用领域也在不断扩展。其中,区块链链游(Blockchain Games)作为区块链技术在游戏行业中的应用,备受关注。2024年,区块链链游行业即将迎来爆发,这一趋势不容忽…

Windows10如何关闭Edge浏览器的Copilot

在Windows10更新后,打开Edge浏览器,无论复制什么内容,都会弹出Copilot人工智能插件,非常令人反感,网上搜索的关闭方法都非常麻烦,比如:组策略和注册表。自己摸索得出最简便有效的关闭方法。 1、…

【java毕业设计】 基于Spring Boot+mysql的高校心理教育辅导系统设计与实现(程序源码)-高校心理教育辅导系统

基于Spring Bootmysql的高校心理教育辅导系统设计与实现(程序源码毕业论文) 大家好,今天给大家介绍基于Spring Bootmysql的高校心理教育辅导系统设计与实现,本论文只截取部分文章重点,文章末尾附有本毕业设计完整源码及…

一致性hash

一、什么是一致性hash 普通的hash算法 (hashcode % size ),如果size发生变化,几乎所有的历史数据都需要重hash、移动,代价非常大,常见的java中的hashmap就是如此。 那如果在hash表扩容或者收缩的时候size能够保持不变&#xff0…

gitee / github 配置git, 实现免密码登录

文章目录 怎么配置公钥和私钥验证配置成功问题 怎么配置公钥和私钥 以下内容参考自 github ssh 配置,gitee的配置也是一样的; 粘贴以下文本,将示例中使用的电子邮件替换为 GitHub 电子邮件地址。 ssh-keygen -t ed25519 -C "your_emai…

线性代数 --- 矩阵的对角化以及矩阵的n次幂

矩阵的对角化以及矩阵的n次幂 (特征向量与特征值的应用) 前言: 在上一篇文章中,我记录了学习矩阵的特征向量和特征值的学习笔记,所关注的是那些矩阵A作用于向量x后,方向不发生改变的x(仅有尺度的缩放)。线…

VMware 15 安装centos7虚拟机

1. 安装前准备 1.1 下载centos 阿里巴巴开源镜像站-OPSX镜像站-阿里云开发者社区 下载需要版本的centos版本 直达链接 centos7.9 : centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云 .基础使用的话安装选择这个就行了,大概下载几分钟 2. …

STM32 ADC采样:基础与实践

STM32的ADC采样是嵌入式系统设计中的一个重要环节,它涉及到模拟信号的采集和转换。以下是一篇关于STM32 ADC采样基础与实践的文章,包括一些基础的代码示例。 STM32 ADC采样:基础与实践 引言 STM32系列微控制器因其强大的ADC功能而广泛应用…

uniapp 开发H5中适配底部安全区域不生效的解决方法

在适配底部安全区域时我们通常会使用如下方法 box-sizing: content-box; padding-bottom: 0 !important; padding-bottom: constant(safe-area-inset-bottom) !important; padding-bottom: env(safe-area-inset-bottom) !important; 但是只是加上面的样式会发现并不起作用&…

linux负载均衡 和 系统负载分析笔记

1 负载均衡 1.1 计算负载 1.1.1 PELT算法简介 从Linux3.8内核以后进程的负载计算不仅考虑权重,⽽且跟踪每个调度实体的历史负载情况,该算法称为PELT(Per-entity Load Tracking) 《奔跑吧Linux内核》卷1:基础架构;P505 相关资料…

银河麒麟V10 SP1服务器客户端定时数据同步

银河麒麟V10 SP1服务器客户端定时数据同步 0.概述 当前只测试了将数据从客户端往服务端推送,两个客户端分别推送不同的数据 1.环境 三台电脑均为银河麒麟V10SP1桌面操作系统 服务器IP:192.168.1.51 用户名:wlh 客户端IP:192…

OpenStack云计算(十一)——OpenStack网络管理,验证OpenStack网络资源模型,验证来巩固和加深对OpenStack网络资源模型的理解

项目实训一 【实训题目】 验证OpenStack网络资源模型 【实训目的】 通过验证来巩固和加深对OpenStack网络资源模型的理解。 【实训准备】 (1)复习Neutron网络资源模型。 (2)重点理解网络、子网、端口和路由器的概念。 【实…

用 LM Studio 1 分钟搭建可在本地运行大型语言模型平台替代 ChatGPT

📌 简介 LM Studio是一个允许用户在本地离线运行大型语言模型(LLMs)的平台,它提供了一种便捷的方式来使用和测试这些先进的机器学习模型,而无需依赖于互联网连接。以下是LM Studio的一些关键特性: 脱机&am…

【笔记django】创建一个app

创建app 错误 raise ImproperlyConfigured( django.core.exceptions.ImproperlyConfigured: Cannot import rules. Check that dvadmin.rules.apps.RulesConfig.name is correct.原因 刚创建的rules的app被手动移动到了dvadmin目录下 而dvadmin/rules/apps.py的内容还是&…

kubeadmin搭建自建k8s集群

一、安装要求 在开始之前,部署Kubernetes集群的虚拟机需要满足以下几个条件: 操作系统 CentOS7.x-86_x64硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多【注意master需要两核】可以访问外网,需要…

vue2 点击预览本地 word excle pdf 文件

安装 考虑到三个包加一起的话会比较大,所以拆成了三个包,需要哪个自行安装即可。 //docx文档预览组件 npm install vue-office/docx//excel文档预览组件 npm install vue-office/excel//pdf文档预览组件 npm install vue-office/pdf npm i --save vue…

万界星空科技电机行业MES+商业电机行业开源MES+项目合作

要得出mes系统解决方案在机电行业的应用范围,我们先来看一下传统机电行业的管理难题: 1、 产品标准化程度较低,制造工艺复杂,生产周期较长,产品质量不稳定; 2、 自动化程度低,大多数工序以手工…