我试图在构建时将 jemalloc 库链接到我的应用程序中,使用它作为通用实现。根据https://github.com/jemalloc/jemalloc/wiki/Getting-Started,要使用的链接标志是:
\n\n-L`jemalloc-config --libdir` -Wl,-rpath,`jemalloc-config --libdir` -ljemalloc `jemalloc-config --libs`\nRun Code Online (Sandbox Code Playgroud)\n\n所以我做了以下CMakeLists.txt:
\n\ncmake_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`")\nRun Code Online (Sandbox Code Playgroud)\n\n但是当我这样做时,make我收到以下错误:
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\nRun Code Online (Sandbox Code Playgroud)\n 我在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) 示例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 构建包的工作原理以及该特定构建包的准确编程方式,因此我的问题如下:
这个命令应该显示 -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 文件库
我已经使用 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 工作。
谢谢!
我的应用程序进行了大量恰好 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 字节对齐。
我正在尝试找出内存泄漏问题。我正在关注这篇文章并尝试使用 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 启动。
我能够根据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)