• Windows内存性能分析(一)内存泄漏


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

    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等软件可以在代码不那么庞大的时候就进行单元测试、组件测试,不让问题积累起来。

  • 相关阅读:
    泡泡H5这封企业剪彩活动邀请函好像挺专业!
    教你 Shiro + SpringBoot 整合 JWT
    Thymeleaf 获取后端Model中的数据
    SpringBoot 之 普通类获取Spring容器中的bean ,
    如何用JS判断网页中某个id的网页元素是否存在(两种写法 jQuery写法和原始写法:
    前台请求不带cookie的问题解决方案大汇总
    js访问函数内部的变量(三种方法)
    源码分析:若依用户 user_id查询返回除了用户表,为何还带有部门dept和角色role表呢
    关于若依前端分页首次使用BootstrapPager 即bootstrap扩展插件
    关于若依需要验证码,PostMan是如何登陆流程
  • 原文地址:https://www.cnblogs.com/tester808/p/6724629.html
Copyright © 2020-2023  润新知