Jemalloc内存分配概要¶
中实现雷竞技下载官网Percona Server for MySQL 8.0.25-15,雷竞技下载官网用于MySQL的Percona服务器可以利用jemalloc分配器的内存分析功能。这种能力提供了一种方法来调查与内存相关的问题。
需求¶
这种内存分析需要jemalloc_detected.这个只读变量返回真正的如果jemalloc使用了启用概要分析的选项雷竞技下载官网用于MySQL的Percona服务器.
作为根用户,使用以下标志自定义jemalloc:
| 选项 | 描述 |
|---|---|
| -enable-stats | 启用统计信息收集能力 |
| -enable-prof | 启用堆分析和检测泄漏的能力。 |
使用LD_PRELOAD.构建库,配置malloc配置教授:真正的字符串,然后使用LD_PRELOAD要预加载libjemalloc.so图书馆。的libprocessMemoryProfiler类自动检测库并启用分析支持。
命令示例如下:
./configure——enable-stats——enable-prof && make && make install MALLOC_CONF=prof:true LD_PRELOAD=/usr/lib/libjemalloc.so . sh
使用Pe雷竞技下载官网rcona Server for MySQL,使用jemalloc,并启用剖析¶
使用实例检测是否设置了jemalloc。
选择@@jemalloc_detected;
要在MySQL客户端中启用jemalloc剖析,运行以下命令:
集全球jemalloc_profiling=在;
malloc_stats_totals表以字节为单位返回内存使用情况的统计信息。该命令不接受参数,以表的形式返回结果。
下面的示例命令显示此结果:
使用performance_schema;
选择*从malloc_stats_totals;
预期的输出
+----+------------+------------+------------+-------------+------------+ | id分配| | | | |居民保留映射元数据 | +----+------------+------------+------------+-------------+------------+ | 1 | 390977528 | 390977528 | 390977528 | 436813824 | 436813824 | +----+------------+------------+------------+-------------+------------+ 1行集(0.00秒)
的malloc_stats表返回累计总数,以字节为单位,每个类型的竞技场的几个统计数据。该命令不接受参数,以表的形式返回结果。
下面的示例命令显示此结果:
使用performance_schema;
mysql >选择*从malloc_stats订单通过类型DESC限制3.;
预期的输出
+--------+-------------+-------------+-------------+-------------+ | 分配类型| | NMALLOC | NDALLOC | NRESQUESTS | +--------+-------------+-------------+-------------+-------------+ | 小| 586156 | 23578872 | 0 | 2649417 | |大| 367382528 | 6355 | 2218 | 0 | | | 0 | 0 | 0 | | +--------+-------------+-------------+-------------+-------------+ 3行集(0.00秒)
转储概要文件¶
剖析对malloc ()调用采样的堆栈跟踪并将其存储在内存中的单独位置。可以将这些示例转储到文件系统中。转储返回内存状态的详细视图。
这个过程是全球性的;因此,只有一个并发运行是可用的,并且只有最近的运行存储在磁盘上。
使用实例创建配置文件转储文件。
冲洗内存配置文件;
生成的内存概要转储文件被写入/tmp目录。
您可以使用jeprof程序,该程序必须安装在主机系统的适当路径上。这个程序是一个perl脚本,后期处理转储文件的原始格式。程序没有连接到jemalloc库和版本号不需要匹配。
使用实例验证转储结果。
ls/tmp/jeprof_mysqld* /tmp/jeprof_mysqld.1.0.170013202213 jeprof . /tmp/jeprof_mysqld* /tmp/jeprof_mysqld.1.0.170013202213——show_bytes/ tmp / jeprof_mysqld.1.0.170013202213jeprof。* .heap
您还可以访问内存配置文件以绘制内存使用的图形。这种能力要求jeprof而且点都在/tmp路径下。为了使图形显示有用的信息,二进制文件必须包含符号信息。
执行如下命令:
jeprof——点/usr/sbin/mysqld/ tmp / jeprof_mysqld.1.0.170013202213>/ tmp / jeprof1.dot点——Tpng/ tmp / jeprof1.dot>/ tmp / jeprof1.png
请注意
一个例子分配图.
PERFORMANCE_SCHEMA表¶
在8.0.25.14中,实现了以下表来检索正在运行的实例的内存分配统计信息,或返回正在运行的实例请求的分配或返回的分配的累计数量。
关于返回的统计信息的更多信息可以在jemalloc.
malloc_stats_totals¶
分配的当前统计信息。所有的测量都以字节为单位。
| 列名 | 描述 |
|---|---|
| 分配 | 应用程序分配的总量 |
| 活跃的 | 由活动页面的应用程序分配的总量。页面大小的倍数,该值大于或等于统计值。分配值。总和不包括分配器元数据页面和stats.arena .。Pdirty or stats.arena ..pmuzzy。 |
| 映射 | 由分配器在活动区中映射的以块为单位的总量。此值不包括非活动块。该值至少与统计值一样大。活动的,是块大小的倍数。 |
| 居民 | 分配器在物理驻留数据页中映射的最大数量。所有分配器元数据页和未使用的脏页都包含在此值中。如果页对应于尚未被触及的需求归零的虚拟内存,则页可能不是物理驻留的。这个值是最大值而不是精确值,是页面大小的倍数。该值大于stats.active。 |
| 保留 | 操作系统的虚拟内存映射所保留的数量。此值不包括任何返回的映射。这种类型的记忆,通常被撤销、未动或清除。该值与物理内存相关联,不包含在映射的内存统计中。 |
| 元数据 | 专用于元数据的总数。此值包含用于引导敏感分配器元数据结构的基本分配。透明的大页面使用不包括在内。 |
malloc_stats¶
为运行中的实例请求的分配或返回的分配的累计数量。
| 列名 | 描述 |
|---|---|
| 类型 | 对象的类型:小、大、大 |
| 分配 | 当前分配给应用程序的字节数。 |
| NMALLOC | 从竞技场的垃圾箱中请求分配的累计次数。该数字包括分配满足分配请求或填充相关tcache(如果启用了opt.tcache)的次数。 |
| NDALLOC | 分配物返回竞技场垃圾箱的累计次数。该数字包括释放分配或清除相关t缓存的次数opt.tcache启用。 |
| NREQUESTS | 已满足的分配请求的累计数目。 |
系统变量¶
新增如下变量:
jemalloc_detected¶
描述:这个只读变量返回真正的如果检测到启用了概要分析的jemalloc。需要以下选项:
安装和编译Jemalloc时启用了分析
雷竞技下载官网用于MySQL的Percona服务器通过使用环境变量配置为使用jemalloc
LD_PRELOAD.环境变量
MALLOC_CONF设置为教授:真正的.
以下选项是:
范围:全球
变量类型:布尔型
默认值:false
jemalloc_profiling¶
描述:启用jemalloc剖析。变量要求jemalloc_detected.
命令行:-jemalloc_profiling [=(OFF|ON)]
配置文件:是
范围:全球
动态:是的
变量类型:布尔型
默认值:OFF
禁用剖析¶
要禁用jemalloc剖析,在MySQL客户端中运行以下命令:
集全球jemalloc_profiling=从;