问题标签 [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 回答
497 浏览

memory-leaks - jemalloc 生成许多文件

我按照jemalloc的说明在 centOS 7 上设置了 jemalloc。但是,设置后不久

环境变量,我可以看到很多 jeprof.*.heap 文件被写入我的当前目录。我根本没有启动我的码头服务器,仍然生成了很多文件。哪个进程生成它?

当我尝试按如下方式启动应用程序时

它导致分段错误,但开始连续写入许多文件。

我试图像这样打开一个 jeprof.*.heap

这给了我 0 个字节。即使该文件为空,也尝试生成 gif 文件。我怎样才能解决这个问题?

@apangin 在您的帮助下,如JVM_FindSignal 函数中所述,连续分配本机内存

我能够获得以下详细信息

但是我没有从 .so 文件中看到任何我的 JNI 类名。我可以看到许多内存地址。我是否遗漏了任何内容或符号未正确解析?

谢谢拉吉

0 投票
1 回答
1293 浏览

java - 了解 Jeprofile 输出

我能够根据此处jemalloc post的描述生成 Jeprofile 输出,如下所示

请找到 jemalloc 输出和图表。

图也附上在此处输入图像描述

需要一些帮助来了解问题出在哪里?

环境是:Centos 7 Java 1.8.0 GCC 9

感谢!

0 投票
0 回答
103 浏览

java - Jemalloc 输出给出的是内存地址而不是实际名称

我正在使用 Jemalloc 来找出我的应用程序的内存分配。我完全按照此处描述的步骤操作:https ://docs.tibco.com/pub/bwce/2.4.5/doc/html/GUID-231E1EFC-EA7C-4072-B0F4-0D92093D3161.html 。

当我使用 jeprof --show_bytes /usr/lib/jvm/java-8-oracle/jre/bin/java jeprof.19678.0.f.heap 检查输出时

输出我可以这样:6693878 0.1% 99.9% 6693878 0.1% 0x00007f1e8e033db7 790901 0.0% 99.9% 790901 0.0% 0x00007f14deac7db7

我没有看到方法的实际名称,而是内存地址。如何获取方法的实际名称而不是内存地址。

0 投票
0 回答
549 浏览

memory-management - 关于如何使用 jemalloc 统计信息的更多解释

除了作为一个表面上很好的内存分配库之外,jemalloc它还提供了内置的分配统计信息。但是,这需要对jemalloc的内部数据结构有所了解。所以当我打电话时malloc_stats_print(NULL, NULL, NULL),我得到了一些类似于 jemalloc 人在他们的 github wiki 页面上显示的输出。

所以我自己使用这些统计数据的用例是查看哪种类型的分配似乎随着时间的推移以有问题的方式净增长。假设我有某种大小为S的对象,我认为这种增长正在发生。如何使用定期调用来检查malloc_stats_print

此外,在寻找未计算的内存增长时,我应该关心这个调用的全部输出的其他指标之间的区别nmalloc和哪些其他指标。nrequests

0 投票
2 回答
356 浏览

c++ - 当最小分配对齐为 16 字节时,如何进行 24 字节大小的分配?

我的应用程序进行了大量正好 24 字节的分配,但我使用的第三方库要求分配器提供至少 16 字节的对齐。

因此,如果我编译jemalloc配置为 8 字节对齐 ( --with-lg-quantum=3),我会获得 24 字节分配,但我的第三方库失败。

如果我编译jemalloc配置为 16 字节对齐 ( --with-lg-quantum=4),我的malloc((size_t)24)调用分配 32 个字节。内存使用量增加了 33.3%。但是,我需要定期malloc((size_t)24)调用来分配 16 字节对齐(因此是 32 字节),以便我的第三方库工作。

如何从我的应用程序分配 24 字节块(8 字节对齐)以有效地使用内存?

我试过aligned_alloc(8, 24)了,但它仍然分配 32 字节,16 字节对齐。

0 投票
0 回答
393 浏览

c++ - 有什么方法可以禁用 jemalloc 中的内存清除?

我们正在实现一个消耗内存的长时间运行的服务器,它在内部使用 jemalloc 来分配/释放内存。服务器逐批、连续地处理数据。对于每个批次,它分配内存(通过 malloc())并处理批次内的数据,然后释放内存(通过 free())。

问题是,当新数据进来时,它必须分配新的内存进行处理,这会导致很多页面错误,因为之前从操作系统分配的内存页面会在之前的 free() 上返回(或者,被 madvise 清除)

有没有办法保留(在进程地址空间中)先前释放的内存,以便下一次分配可以重用它们?

请注意,因为每个分配/解除分配都不是固定大小的,所以固定大小的内存池不适合这里。这里需要一些像 jemalloc 这样的通用分配器。

jemalloc 中是否有配置,以便所有分配和释放的内存都保留在进程地址空间中以供以后重用?在服务器启动时分配一个大块(如 64GB)并在这个单块内处理分配/解除分配/碎片/碎片整理是可以接受的。

0 投票
1 回答
1156 浏览

ruby-on-rails - 如果我使用 Heroku buildpack,是否需要使用 jemalloc 构建 Ruby 并使用 gem?

Rails (4.2.8)应用程序上的Ruby (2.4.1)示例,使用 Puma 配置并部署在Heroku (cedar-16)上。目前在Mojave 10.14.5 MBP 上开发。我的任务是减少内存使用,最近通过这篇文章发现了 jemalloc 。我重新安装了启用了 jemalloc 的 Ruby(使用 RVM),如以下输出所示 - . 我继续添加jemalloc gem和 bundle 安装没有问题。我还设置了Heroku buildpack并配置了必要的环境变量。-lpthread -ljemalloc -lgmp -ldl -lobjc

但是,使用我的 Gemfile 中的 gem,我无法运行任何 rake/rails 命令 -rails c返回以下错误,随后我的 Mac 粉丝立即启动:

ruby(45487,0x10739c5c0) malloc: *** malloc_zone_unregister() failed for 0x7fff94a3f000

foreman start卡在* Preloading application. 如果我删除 gem,所有问题都会消失并且应用程序可以正常工作。

由于我不知道 Heroku buildpacks 是如何工作的,以及那个特定的 buildpacks 是如何精确编程的,所以我的问题如下:

  1. 添加 buildpack 后,我真的需要在项目中安装 gem 吗?
  2. 添加 buildpack 后,我是否需要使用 jemalloc 编译的 Ruby 版本?
  3. 如果我确实需要 gem,我该如何摆脱上述错误?
0 投票
0 回答
83 浏览

memory-management - memory allocation change from 4782 to 4783

I've the following code

The output confirms that the diff is 0 bytes as expected

Anyway if I change the iteration upper limit from 4782 to 4783 the result changes: the program exits with panic because the allocated_bytes_after is less than allocated_bytes.

This is a strange behavior. Why the memory allocation is less after? Why the limit is 4782?

I'm using:

0 投票
0 回答
55 浏览

c - 静态指针会自动释放吗?

我正在使用and开发一个c程序。libuvjemalloc

当je_malloc调用了大约3735次(大约占用600 MB内存)。

我的静态变量sa_socket-> nread=0,len=0,handle=0x200000000,所以调用uv_write时会sa_socket->handle引发错误EFAULT: bad address in system call argument

0 投票
1 回答
72 浏览

boost - Boost.Container `dlmalloc` 和 `jemalloc`

我已经将 Boost.Container 引入我的项目中,它jemalloc用作默认分配器,看起来像 Boots.Container 使用自定义分配器,dlmalloc当然,在链接时我在“多重定义”链接错误上失败,因为两个“XXXalloc”被引入目标文件。关闭“jemalloc”不是一种选择,但我找不到是否可以关闭dlmalloc使用。知道如何解决这个问题吗?