当前位置: 首页 > 编程日记 > 正文

初步判断内存泄漏方法

有时候,内存泄漏不明显,或者怀疑系统有内存泄漏,我们可以通过下面介绍的方法初步确认系统是否存在内存泄漏。
首先在Java命令行中增加-verbose:gc参数,
然后重新启动java进程。
当系统运行过程中,JVM进行垃圾回收的时候,会将垃圾回收的日志打印出来,通过分析
这些GC日志,我们可以初步判断系统是否存在堆内存泄漏,
8190.813: [GC 164675K->251016K(1277056K), 0.0117749 secs]
8190.825: [Full GC 251016K->164654K(1277056K), 0.8142190 secs]
8191.644: [GC 164678K->251214K(1277248K), 0.0123627 secs]
8191.657: [Full GC 251214K->164661K(1277248K), 0.8135393 secs]
8192.478: [GC 164700K->251285K(1277376K), 0.0130357 secs]
8192.491: [Full GC 251285K->164670K(1277376K), 0.8118171 secs]
8193.311: [GC 164726K->251182K(1277568K), 0.0121369 secs]
8193.323 : [Full GC 251182K->164644K(1277568K), 0.8186925 secs]
8194.156: [GC 164766K->251028K(1277760K), 0.0123415 secs]
8194.169: [Full GC 251028K->164660K(1277760K), 0.8144430 secs]
在这段GC输出中,每一项的含义如下:

我们知道,Java虚拟机的垃圾回收有两种类型: 通GC 在GC信息的输出中,[GC 164726K->251182K(1277568K), 0.0121369 secs]中的"GC"就 代表的普通GC,普通GC只回收部分垃圾对象,因此回收完毕后,系统中仍存在大量的垃 圾对象 全GC 即FULL GC,在GC信息的输出中,[Full GC 251285K->164670K(1277376K), 0.8118171secs]的"FULL GC"就代表的完全GC,完全GC,系统彻底的对垃圾对象进行回收,回收完 毕后,垃圾对象所占用的内存得到彻底的回收,此时系统中存在的对象都是真正在使用 的活动对象,这时候的Java内存真实地反映了Java对象所占用的内存的大小。 在分析系统是否存在内存泄漏时,我们关注的是在当时真正有用的对象所占用的内存的 小。如果随着系统的运行,真正的Java对象所占用的内存越来越大,那么基本上能够确认存在内存泄漏(此时要排除系统是否设计了大量的缓存)。因此在做内存泄漏的分析时,我 只需要分析Full GC的行(非完全垃圾回收,由于并没有将所有的垃圾都回收,因此对我们的 析没有价值)。
以下面的例子为例进行说明:
• 251285K 完全垃圾回收之前Java对象占用的内存大小,这个值包含两部分,一部分是正在 使用的Java对象占用的空间,另一部分是垃圾对象占用的空间。JAVA内存泄漏分析和堆内存设置 73
• 164670K 完全垃圾回收之后Java对象占用的内存大小,这个值是真正的活动Java对象占用 的内存。
• 1277376K 堆的设置最大值。
• 0.8118171 secs 表示本次完全垃圾回收占用的时间。
判断系统是否存在内存泄漏的依据是:如果系统存在内存泄漏,那么完全垃圾回收完之 的内存值应该持续上升。如果在现场能观察到这个现象,说明系统存在内存泄漏当怀疑 个系统存在内存泄漏的时候,首先使用FULL GC信息对内存泄漏进行一个初步确认,确认统是否存在内存泄漏。只检查完全垃圾回收后的可用内存值是否一直再增大,步骤如下31:. 首先截取系统稳定运行以后的GC信息(如初始化已经完成),这个非常重要,非稳定运行 期的信息无分析价值,因为你无法确认内存的增长是正常的增长还是由于内存泄漏导致 的非正常增长。. 过滤出FULL GC的行。只有FULL GC的行才有分析价值。因为完全GC后的内存是当 前Java对象真正使用的内存数量。一般系统会有两种可能:
(a) 如果完全垃圾回收后的内存持续增长32,大有一直增长到Xmx设定值的趋势,那么这 个时候基本上就可以断定系统存在内存泄漏。
(b) 如果当前完全垃圾回收后内存增长到一个值之后,又能回落,总体上处于一个动态 平衡,那么内存泄漏基本可以排除。 通过如上内存使用趋势分析之后,基本上就能确定系统是否存在堆内存泄漏。
当然这 GC信息分析只能告诉你系统是否存在堆内存泄漏,但具体哪里泄漏,它是无法告诉你的。 存泄漏的的精确定位,是要找到内存泄漏的具体位置,需要借助如下工具/手段之一可以找 真正导致内存泄漏的类或者对象。

