我正在尝试找出内存泄漏问题。我正在关注this文章,并尝试使用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 Boot。
答案 0 :(得分:2)
运行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
并不总是对 profiling Java应用程序有用,因为它不能显示Java堆栈(但对防止引起的内存泄漏很有用。标准分配器)。
按照this answer中所述尝试使用async-profiler。
还请检查this post有关Java本机内存消耗的信息。