判断内存性能表现主要是为了解决如下两个问题:

1. 当前web应用是否存在内存泄漏,如果有,问题的程度有多大?

2. 如果web应用的代码无法进一步改进,当前web应用所在的服务器是否存在内存上的瓶颈,是否需要增加内存数量来提高内存?

一、内存泄漏及判断

(一)、什么是内存泄漏?

程序都需要装载在内存中才能运行,退出的时候将内存返还给系统,有两种返还方式:

1. 自行返还: 程序员编写代码的时候返还,如C++代码。

2. 自动返还:   由支持程序运行的服务平台定期自动返还给系统,如Java、.Net等。

事实上,无论以上哪种方式,程序都有可能未把自己使用的内存返回给系统,从而导致之后的程序无法再使用这些内存,这些应该返还而没有返还的内存就像从管道漏掉了一样。

因为web程序都是持续不断的运行,如果代码存在内存泄漏的问题,泄漏的内存就会越来越多,越来越严重。导致系统可用的内存资源越来越少,系统性能越来越差,用户感受到的响应时间越来越慢。

(二)、性能计数器与内存泄漏

关注Process(进程)性能对象的如下几个计数器:

Handle Count(句柄数量): 进程的每个线程当前打开的句柄总数。

Thread Count(线程数量):线程的总数。

Virtual Bytes(虚拟内存字节数): 见后面关于虚拟内存的说明。

Working Set(工作集): 和当前进程有关的那一部分物理内存。

Private Byte(私有数据字节数): 此进程无法与其他进程共享的字节数量。

虚拟内存: 计算机内存有限,需要使用内存的程序非常多,大家都把需要的代码和数据全部放在内存中是吃不消的。所以操作系统在磁盘上也为程序开辟一块存储的地盘,当作内存使用,这就是虚拟内存。

可能存在内存泄漏的情况:

1. 一般来说:Virtual Bytes 应该远大于Working Set。如果:Virtual Bytes 增长较快,Working Set增长较少, 则可能存在内存泄漏的情况。

2. 以上所有性能计数器在测试期间数值持续增长,而测试停止后仍然维持在高水平,则可能存在内存泄漏。

(三)、使用工具软件测试代码是否存在内存泄漏情况

如JProbe套件、Rational Purify、Leakdiag、BoundsChecker和CLRProfiler等软件可以在代码不那么庞大的时候就进行单元测试、组件测试,不让问题积累起来。

Windows内存性能分析(一)内存泄漏的更多相关文章

  1. .NET内存性能分析宝典

    .NET Memory Performance Analysis 知道什么时候该担心,以及在需要担心的时候该怎么做 译者注 **作者信息:Maoni Stephens ** - 微软架构师,负责.NE ...

  2. 【转】一文掌握 Linux 性能分析之内存篇

    [转]一文掌握 Linux 性能分析之内存篇 前面我们已经学习了 CPU 篇,这篇来看下内存篇. 01 内存信息 同样在分析内存之前,我们得知到怎么查看系统内存信息,有以下几种方法. 1.1 /pro ...

  3. (转)java内存分配分析/栈内存、堆内存

    转自(http://blog.csdn.net/qh_java/article/details/9084091) java内存分配分析/栈内存.堆内存 java内存分配分析 本文将由浅入深详细介绍Ja ...

  4. Windows内存性能分析(二)性能瓶颈

    内存瓶颈: 由于可用内存缺乏导致系统性能下降的现像. (一).相关的性能对象 主要考虑内存的页面操作和磁盘的I/O操作,需要考虑如下性能对象: Memory性能对象: 用于分析整个系统的内存瓶颈问题. ...

  5. SQL Server内存性能分析

    内存概念: Working Set = Private Bytes + Shared Memory Working Set:某个进程的地址空间中,存放在物理内存的那一部分 Private Bytes: ...

  6. 记一次vue长列表的内存性能分析和优化

    好久没写东西,博客又长草了,这段时间身心放松了好久,都没什么主题可以写了 上周接到一个需求,优化vue的一个长列表页面,忙活了很久也到尾声了,内存使用和卡顿都做了一点点优化,还算有点收获 写的有点啰嗦 ...

  7. 一文掌握 Linux 性能分析之内存篇

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. 前面我们已经学 ...

  8. 性能分析 | Linux 内存占用分析

    这篇博客主要介绍 linux 环境下,查看内存占用的两种方式:使用 ps,top等命令:查看/proc/[pid]/下的文件.文章简要介绍了命令的使用方法与一些参数意义,同时对/proc/[pid]/ ...

  9. perfview微软开源的cpu以及内存性能分析工具

    perfview 是一个强大的分析工具,能用来分cpu,内存,磁盘io...多种指标,使用简单,功能强大 用来分析windows应用的性能问题,是一个很不错的选择 下载地址 https://githu ...

随机推荐

  1. Java创建和解析Json数据方法(二)——org.json包的使用

    (二)org.json包的使用 1.简介   工具包org.json.jar,是一个轻量级的,JAVA下的json构造和解析工具包,它还包含JSON与XML, HTTP headers, Cookie ...

  2. objective-c 类目(Category)和延展(Extension)

    类目的基本概念: 如果有封装好的一个类,随着程序功能的增加,需要在类中增加一个方法,那我们就不必在那个类中做修改或者再定义一个子类,只需要在用到那个方法时添加一个该类的类目即可. 1.在类目定义的方法 ...

  3. 【转载】使用事件模型 & libev学习

    参考这篇文章: http://www.ibm.com/developerworks/cn/linux/l-cn-edntwk/ 这里面使用的是 libev ,不是libevent Nodejs就是采用 ...

  4. C++ 继承与接口 知识点 小结(一)

    [摘要] 要求理解覆盖.重载.隐藏的概念与相互之间的差别.熟记类继承中对象.函数的訪问控制:掌握虚函数.虚函数表.虚函数指针的联系:理解区分虚函数和虚继承在虚方法.虚指针在空间分配上的重点与难点:熟练 ...

  5. python 大小写转换方法(全)

    http://blog.csdn.net/liuxincumt/article/details/7945337  python大小写转换(全)

  6. sass的使用(载)

    一.什么是SASSSASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护.本文总结了SASS的主要用法.我的目标是,有了这篇文章,日常的一般使 ...

  7. 获取EF查询的SQL语句

    在EF编程中我们能够通过lamda表达式能够进行查询数据.获取到IQueryable<T>结果,我们要想知道详细的SQL语句是什么须要使用ObjectQuery<T>进行处理 ...

  8. man screen

    http://www.gnu.org/software/screen/manual/screen.html Screen User's Manual Next: Overview, Previous: ...

  9. 【Spark Core】TaskScheduler源代码与任务提交原理浅析2

    引言 上一节<TaskScheduler源代码与任务提交原理浅析1>介绍了TaskScheduler的创建过程,在这一节中,我将承接<Stage生成和Stage源代码浅析>中的 ...

  10. Mac 怎么打开两个终端

    把光标移到终端上,然后Command+N 启动maven  : mvn tomcat7:run