转载于:https://www.cnblogs.com/wx170119/p/11316880.html

相关文章:

com组件和一般dll的区别

这阵子在想一个需要利用com组件的小程序怎么做,突然想起上次去面试的时候考官问过autocad开发时为什么要利用com,而不采用一般的dll呢? 到google上查了一下,许多人也问了一样的问题:) 用com来写程序…

WinCE6.0 修改开机Logo方法集锦(二)

中秋假期已过&#xff0c;回来继续该博文主题。今天讲解第二种方法&#xff0c;将Logo图片的数据写入到Nand Flash中&#xff0c;在启动初始化LCD的时候&#xff0c;从固定的地址将数据读出并填充到显示缓存中。<?xml:namespace prefix o ns "urn:schemas-microsoft…

[动态dp]线段树维护转移矩阵

背景&#xff1a;czy上课讲了新知识&#xff0c;从未见到过&#xff0c;总结一下。 所谓动态dp&#xff0c;是在动态规划的基础上&#xff0c;需要维护一些修改操作的算法。 这类题目分为如下三个步骤&#xff1a;&#xff08;都是对于常系数齐次递推问题&#xff09; 1先不考虑…

原始ajax方式调用asp.net后台方法

aspx页面&#xff1a; <% Page Language"C#" AutoEventWireup"true" CodeFile"Data.aspx.cs" Inherits"Data" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xht…

洛谷P4480 【[BJWC2018]餐巾计划问题】

这道题和网络流 \(24\) 题中的餐巾计划的确不一样, \([\) \(BJWC\) \(2018\) \(]\) 餐巾计划问题的数据范围更大。 一个餐厅在相继的 \(n\) 天里&#xff0c;每天需用的餐巾数不尽相同。假设第 \(i\) 天 \((\) \(i\) \(\) \(1\) \(,\) \(2\) \(,\) \(...\) \(,\) \(n\) \()\)需…

灵活使用java反射简化servlet

在我们初学jsp的时候&#xff0c;我们通常将java代码放到jsp页面

第四篇 Gallery控件

直奔主题~&#xff01; 结构如图&#xff1a; main.xml代码: <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:orientation"vertical" android:la…

macaca之app-inspector

简单介绍 之前已经将macaca的环境搭建好了&#xff0c;现在就需要进行元素的定位&#xff0c;这里使用app-inspector&#xff0c;然后进行自动化脚本的编写。 实际操作 一、安装app-inspector npm i app-inspector -g 安装成功确保如下命令中有手机或模拟器的连接&#xff0c;可…

visual-reasoning 笔记

目录 整理最近学习 visual-reasoning的笔记 1. 关注 ACL、EMNLP、NAACLI等会议文章 未开始 2. Cyc项目 2.1 cyc知识库介绍&#xff1a; ​ 该知识库包含了320w条人类断言&#xff0c;30w概念&#xff0c;15000谓词。 ​ Cyc知识库中表示的知识一般形如“每棵树都是植物”、“植…

使用beanutil简化request值的接收

