查看堆外内存

tools

  1. 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崩溃。

  1. 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
2
3
4
-Dcom.sun.management.jmxremote.port=1899    // 任意空闲端口
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.1.54 // 远程应用所在IP

例如:
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