我正在尝试找出内存泄漏问题。我正在关注这篇文章并尝试使用 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
但是,没有创建 .heap 文件。我在 pmap -x 结果中找不到 libjemalloc.so。如何确保 jvm 正在使用 jemalloc?服务器是 ubuntu 服务器,应用程序正在使用 spring 启动。
当你运行sudo
时,Java会得到根环境,该环境没有你以前导出的LD_PRELOAD
和MALLOC_CONF
。
尝试
sudo LD_PRELOAD=/usr/local/lib/libjemalloc.so
MALLOC_CONF=prof:true,lg_prof_interval:30,lg_prof_sample:17
java -jar application.jar
顺便说一句,jemalloc
对于分析 Java 应用程序并不总是有用的,因为它不能显示 Java 堆栈(但它对于防止标准分配器引起的内存泄漏很有用)。
尝试按照本答案中所述的异步分析器。
另请查看这篇关于 Java 本机内存消耗的文章。