问题标签 [jemalloc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
373 浏览

mysql - 无法为 MySQL 5.7 启用 jemalloc

尝试将 jemalloc 用于 mysql 5.7.30

Linux db1 4.18.0-193.6.3.el8_2.x86_64 #1 SMP 2020 年 6 月 10 日星期三 11:09:32 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

MySQL 5.7.30

yum list installed 显示:jemalloc.x86_64 5.2.1-2.el8 @epel

/usr/lib64/libjemalloc.so.2 中明显的 jemalloc 文件

添加...

... to my.cnf 返回 malloc-lib 的“未知变量”错误

环境

在 systemctl 覆盖文件中不会改变任何东西

手动做

导出 LD_PRELOAD=/usr/lib64/libjemalloc.so.2

在重新启动之前也没有任何效果。

我错过了什么?

0 投票
1 回答
150 浏览

heroku - LD_PRELOAD 不适用于 Heroku + jemalloc + quotaguard

TL;DR:更新你的bin/qgtunnel.


我最近注意到我的网络测功机的内存使用量有所增加。经过一番挖掘,我可以看到LD_PRELOAD应该使用heroku-buildpack-jemalloc设置的变量设置不正确。我使用了一个小脚本 ( bin/show_preload),它帮助我调试它并跟踪哪个程序被覆盖LD_PRELOAD

我在我们的Procfile:

当在 heroku 上启动时,我可以看到它bin/qgtunnel覆盖了我们的LD_PRELOAD配置。

我暂时创建了一个小助手,以确保我保持原始价值以及通过以下方式添加的内容bin/qgtunnel

如果您需要此脚本,请使用它代替 bin/qgtunnel

0 投票
0 回答
66 浏览

c++ - 为什么 jemalloc 分配 4096 字节内存的时间比其他 SMALL 内存要多?

在测试jemalloc-5.2.0分配small_class内存的性能过程中,发现4096字节的内存分配时间明显高于其他小类内存。jemalloc中的4096字节内存分配有什么特殊处理吗?还是有其他原因?

试验结果:

测试报告:

意味着分配 1792 字节的内存消耗 2.12 毫秒的 CPU 时间。

测试代码

0 投票
2 回答
342 浏览

java - Jemalloc:Java 本机内存分析显示 100% je_prof_backtrace

我们有一个多线程生产 Java 应用程序。如本文所述,我们正在尝试检查本机内存使用情况

但是在转储中,我看到 100% 的内存被占用了je_prof_backtrace

如果我使用,输出如下所示text

紧随其后的步骤。

  1. 从这里下载了 jemalloc 5.2.1 发布标签。
  2. ./autogen.sh --enable-prof在 jmalloc tar 解压的目录中。
  3. make

使用以下选项启动应用程序

我是jemalloc的新手。有人可以建议可能出了什么问题吗?

  • 操作系统 - Ubuntu 18.04
0 投票
0 回答
55 浏览

java - 使用 jemalloc 查看可读的名称

我们正在尝试捕获内存泄漏,并且我们正在使用 jemalloc。如何更改树以显示符号/类名?现在,我们的 gif 看起来像这样: 在此处输入图像描述

在我看到的大多数教程中,他们只是说设置以下 2 个环境变量:

我正在运行的命令是:jeprof --show_bytes --gif which javajeprof*.heap > mem.gif

我们正在从 docker-compose 文件运行一个 java 应用程序,使用图像:openjdk:13-jdk-alpine

0 投票
0 回答
38 浏览

dynamic-memory-allocation - 为什么启用透明大页面后,进程使用库 jemalloc 分配了许多非大页面内存?

我已经通过以下步骤在使用 jemalloc 进行内存分配的进程中启用了透明大页面:

  1. 将透明大页面状态设置为“madvice”:

2.设置jemalloc始终使用thp

由于程序只使用jemalloc分配内存,所以预期的结果应该是完全使用的内存大小(RSS)等于分配的huge page的大小。但它有很大不同,如下所示的“AnonHugePages”和“Rss”项目:

我知道如果操作系统中没有足够的大页面可用,则会发生正常的内存分配(4k 页面),将计数添加到“/proc/vmstat”中的“thp_fault_fallback”项。但是该值很小,如下面的代码片段所示,这意味着不会发生太多的非大页面分配:

那么,为什么 RSS 和 THP 的大小有差距呢?期待一些线索和建议。

0 投票
0 回答
79 浏览

bazel - jemalloc mallctl 转储似乎失败

我的项目将 Jemalloc 作为第三方库引入并启用 prof,如下所示:

然后我添加环境变量”

但是当我得到转储文件时,它似乎不正确,如下所示:

我使用 jeprof 来获取解析结果,除了两行,它什么也得不到,像这样:

希望能得到您的帮助,谢谢!

我触发转储的代码是这样的

0 投票
0 回答
44 浏览

c++ - c++ jemalloc malloc large fix size (64K, 128K) 内存占用300us以上

我使用jemalloc进行内存分配,很多线程同时分配大小对象,我监控两个大对象(64K,128K)发现:每2或3秒,64K或128K分配大约需要300多us。如何解决这个问题。

0 投票
0 回答
37 浏览

c++ - 运行“make -j”时的构建问题-“je_malloc”属性指令被忽略

在我的 Ubuntu 20.04机器上构建rocksdb 。我收到以下错误:

我正在使用简单的编译器make -j,并且安装了所有列出的依赖项,包括libjemalloc-dev,但我尝试卸载它无济于事。gcc 版本是 9.3.0。重新安装它也是如此。这些属性指令是我完全不熟悉的 C++ 领域,我不知道如何诊断这个问题。如果我通过DISABLE_WARNING_AS_ERROR,我最终会出现链接器错误,所以很明显这个错误是有意义的。值得注意的是,我最近能够在这台机器上构建它,我不记得更改任何会影响它的东西。我进行了系统更新,但据我所知,没有其他可能导致这种情况的发生。我已经检查了 Rocksdb 以前的提交,我得到了同样的错误,所以问题肯定在我的最后,但我已经和同事核实过,他们都没有这个问题。任何有关如何诊断此问题的想法或建议将不胜感激。

编辑:我刚刚尝试make单独运行,虽然它花了很长时间,但构建成功了。这是不切实际的,我仍然完全不知道如何诊断这个问题。

编辑2:成功的构建make并不一致,尽管我相信它至少成功了一次。当它不成功时,我会收到与上述相同的错误。

0 投票
1 回答
70 浏览

java - 使用 jemalloc 在 jna 应用程序中查找本机内存分配

我们有一个 Java 应用程序,它通过 JNA 调用用 C 编写的 .so 库,因此 Java 应用程序和 C 代码在同一个进程中运行。

我们发现了缓慢的内存泄漏,我们通过JVM堆监视器排除了JVM堆的原因,确认问题存在于JNA或C代码中。

我们发现 jemalloc 可以跟踪内存分配,所以我们使用--prefix=/usr/local --enable-prof选项、设置LD_PRELOAD=/usr/local/lib/libjemalloc.soMALLOC_CONF=prof_leak:true,lg_prof_sample:17,prof_final:true,prof_prefix:/home/admin/prof_dump/jeprof环境来安装它。它会生成一个转储文件,然后我们使用 jeprof 工具将转储文件转换为 pdf 文件jeprof --show_bytes --pdf \ jeprof.* \ > ./wdmp-profiling.pdf。此处显示的结果:内存泄漏配置文件

从图中我们可以发现java调用的方法很多。但是我们找不到任何关于 JNA 或 C 代码的信息。从图中我们发现了一个invoke分支,它只显示了16进制地址,所以我们不确定它是否与JNA或C有关。

我们使用了perf-map-agent工具并做了导出符号映射,如下所示:符号映射

但是当我们从 jeprof 结果中搜索符号映射结果的十六进制地址时,我们找不到相关的符号。

在这种情况下(通过 JNA 调用 C 库的 Java 应用程序)是否可以找到(C 函数名称或 JNA 代码)本机内存分配的位置,而不是 Java 堆内存?如果可能,怎么做?