在刚开始学习java web的时候&#xff0c;我们想要接收从其他页面传过来的值常使用以下的语句 request.setCharacterEncoding("UTF-8");String Kind1 request.getParameter("foodKind");String Code1 request.getParameter("foodCode");String…

命令行编译运行CSharp文件

命令行编译运行CSharp文件 找到csc.exe所在的路径。如我本机上为“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727”在环境变量里增加变量CSC_HOME&#xff0c;值为以上路径。在PATH变量的值中加入%CSC_HOME%在cmd中进入要编译的cs文件所在的文件夹输入命令csc 文件名&#xf…

大话IT职场之工作和生活的平衡

每一个职场人都有自己的规划&#xff0c;特别是IT人员&#xff0c;基本都在想我要几个月掌握这门技术或语言&#xff0c;我要多久能带团队&#xff0c;我多长时间可以做到管理岗位&#xff0c;技术经理、技术总监等&#xff0c;每个人基本都充斥着这样的想法。但是否同时也在考…

安装和使用git遇到的问题总结

一&#xff0c;centos7下安装(因为centos7下用yum安装git的版本太低了&#xff0c;所以只能下载源代码&#xff0c;然后用源代码安装&#xff09; 下载编译工具 yum -y groupinstall "Development Tools" 下载依赖包 yum -y install zlib-devel perl-ExtUtils-MakeM…

Linux系统文本命令快速登录与退出

Linux是一个多用户的操作系统&#xff0c;用户要使用该系统&#xff0c;首先必须登录系统&#xff0c;使用完系统后&#xff0c;必须退出系统。用户登录系统时&#xff0c;为了使系统能够识别自己&#xff0c;必须输入用户名和密码&#xff0c;经系统验证无误后方能进入系统。在…

调试 后台 ajax post 对应的php的方法

