对于系统的活跃度比较高,承受的访问压力也很大的系统会出现比较严重的问题,可能一个是内存占用高,一个是还有一些未知bug。由于这些问题而想到我们这两个系统是否有内存泄露?是否可以用某种方法来检测内存泄露?当然经过google后,答案是肯定的。所以我们用测试环境来做一个实验,来验证检测方法的可行性。下面就是详细的整个过程。 |
一些概念
|
第一步:下载 到这里,然后点下载链接。选中上面的"接受许可协议"后方可下载。由于我们用的JBoss版本是4.2.1GA,是比较老的应用服务器,所以我们这边选择下载的也是sun jdk1.5相对应的版本[Oracle JRockit Real Time 3.1.2 适用于 Java 版本 5.0]的那一列,中选择linux-64位版本,文件名jrrt-3.1.2-1.5.0-linux-x64.bin。下载完后,拷贝到服务器上。 |
第二步:安装 以root身份登录到服务器,在下载文件的目录执行./jrrt-3.1.2-1.5.0-linux-x64.bin。然后选择安装目录时候请键入/usr/ali/jrrt-3.1.2-1.5.0也是我们要安装的位置。然后按提示选择。请不要安装的/root/或者/usr/root/目录下,那样会产生权限问题而不能运行。一步一步到最后,提示安装成功位置。安装中的提示都是很简单的,仔细查看酌情选择选项即可。并新建一个link到安装位置,执行如下命令 ln -s /usr/ali/jrrt-3.1.2-1.5.0 jrockit。 |
第三步:配置 1、首先将环境变量JAVA_HOME指向新建的link位置/usr/ali/jrockit。
在这行后面加上这样一行参数:
请自己指定端口号,这个端口是供Oracle JRockit Mission Control 来诊断jvm的,默认为7091。 服务器ip请指定为当前服务器ip。
|
第四步:启动JBoss 请在admin账号登录下,执行/home/admin/shinkansen/bin/jbossctl restart重启动JBoss。随后请检查启动是否正常。
|
第五步:开始诊断 下载Oracle JRockit Mission Control 3.1.2 ![]() 然后右键见左边栏的连接器,中选择新建连接,出现新建连接窗口。 ![]() 随后出现了一个新的链接,点中它,右键选启动memleak。 ![]() 选中一个内存占用比较高的类型,然后右键点跟踪堆栈,如下图。 ![]() 这样我们就可以从堆栈中追踪到我们的类。 ![]()
至此我们也找到了如何探测内存泄露的方法了。本文完。 |