一.在分析背景服务器上运行java项目服务时,根据服务实现的功能不同,每个项目的消费服务器系统内存也有差异。 如果项目中的某个功能模块操作不当导致占用的资源无法立即释放,则会导致内存泄漏,导致服务无法运行。 要排除此问题,除了手动检查代码外,还可以使用外部工具锁定问题代码的位置。
2 .用于解决问题的命令使用jmap ——JDK附带的内存使用检测工具
例如,以下命令输出指定的java服务占用内存的前20个类。
jmap -histo服务进程号| head -20
但是,无法具体分析具体的代码内容。 要进行具体分析,必须获取服务器上指定项目的堆转储文件。 这里使用内存分析工具(mat )来使用分析工具进行分析。
使用jamp命令:
jmap -dump:format=b,file=dump.hprof (文件名)服务进程号在当前目录中生成堆转储文件并将其下载到本地。
工具下载链接
它还可以在eclipse中用作插件,但必须单独作为软件使用才能导入存储文件。 因为要在自己的电脑上打开从服务器下载的堆转储文件。 所以选择windos版本的下载。 下载后,如图所示直接解压缩:
双击MemoryAnalyzer可打开该工具。 如有必要,请修改配置文件MemoryAnalyzer.ini,并修改参数,如-Xmx5120m。 比堆转储文件大更好)。
使用分析工具打开转储文件。 建议将文件放在其他文件夹中,然后打开。 因为分析文件的过程会在打开的目录下生成其他文件。 将在堆转储文件的同级目录下生成压缩文件filename_Leak_Suspects.zip。 这里有html的静态页面,也可以在浏览器中进行分析。
如果选择“‘Leak Suspects”,则会显示MAT自身认为有问题的内容。
分析结果:
如果显示的内存泄漏中可能有与你写的代码相对应的类,可以进行定位,并逐一找出问题。