Jvm之NativeMemoryTracking 使用
开启 Native Memory Tracking
通过 -XX:NativeMemoryTracking 开启:
-XX:NativeMemoryTracking=off:这是默认值,即关闭 Native Memory Tracking
-XX:NativeMemoryTracking=summary: 开启 Native Memory Tracking,但是仅仅按照各个 JVM 子系统去统计内存占用情况
-XX:NativeMemoryTracking=detail:开启 Native Memory Tracking,从每次 JVM 中申请内存的不同调用路径的维度去统计内存占用情况。
注意,开启 detail 比开启 summary 的消耗要大不少,因为 detail 每次都要解析 CallSite 分辨调用位置。
查看 Native Memory Tracking 的信息
开启之后,我们可以通过 jcmd 命令去查看 Native Memory Tracking 的信息,即jcmd VM.native_memory:
jcmd <pid> VM.native_memory或者jcmd <pid> VM.native_memory summary:
两者是等价的,即查看 Native Memory Tracking 的 summary 信息。默认单位是 KB,可以指定单位为其他,例如 jcmd <pid> VM.native_memory summary scale=MB
jcmd VM.native_memory detail:
查看 Native Memory Tracking 的 detail 信息,包括 summary 信息,以及按照虚拟内存映射分组的内存使用信息,还有按照不同 CallSite 调用分组的内存使用情况。默认单位是 KB,可以指定单位为其他,例如 jcmd <pid> VM.native_memory detail scale=MB
Native Memory Tracking 的使用
一般地,只有遇到问题的时候,我们才会考虑开启 Native Memory Tracking,并且在定位出问题后,我们想把它关闭,可以通过 jcmd <pid> VM.native_memory shutdown 进行关闭并清理掉之前 Native Memory tracking 使用的埋点以及占用的内存。
我们无法动态开启 Native Memory tracking,所以只要关闭了,这个进程就无法再开启了。
jcmd 本身提供了简单的对比功能,例如:
jcmd <pid> VM.native_memory baseline 记录当前内存占用信息
之后过一段时间
jcmd <pid> VM.native_memory summary.diff
会输出当前 Native Memory Tracking 的 summary 信息,如果与第一步 baseline 的有差异,会在对应位将差异输出
但是这个工具本身比较粗糙,我们有时候并不知道何时调用 jcmd VM.native_memory summary.diff 合适,因为我们不确定什么时候会有我们想看到的内存使用过大的问题。所以我们一般做成一种持续监控的方式
Native Memory Tracking 的 summary 信息每部分含义
Native Memory Tracking:Total: reserved=5226MB, committed=4044MB
- Java Heap (reserved=2688MB, committed=2688MB)(mmap: reserved=2688MB, committed=2688MB) - Class (reserved=1122MB, committed=110MB)(classes #17824)(malloc=2MB #35027) (mmap: reserved=1120MB, committed=108MB) - Thread (reserved=539MB, committed=539MB)(thread #535)(stack: reserved=536MB, committed=536MB)(malloc=2MB #2708) (arena=1MB #1068)- Code (reserved=258MB, committed=89MB)(malloc=15MB #18512) (mmap: reserved=244MB, committed=74MB) - GC (reserved=78MB, committed=78MB)(malloc=69MB #945) (mmap: reserved=9MB, committed=9MB) - Compiler (reserved=1MB, committed=1MB)- Internal (reserved=441MB, committed=441MB)(malloc=441MB #27828) - Symbol (reserved=23MB, committed=23MB)(malloc=20MB #222966) (arena=3MB #1)- Native Memory Tracking (reserved=5MB, committed=5MB)(tracking overhead=5MB)- Arena Chunk (reserved=11MB, committed=11MB)(malloc=11MB) - Unknown (reserved=59MB, committed=59MB)(mmap: reserved=59MB, committed=59MB)
以下是各个部分的内存使用情况:
Java Heap(堆内存):
保留(reserved):2688MB
承诺(committed):2688MB
通过 mmap 方式分配的内存为保留和承诺的相同值。
Class(类元数据):
保留:1122MB
承诺:110MB
包含 17824 个类。
通过 malloc 分配了 2MB,35027 个对象。
通过 mmap 方式分配的内存保留为 1120MB,承诺为 108MB。
Thread(线程):
保留:539MB
承诺:539MB
有 535 个线程。
线程栈通过 mmap 方式分配,保留和承诺均为 536MB。
通过 malloc 分配了 2MB,2708 个对象。
arena 管理的内存为 1MB,1068 个对象。
Code(代码):
保留:258MB
承诺:89MB
通过 malloc 分配了 15MB,18512 个对象。
通过 mmap 方式分配的内存保留为 244MB,承诺为 74MB。
GC(垃圾收集器):
保留:78MB
承诺:78MB
通过 malloc 分配了 69MB,945 个对象。
通过 mmap 方式分配的内存保留和承诺均为 9MB。
Compiler(编译器):
保留:1MB
承诺:1MB
Internal(内部):
保留:441MB
承诺:441MB
通过 malloc 分配了 441MB,27828 个对象。
Symbol(符号表):
保留:23MB
承诺:23MB
通过 malloc 分配了 20MB,222966 个对象。
arena 管理的内存为 3MB,1 个对象。
Native Memory Tracking(NMT 本身):
保留:5MB
承诺:5MB
跟踪开销为 5MB。
Arena Chunk:
保留:11MB
承诺:11MB
通过 malloc 分配了 11MB。
Unknown(未知):
保留:59MB
承诺:59MB
通过 mmap 方式分配的内存保留和承诺均为 59MB。
过一段时间执行jcmd 7 VM.native_memory summary.diff 查看变化如下
Native Memory Tracking:Total: reserved=5344386KB -2372KB, committed=4136894KB -1332KB- Java Heap (reserved=2752512KB, committed=2752512KB)(mmap: reserved=2752512KB, committed=2752512KB)- Class (reserved=1151599KB +2132KB, committed=115055KB +2260KB)(classes #18263 +376)(malloc=2671KB +84KB #37745 +1690)(mmap: reserved=1148928KB +2048KB, committed=112384KB +2176KB)- Thread (reserved=551959KB -2065KB, committed=551959KB -2065KB)(thread #535 -2)(stack: reserved=548952KB -2056KB, committed=548952KB -2056KB)(malloc=1742KB -7KB #2708 -10)(arena=1265KB -2 #1068 -4)- Code (reserved=265074KB +119KB, committed=94126KB +1031KB)(malloc=15474KB +119KB #19137 +474)(mmap: reserved=249600KB, committed=78652KB +912KB)- GC (reserved=79435KB +2KB, committed=79435KB +2KB)(malloc=70595KB +2KB #1043 +65)(mmap: reserved=8840KB, committed=8840KB)- Compiler (reserved=756KB +38KB, committed=756KB +38KB)(malloc=625KB +38KB #943 +90)(arena=131KB #3)- Internal (reserved=452580KB +640KB, committed=452580KB +640KB)(malloc=452580KB +640KB #28587 +557)- Symbol (reserved=23694KB +293KB, committed=23694KB +293KB)(malloc=20841KB +261KB #227524 +4499)(arena=2853KB +32 #1)- Native Memory Tracking (reserved=5656KB +279KB, committed=5656KB +279KB)(malloc=546KB +136KB #8148 +1887)(tracking overhead=5110KB +143KB)- Arena Chunk (reserved=233KB -3810KB, committed=233KB -3810KB)(malloc=233KB -3810KB)- Unknown (reserved=60888KB, committed=60888KB)(mmap: reserved=60888KB, committed=60888KB)
有时需要结合执行进程监控文件
cat /proc/[pid]/smaps_rollup
执行cat /proc/23/smaps_rollup
00400000-7fff957e1000 ---p 00000000 00:00 0 [rollup]
Rss: 3642320 kB
Pss: 3626824 kB
Pss_Anon: 3625332 kB
Pss_File: 1492 kB
Pss_Shmem: 0 kB
Shared_Clean: 16932 kB
Shared_Dirty: 0 kB
Private_Clean: 56 kB
Private_Dirty: 3625332 kB
Referenced: 3642320 kB
Anonymous: 3625332 kB
LazyFree: 0 kB
AnonHugePages: 0 kB
ShmemPmdMapped: 0 kB
FilePmdMapped: 0 kB
Shared_Hugetlb: 0 kB
Private_Hugetlb: 0 kB
Swap: 0 kB
SwapPss: 0 kB
Locked: 0 kB
相关文章:
Jvm之NativeMemoryTracking 使用
开启 Native Memory Tracking 通过 -XX:NativeMemoryTracking 开启: -XX:NativeMemoryTrackingoff:这是默认值,即关闭 Native Memory Tracking -XX:NativeMemoryTrackingsummary: 开启 Native Memory Tracking,但是仅仅按照各个 JVM 子系统…...
PKCS#7、Bit padding(位填充)、Byte padding(字节填充)、Zero padding(零填充)
PKCS#7、Bit padding(位填充)、Byte padding(字节填充)、Zero padding(零填充)是密码学常见的填充方式。 Bit padding(位填充): 位填充可以应用于任意长度的消息。在消息…...
R语言学习笔记-1
1. 基础操作和函数 清空环境:rm(list ls()) 用于清空当前的R环境。 打印输出:print("Hello, world") 用于输出文本到控制台。 查看已安装包和加载包: search():查看当前加载的包。install.packages("package_na…...
我在广州学 Mysql 系列之 数据“表”的基本操作
ℹ️大家好,我是😆练小杰,今天主要讲得是Mysql数据表的基本操作内容~~ 昨天讲了“Mysql 数据“库“的基本操作”~~ 想要了解更多🈶️MYSQL 数据库的命令行总结!!! “真相永远只有一个”——工藤…...
auto-gptq安装以及不适配软硬件环境可能出现的问题及解决方式
目录 1、auto-gptq是什么?2、auto-gptq安装3、auto-gptq不正确安装可能会出现的问题(1)爆出:CUDA extension not installed.(2)没有报错但是推理速度超级慢 1、auto-gptq是什么? Auto-GPTQ 是一…...
【R语言】基础知识
一、对象与变量 R语言中的所有事物都是对象,如向量、列表、函数,变量、甚至环境等。它的所有代码都是基于对象object的操作,变量只是调用对象的手段。 1、对象 在R语言中,对计算机内存的访问是通过对象实现的。 # 字符型向量 …...
【一本通】虫洞
【一本通】虫洞 C语言代码C代码JAVA代码 💐The Begin💐点点关注,收藏不迷路💐 John在他的农场中闲逛时发现了许多虫洞。虫洞可以看作一条十分奇特的有向边,并可以使你返回到过去的一个时刻(相对你进入虫洞之…...
python爬虫--小白篇【爬虫实践】
一、前言 1.1、王者荣耀皮肤爬虫 根据王者荣耀链接,将王者荣耀的全部英雄的全部皮肤图片爬取保存到本地。经过分析得到任务的三个步骤: 根据首页全部英雄列表连接获取全部英雄的名称hero_name以及对应的hero_id;根据单个英雄的hero_name和h…...
Unity背包道具拖拽(极简版实现)
(感觉Csdn代码页面可以再大一点或者加个放大功能 不然得划着看不太舒服) 1.关键接口,三个拖拽相关的 2.关键参数,PointerEventData 一直没仔细看过,其实有包含鼠标相关的很多参数,鼠标点击次数ÿ…...
spark读取普通文件
spark读取普通文件 txt文件 """ 将一行数据当做一个字段,需要自己切割 字段名称为value 表结构 可以从sql中搞 """ df spark.read.text("../../data/wordcount/input/data.txt") df spark.read.format("text"…...
MySQL SQL语句性能优化
MySQL SQL语句性能优化指南 一、查询设计优化1. 避免 SELECT *2. 使用 WHERE 进行条件过滤3. 避免在索引列上使用函数和表达式4. 使用 LIMIT 限制返回行数5. 避免使用子查询6. 优化 JOIN 操作7. 避免全表扫描 二、索引优化1. 使用合适的索引2. 覆盖索引3. 索引选择性4. 多列索引…...
【蓝桥杯每日一题】技能升级
技能升级 2024-12-10 蓝桥杯每日一题 技能升级 二分 题目大意 一个角色有 N 种可以增加攻击力的技能,对于第 i 个技能首次升级可以提升 A i A_i Ai 点攻击力,随后的每次升级增加的攻击力都会减少 B i B_i Bi 。升级 ⌈ A i B i ⌉ \lceil \frac{A…...
css 实现在一条线上流动小物体(offset-path)
直接贴代码,留几个参考网址给大家 【SVG】路径<Path>标签详解,一次搞懂所有命令参数 探秘神奇的运动路径动画 Motion Path <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport&quo…...
探索 Robyn 框架 —— 下一代高性能 Web 框架
技术博客:探索 Robyn 框架 —— 下一代高性能 Web 框架 什么是 Robyn? Robyn 是一个用 Rust 编写的高性能 Web 框架,旨在通过极简设计和高效并发处理,帮助开发者快速构建可扩展的现代 Web 应用。得益于 Rust 的内存安全性和性能…...
STL容器-map P3613【深基15.例2】寄包柜 普及-
题目来源:洛谷题库 文章目录 map例题map知识点map使用注意:map的常用用法 map例题 P3613【深基15.例2】寄包柜 普及- 题意 根据数据插入/查询 思路 map键值对可以根据柜子编号查找物品,但是柜子又有很多个,考虑数组或者map数组…...
【MySQL 进阶之路】了解 性能优化 与 设计原则
1.B树的优势 “矮胖”结构: 矮:B树的每个节点存储更多的关键字,从而减少了树的层级(最多三层),减少了磁盘I/O操作,提高了查询效率。胖:叶子节点存储实际的数据,并使用双…...
MySQL之数据库三大范式
一、什么是范式? 范式是数据库遵循设计时遵循的一种规范,不同的规范要求遵循不同的范式。 (范式是具有最小冗余的表结构) 范式可以 提高数据的一致性和 减少数据冗余和 更新异常的问题 数据库有六种范式(1NF/2NF/3NF…...
[大数据]Hudi
G:\Bigdata\17.hudi\大数据技术之数据湖Hudi 第1章 Hudi概述 1.1 Hudi简介 Apache Hudi(Hadoop Upserts Delete and Incremental)是下一代流数据湖平台。Apache Hudi将核心仓库和数据库功能直接引入数据湖。Hudi提供了表、事务、高效的upserts/delete、高级索引、流摄取服…...
jenkins harbor安装
Harbor是一个企业级Docker镜像仓库。 文章目录 1. 什么是Docker私有仓库2. Docker有哪些私有仓库3. Harbor简介4. Harbor安装 1. 什么是Docker私有仓库 Docker私有仓库是用于存储和管理Docker镜像的私有存储库。Docker默认会有一个公共的仓库Docker Hub,而与Dock…...
JavaScript 高级特性与 ES6 新特性:正则表达式的深度探索
在现代 JavaScript 开发中,正则表达式(Regular Expressions)和高级特性、ES6 新特性的结合使用,能够极大地提升代码的简洁性、可读性和功能性。本文将深入探讨 JavaScript 中的正则表达式及其在高级特性和 ES6 新特性中的应用&…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
