Java内存泄漏问题
??? 经历了内存泄漏的骚扰,记录一下内存泄漏时的分析手段。
?
返回Oak>>
?
1. 遇到问题及解决办法
?
?? (1) 引起内存泄漏的地方??? wap page中分享和收藏相册功能中使用了如下代码:??????? rose?=? new?RoseAppContext(); ??? 调用分享/收藏相册时都执行一遍该语句,导致每次都会新增一个容器,将所有bean重新实例化一次,耗去大量内存。??? 该语句借鉴了ShareFacade里的代码,拿来主义,没理解它都做了什么工作,从而造成了此次事故。=============================赤色分界线====================================
?
1. 用jmap查看内存镜,分析各个对象的实例
?
??? 使用jmap命令:(需要配置JAVA_HOME和PATH变量)
??? jmap -histo:live processid > /home/zzq/jmap_1150
?
2. 使用Eclipse Memory Analyzer
?
??? jmap -dump:live,format=b,file=heap.bin processid
?
3. 使用Jprofiler
?
??? 下载地址:http://www.ej-technologies.com/download/jprofiler/trial
??? (1) 在本地装好Jprofiler并配置
?
????? 工具栏Start Center-->New Session选项卡-->New Remote Integration
????? Local or remote:选 on a remote computer,然后选linux版本
????? Profiled JVM:根据服务器上的jdk填写
? ? ? Startup mode:选第一个 Wait for a connection from the JProfiler GUI
????? Remote address:填写服务器的ip地址
????? Remote installation directory:/opt/jprofiler6
????? Choose profiling port: 默认8849
????? Perform modifications:复制出来,下面用-agentpath:/opt/jap/bin/linux-x86/libjprofilerti.so=port=8849
?
??? (2) 在服务器端自装Jprofiler
?
????? 在服务器端(Linux)装jprofiler_linux_6_2.rpm:: ? rpm -ivh jprofiler_linux_6_2.rpm
????? 查找安装后所在目录: rpm -ql jprofiler-6.2-1.i386
????? 配置环境变量:vim /etc/profile
?? ???? 添加以下参数:
??????? JPROFILE_HOME=/opt/jprofiler6
??????? LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$JPROFILE_HOME/bin/linux-x86
??????? export JPROFILE_HOME
??????? export LD_LIBRARY_PATH
????? 启动resin服务器:/opt/resin-page/bin/httpd.sh -agentpath:/opt/jprofiler6/bin/linux-x64/libjprofilerti.so=port=8849
?
返回 Oak>>