标签: jemalloc

如何使用cmake链接jemalloc共享库

我试图在构建时将 jemalloc 库链接到我的应用程序中,使用它作为通用实现。根据https://github.com/jemalloc/jemalloc/wiki/Getting-Started,要使用的链接标志是:

\n\n
-L`jemalloc-config --libdir` -Wl,-rpath,`jemalloc-config --libdir` -ljemalloc `jemalloc-config --libs`\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以我做了以下CMakeLists.txt

\n\n
cmake_minimum_required(VERSION 2.8.12.2)\nproject(widget)\ninclude_directories(include)\nfile(GLOB SOURCES "src/*.cpp")\nadd_executable(widget ${SOURCES})\nset(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -L`jemalloc-config --libdir` -Wl,-rpath,`jemalloc-config --libdir` -ljemalloc `jemalloc-config --libs`")\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是当我这样做时,make我收到以下错误

\n\n
Linking CXX executable widget\nc++: error: `jemalloc-config: No such file or directory\nc++: error: unrecognized command line option \xe2\x80\x98--libdir`\xe2\x80\x99\nc++: error: unrecognized command line option \xe2\x80\x98--libdir`\xe2\x80\x99\nc++: error: unrecognized command line option \xe2\x80\x98--libs`\xe2\x80\x99\nmake[2]: *** [widget] Error 1\nmake[1]: *** [CMakeFiles/widget.dir/all] Error 2\n
Run Code Online (Sandbox Code Playgroud)\n

linker compiler-errors makefile cmake jemalloc

4
推荐指数
1
解决办法
4094
查看次数

JVM_FindSignal函数不断分配本机内存

我在linux机器上的tomcat8中部署的java web应用程序一直在泄漏本机内存,我试图通过使用如下所述的jemalloc分析来检测泄漏源:https://github.com/jeffgriffith/native-jvm-泄漏 在运行> 24小时的服务器上使用堆转储输出分析工具:

    Total: 794708494 B
789734456  99.4%  99.4% 789987533  99.4% JVM_FindSignal
 3421211   0.4%  99.8%  3421211   0.4% Java_java_util_zip_ZipFile_getZipMessage
 1036965   0.1%  99.9%  1036965   0.1% inflateBackEnd
  262784   0.0% 100.0%   262784   0.0% __GI__dl_allocate_tls
  253077   0.0% 100.0% 598675182  75.3% SUNWprivate_1.1
       0   0.0% 100.0%   938397   0.1% 0x00007fb133688ef8
       0   0.0% 100.0%   131136   0.0% 0x00007fb133696c2e
       0   0.0% 100.0%  6146839   0.8% 0x00007fb13369b553
       0   0.0% 100.0%   135210   0.0% 0x00007fb1336a63f5
       0   0.0% 100.0%   131136   0.0% 0x00007fb1336a6403
       0   0.0% 100.0%   266290   0.0% 0x00007fb1336a7819
       0   0.0% 100.0%   296275 …
Run Code Online (Sandbox Code Playgroud)

java jvm jemalloc

3
推荐指数
1
解决办法
808
查看次数

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

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

然而,使用 Gemfile 中的 gem,我无法运行任何 rake/rails 命令 -rails c返回以下错误,紧接着我的 Mac 风扇就开始启动:

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

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

由于我不了解 Heroku 构建包的工作原理以及该特定构建包的准确编程方式,因此我的问题如下:

  1. 添加了 buildpack 后,我真的需要在项目中安装 gem 吗?
  2. 添加构建包后,我是否需要使用 jemalloc 编译的 Ruby 版本?
  3. 如果我确实需要宝石,我该如何消除上述错误?

ruby rubygems ruby-on-rails heroku jemalloc

2
推荐指数
1
解决办法
2412
查看次数

如何检查 ruby​​-2.6.3 是否使用 jemalloc ?我将 ruby​​-2.6.3 安装为 $ rvm install 2.6.3 -C --with-jemalloc

这个命令应该显示 -ljemalloc 但它不是。我可以用 ruby​​-2.4.3 和 ruby​​-2.5.x 看到它,但不能用 ruby​​-2.6.x

$ ruby -r rbconfig -e "puts RbConfig::CONFIG['LIBS']"
-lm                                                                                                                                    
$ cat /etc/environment


PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.1
Run Code Online (Sandbox Code Playgroud)

我正在使用 ubuntu 18 LTS 和其他 ruby​​ 版本,我得到了上面提到的 jemalloc 文件库

ruby ubuntu jemalloc

1
推荐指数
1
解决办法
1619
查看次数

带有 jemalloc 的 Ruby 2.6.5

我已经使用 jemalloc 从源代码构建并安装了 rub 2.6.5。但是,当我检查它是否在那里时,我没有看到条目。还有什么我应该做的吗?

ubuntu:~$ uname -a
Linux ip-10-0-3-198 4.15.0-1032-aws #34-Ubuntu SMP Thu Jan 17 15:18:09 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
ubuntu:~$ ./configure --enable-shared --with-jemalloc
ubuntu:~$ make
ubuntu:~$ make install
Run Code Online (Sandbox Code Playgroud)

结果是:

ubuntu:~$ ruby -r rbconfig -e "puts RbConfig::CONFIG['LIBS']"
-lm 
Run Code Online (Sandbox Code Playgroud)

跟踪部署后的内存使用情况与没有 jemalloc 的类似配置的服务器相比,我也没有看到下降。

我不确定我需要做什么才能让 jemalloc 工作。

谢谢!

ruby jemalloc

1
推荐指数
2
解决办法
990
查看次数

当最小分配对齐为 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 字节对齐。

c c++ malloc memory-management jemalloc

1
推荐指数
1
解决办法
282
查看次数

Spring 启动应用程序不使用 jemalloc

我正在尝试找出内存泄漏问题。我正在关注这篇文章并尝试使用 jemalloc

接下来的步骤是:

export LD_PRELOAD=/usr/local/lib/libjemalloc.so
export MALLOC_CONF=prof:true,lg_prof_interval:30,lg_prof_sample:17
sudo java -jar application.jar
Run Code Online (Sandbox Code Playgroud)

但是没有创建 .heap 文件。我在 pmap -x 结果中找不到 libjemalloc.so。如何确保 jvm 正在使用 jemalloc?服务器是 ubuntu 服务器,应用程序使用 spring 启动。

java jvm memory-leaks spring-boot jemalloc

0
推荐指数
1
解决办法
698
查看次数

了解 Jeprofile 输出

我能够根据jemalloc 帖子中的描述生成 Jeprofile 输出,如下所示

请找到 jemalloc 输出和图表。

> Using local file /bin/java. Using local file jeprof.57473.0.f.heap.
> Total: 79372091 B 78084060  98.4%  98.4% 78084060  98.4%
> je_prof_backtrace  1288031   1.6% 100.0%  1474342   1.9%
> Java_java_util_zip_ZipFile_getZipMessage
>        0   0.0% 100.0%  6889972   8.7% 0x00007f3d5ebac3e6
>        0   0.0% 100.0%   270421   0.3% 0x00007f3d5ebb8a79
>        0   0.0% 100.0%   727762   0.9% 0x00007f3d5ebb8a87
>        0   0.0% 100.0%   589239   0.7% 0x00007f3d5ebb9ab2
>        0   0.0% 100.0%   854269   1.1% 0x00007f3d5ebb9ac0
>        0   0.0% 100.0%   270421   0.3% 0x00007f3d5ebb9cb7
>        0   0.0% …
Run Code Online (Sandbox Code Playgroud)

java java-native-interface jvm memory-leaks jemalloc

0
推荐指数
1
解决办法
2359
查看次数