tools
- gperftools
gperftools将C++中的malloc替换成tcmalloc,然后就可以监控C++内存。
所以,在64位linux系统中,建议安装libunwind-0.99-beta这个版本,因为它会调用malloc,版本太低或过高会引发内存泄露。
install libunwind-0.99-beta
cd libunwind-0.99-beta
./configure
make
如果报错error: ‘longjmp’ aliased to undefined symbol ‘_longjmp ,
删除此文件重新解压,执行./configure后,在src/Makefile中搜索CPPFLAGS, 添加-U_FORTIFY_SOURCE,如CPPFLAGS = -U_FORTIFY_SOURCE -D_GNU_SOURCE -DNDEBUG
,然后make
sudo make install
此过程参考1,tcmalloc学习笔记
install gperftools-2.5.93
cd gperftools-2.5.93
./configure
make
sudo make install
监控
//sudo vi /etc/ld.so.conf.d/usr_local_lib.conf
//加入/usr/local/lib (libtcmalloc.so的lib所在目录)
//sudo /sbin/ldconfig 使libunwind生效
参考
export HEAPPROFILE=/home/hero/tmp/perftools dump的文件位置和前缀,任意定义
export LD_PRELOAD=/usr/local/lib/libtcmalloc.so
export HEAPCHECK=normal 监控方式,可选?
执行java命令
java moc.direct.buff.DirectBuff
查看dump信息
pprof –text /usr/lib/jdk/bin/java ~/tmp/perftools.0001.heap
并没有想象的好用,还会导致jvm崩溃。
- jvisualvm插件
com-sun-tools-visualvm-modules-buffermonitor.nbm
安装方式很简单,打开jvisualvm,点击Tools—Plugins,选择Available Plugins或Downloaded—Add Plugins。
com-sun-tools-visualvm-modules-mbeans.nbm可以查看是哪个类申请的。
监控远程java进程
配置启动项
1 | -Dcom.sun.management.jmxremote.port=1899 // 任意空闲端口 |
例如:
java -Dcom.sun.management.jmxremote.port=1899 -Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.122.131 -Xms256m -Xmx256m A
打开jvisualvm输入192.168.122.131:1899