问题标签 [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 投票
0 回答
389 浏览

memory-leaks - jemalloc / jeprof 显示地址而不是基于 lg_prof_interval 的函数名称

我正在尝试调试一些供应商提供的 JNI/本机代码中的内存泄漏,并且像许多人一样,从这里开始: https ://technology.blog.gov.uk/2015/12/11/using-jemalloc -to-get-to-the-bottom-of-a-memory-leak/

我发现如果我运行:

然后运行我的应用程序,然后运行jeprof ...命令生成 .gif 我可以看到导致泄漏的 JNI 函数名称(这很好!)。

我尝试更改lg_prof_interval:30lg_prof_interval:25更频繁地生成 .heap 文件,但我发现我之前提到的 JNI 函数名称已被地址(0x000123 ...)替换。我没有进行任何其他更改,并进行了双重和三重检查,运行 withlg_prof_interval:30可以让我看到生成的 .gif 中的函数名称,但lg_prof_interval:25没有。

我想使用的原因lg_prof_interval:25是因为我需要使用遭受内存泄漏的应用程序的精简版本重新运行分析,但我担心使用 2^30 字节将永远不会看到 .heap文件。

我已经看到类似的问题,其中答案建议安装 dbg 版本的 jdk,但我很难理解为什么这可能是我的情况的原因。

提前谢谢了。

TLDR:可以看到函数名称lg_prof_interval:30但不能lg_prof_interval:25

0 投票
1 回答
661 浏览

ubuntu - Cassandra 在 Ubuntu 20.04 上找不到 jemalloc 包

Ubuntu 20.04 上的 Cassandra 3.11.7 似乎没有选择 jemalloc 库?

贴切显示:

libjemalloc2/focal,现在是 5.2.1-1ubuntu1 amd64 [已安装]

卡桑德拉日志:

无法预加载 jemalloc 共享库以加快内存分配

Ubuntu 18.04 上相同版本的 Cassandra 可以正常使用 libjemalloc2,是否有技巧让它在 20.04 上运行?

0 投票
2 回答
398 浏览

memory - jemalloc and JVM_FindSignal

As already answered in this question: JVM_FindSignal function continuously allocates native memory

jemalloc reporting leaks from JVM_FindSignal is related to missing debug symbols. I certainly have debugging symbols installed, see:

still my jeprof output looks as following:

Is there anything else to consider?

0 投票
0 回答
96 浏览

go - jemalloc 没有用 cgo 显示 go 代码的行号

我在 Go中jemalloc使用。cgo我还想获取堆配置文件。目前,我正在获取配置文件,但它没有显示相应的 go 代码。

如果我使用它构建它go build example.go,然后使用它查看配置文件jeprof ./example test.349341.0.m0.heap --lines,我会在顶部得到这个输出。

从相应的 go 代码中获取行的正确方法是什么?提前致谢。

0 投票
0 回答
114 浏览

c++ - 如何使用jemalloc获取RAM中进程的内存使用情况

我正在开发基于 jemalloc 的内存跟踪器。它用于通过调用 mallctl 大致收集进程的基本内存统计信息,并在内存超过阈值时阻止更多即将到来的请求。

以前我使用 stats.mapped or stats.resident,但后来我发现即使释放了一些分配的内存,即使在purgeor之后这些内存也没有返回给操作系统decay。所有内存都将munmap在进程退出时。由于共享内存和其他用途被排除在外,因此使用stats.allocatedstats.active无法获得正确的结果。

我的问题是,如何使用 jemalloc 获取 RAM 中进程的内存使用情况?顶部的 RSS 或操作系统报告的 ps 之类的东西。

谢谢!

0 投票
1 回答
411 浏览

c++ - 为什么 jeprof 评估的 jemalloc 内存配置文件似乎显示了所有内存分配?

我们正在尝试追踪使用 jemalloc (5.2.0) 的 proxysql (2.0.14) 中的内存泄漏。我们在启用调试符号的情况下编译了 proxysql。烘焙到 proxysql中的 jemalloc 配置如下

内存分析在运行时启用,PROXYSQL MEMPROFILE START如下所示。这会将内存分析设置为active

这似乎在生成堆配置文件时起作用,但是当我们使用 jeprof 分析它们时,它似乎记录了所有内存分配,而不仅仅是内存泄漏。我们使用 jeprof 生成的 pdf 可以在这里找到。如您所见,jeprof 似乎显示了所有内存分配,而不仅仅是泄露的内存分配。

通过查看其他内存配置文件,它们显示的总内存量较小,而在此配置文件中,我们看到的总内存为 21GB,超过了服务器可以分配的内存量。但是,我们不确定问题出在哪里 - jeprof、配置或其他完全不同的东西。

作为参考,我们在此处添加了一个示例堆配置文件,以防万一这表明出了什么问题。

0 投票
2 回答
91 浏览

node.js - Heroku节点js没有运行Web进程

本地没有问题。

该应用程序已部署到 heroku,但出现错误屏幕。在我得到的日志中:

heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/" host=catan-manager-api.herokuapp.com request_id=c68d7131-7572-4fe6-ae9d-13836519e25c fwd ="79.176.191.139" dyno= connect= service= status=503 bytes= protocol=https heroku[router]: at=error code=H14 desc="No web processes running" method=GET path="/favicon.ico" host=catan-manager-api.herokuapp.com request_id=7f9a1aa9-c079-456c-9f9a-2522bfdc87f7 fwd="79.176.191.139" dyno= connect= service= status=503 bytes= protocol=https

由于某种原因,它从部署中检测到是 jemalloc 应用程序,不确定这是否相关: 在此处输入图像描述

我添加了 jemalloc,因为我在使用尖锐库时出错,从这里获取解决方案

  1. 它如何将其检测为 jemalloc 应用程序?我认为 jemalloc 只是一个用于更好地分配内存的库。
  2. 假设这是问题所在,我该如何解决?
  3. 我也在使用@babel,我遵循了这个指南
  4. 我没有 Procfile,因为节点 js heroku知道在包 json 中使用 start
  5. 当我尝试扩展时,我得到“找不到该进程类型(网络)”(显然......)

谢谢你的帮助

0 投票
2 回答
105 浏览

c - 释放从核心中排除的内存后核心转储大小增加

我使用 jemalloc 3.6.0-11。我调用 posix_memalign 来分配一个非常大的块。分配后,我要求madvise(ptr, size, MADV_DONTDUMP);将此分配从核心转储中排除。

在释放此内存之前,我调用madvise(ptr, size, MADV_DODUMP);是因为我希望如果这些页面将在将来的分配中分配,它们将不会保持标记为 DONTDUMP。

问题是在大多数情况下,我刚刚释放的内存并没有返回给OS(即进程的虚拟内存仍然包括分配;在/proc//status中分配大小仍然是一个VmSize 的一部分);事实证明,核心转储是基于进程的虚拟内存的;所以释放内存后,释放的页面将包含在核心转储中。

有谁知道如何解决这个问题?

提前致谢!

0 投票
1 回答
463 浏览

node.js - Docker 镜像中的 Heroku Buildpacks

我构建了自己的 docker 镜像并在 Heroku 上运行它们。这很好用,这里有一个示例 Docker 文件:

问题是我还想在运行节点时使用 Jemalloc 进行更好的内存管理。我过去在使用普通节点 dynos(不是 docker 图像)时使用过这个 Jemalloc buildpack,它运行良好:

https://github.com/gaffneyc/heroku-buildpack-jemalloc

如果我理解正确,但是 buildpacks 和 docker 图像不兼容?所以这个buildpack不会自动从我的图像中获得吗?

有没有办法让 buildpack 在我的图像中运行?

如果没有,有人知道我如何在我的实例中安装和使用 jemalloc 吗?

0 投票
0 回答
261 浏览

memory-leaks - JVM内存泄漏诊断(jemalloc)

随着时间的推移,来自供应商的软件会占用大量内存。这是一个 Java 应用程序,我检查了 JRE 中的堆和元空间,那里一切正常(使用 < 1G RAM)。问题似乎是代码中的一些本机内存分配(我没有)。所以我使用了 jemalloc 来分析,结果如下。

是否可以肯定地说我应该要求供应商修复他们的代码或这里可能出现什么问题?如何解释 jemalloc 的输出?

在此处输入图像描述