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

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. U盘格式化时分配单元的大小的设置

    格式化时主要有如下格式,且对应的操作系统的不一样: FAT32:Windows和Mac都支持,不过单个文件不能超过4G,但可以采用分包压缩的方式搞定. NTFS:Windows专用格式,Mac常规无法 ...

  2. webpack入门(六)——html-webpack-plugin

    html-webpack-plugin 该插件可以简化创建调用webpack bundles的html文件.在每次编译后,文件名会包含有hash值的bundles 特别有用.你可以让插件为您生成一个H ...

  3. git 使用及常用命令

    git在团队项目中的使用流程 1.首先从一个git远程仓库中clone项目到本地 ? 1 git clone 仓库地址 2.创建开发分支 一般我们写代码不会在master分支上面写,而是新建一个分支 ...

  4. GDB调试多线程程序

    gdb有thread相关命令,如info thread(简写成info th)显示线程消息,b xx thread yy可以针对某个thread设置断点,thread xx(简写成thr xx)切换到 ...

  5. weblogic的几点配置

    2.在tomcat下写过滤器以后还有的地方需要手工转码<-->weglobic下也不用 eg:SubjectAction.java3.weblogic下anltr.jar有冲突,需要从外界 ...

  6. 点击选中/取消选中flag

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name ...

  7. AtomicInteger在实际项目中的应用

    AtomicInteger.一个提供原子操作的Integer的类. 在Java语言中,++i和i++操作并非线程安全的.在使用的时候,不可避免的会用到synchronized关键字. 而AtomicI ...

  8. 【随想】android是个什么东西,andorid机制随想

    优秀程序猿的天性就是好奇,软件是怎么运作的.屏幕是怎样显示的.桌面窗口为何能如此人性化的被鼠标拖动? 假设你常常会有这样一些问题迸发在脑海中,恭喜你,你是一名非常有潜力的程序猿. 我在大学读的是自己主 ...

  9. Java泛型 类型变量的限定

    有时候,类和方法须要对类型变量加以约束.比方你有一个方法,你仅仅希望它接收某个特定类型及其子类型作为參数. 以下就举一个方法限定接收參数的类型的样例来说明怎样限定类型变量. 首先有几个简单的辅助类: ...

  10. ubuntu手机识别

    1.sudo gedit /etc/udev/rules.d/51-android.rules 2.将以下内容拷贝保存 SUBSYSTEM=="usb", ATTR{idVendo ...