在对应的javascript中 $.post("<?php echo ROOTURL ?>/Service/SetPlayerStartCord.php", "IP192.168.0.32&startCord_X400&startCord_Y30", function(data){!!!alert("Data Loaded: " data); }转载于:https://www.cnblogs.com…

log4j在eclipse上使用简介

Log4j是Apache的一个开源项目&#xff0c;通过使用Log4j&#xff0c;我们可以控制日志信息输送的目的地是控制台、文件、GUI组件&#xff0c;甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等&#xff1b;我们也可以控制每一条日志的输出格式&#xff1b;通过定义每…

关于编程的浅学习与深学习

导读&#xff1a;Tanky Woo的程序人生在博客中发表了《关于编程的浅学习与深学习》&#xff0c;文章是关于编程学习的一个提议、归纳、总结。以下是文章全部内容&#xff1a;关于编程的学习&#xff0c;大家肯定都知道&#xff0c;也是大家都说来说去的&#xff0c;就几句话&am…

shiro实战系列(一)之入门实战

一、什么是shiro? Apache Shiro 是一个强大而灵活的开源安全框架&#xff0c;它干净利落地处理身份认证&#xff0c;授权&#xff0c;企业会话管理和加密。 Apache Shiro 的首要目标是易于使用和理解。安全有时候是很复杂的&#xff0c;甚至是痛苦的&#xff0c;但它没有必要…

数据源和连接池

JDBC数据源&#xff1a; Data Source JDBC中提供了javax.sql.DataSource接口&#xff0c;负责建立与数据库的连接 DataSource对象可以由Web服务器提供&#xff0c;前提是需要在服务器配置DataSource&#xff08;包括连接池&#xff09; 连接池&#xff1a;Connection Pool…

FastReport.net 使用 Winform WebForm打印

delphi用的fastreport比较多 所以。net中也研究一下用法,这个打印控件还是很简单的 只要手动设计一下写少许代码就可以打印了 甚至可以写成通用代码 以后就可以不用写代码 安装demo会同时安一个设计器 打开设计器 通过设计器设计模板 新建数据源 新建数据集 查询单表全部内容&…

Ubuntu 12.04安装Sun JDK 6

Ubuntu 12.04安装Sun JDK 6 下载 sun jdk 6 bin. 设置权限 chmod x jdk-6u25-linux-i586.bin 解压文件 ./jdk-6u25-linux-i586.bin 移动位置到 sudo mv jdk1.6.0_25 /usr/lib/jvm/ 设置系统环境 sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.6.…

如果你的云服务商倒闭该怎么办?

如果你的云服务商倒闭或暂时中断服务&#xff0c;以下4个步骤能够帮助你的企业把损失减少到最低。 2009年2月&#xff0c;云服务商Coghead在一封写给客户的电子邮件中宣布该公司"由于受到经济挑战的影响"&#xff0c;将立即终止基于云的开发平台服务。随后&#xff0…

Ubuntu16.04桌面系统如何配置和启动wireshark

上一篇介绍了在Ubuntu系统中安装wireshark 本篇介绍在Ubuntu系统中配置和启动wireshark&#xff1b; 安装好后&#xff0c;直接在终端运行$ wireshark。出于安全方面的考虑&#xff0c;普通用户不能够打开网卡设备进行抓包&#xff0c;Wireshark不建议用户通过sudo在root权限下…

[导入]笔记本”终极“散热方案

笔记本老了&#xff0c;三年了&#xff0c;电池不太行了&#xff0c;散热量也大。解决电池问题首先是能耗的问题&#xff0c;我把能够卸下来的光驱和读卡器都拆了&#xff0c;这下留了一个大长孔&#xff0c;很好的是这样散热问题也得到了解决&#xff0c;光驱的大孔和读卡器那…

Android中Broadcast

前一段时间&#xff0c;听说过android的广播&#xff0c;这段时间经过研究终于可以写出一个Demo 首先新建一个android工程项目 在BroadCastActivity.java中 package com.mypack;import android.app.Activity; import android.content.Intent; import android.os.Bundle; import…

java web三大组件之filter过滤器

过滤器是java web中相当重要的组成成分&#xff0c;是JavaWeb三大组件之一&#xff0c;它与Servlet很相似。不过过滤器有以下三条特性&#xff1a; 过滤器是用来拦截请求的&#xff0c;而不是处理请求的。当用户请求某个Servlet时&#xff0c;会先执行部署在这个请求上的Filte…

Permission denied: make_sock: could not bind to address [::]:81 Apache 虚拟主机

想建立一个测试用的虚拟主机&#xff0c;遇到了这个问题&#xff1a; [rootlocalhost html]# service httpd start Starting httpd: httpd: Could not reliably determine the servers fully qualified domain name, using localhost.termwikidev for ServerName (13)Permissio…

E: GPG 错误:http://developer.download.nvidia.com Release: 下列签名无效: NODATA 1 NODATA 2...

参考链接&#xff1a;https://github.com/NVIDIA/nvidia-docker/issues/571 在安装CUDA的时候出现的问题&#xff0c;根本原因是各位都懂的地区局域网特色&#xff0c;我试了很多方法&#xff0c;结果还是Github上一个老铁提出的一个简单方法&#xff1a;修改/etc/apt/sources.…

spring 框架学习(一)

1、spring简介 Spring 是一个开源框架&#xff0c;是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构&#xff0c;分层架构允许您选择使用哪一个组件&#xff0c;同时为 J2EE 应用程序开发提供集成的框架。Spring的一个最大的目的就是使JAVA EE开发…

Styling with the DataGridColumnStyle

详细讲解了如何自定义DataGrid控件&#xff0c;将多种控件&#xff08;如&#xff1a;进度条、按钮、下拉框&#xff09;绑定到数据列中 参考MSDNPart 1&#xff1a;http://msdn.microsoft.com/en-us/library/ms996449Part 2&#xff1a;http://msdn.microsoft.com/en-us/libra…