QT5使用性能监视器确认软件是否存在内存泄漏

QT5如何使用性能监视器动态监视内存使用情况;

可参考链接,(我自己暂时没时间截图重写,步骤差不多):https://blog.csdn.net/invisible_sky/article/details/78205576?utm_medium=distribute.pc_relevant_right.none-task-blog-BlogCommendFromBaidu-10.channel_param_right&depth_1-utm_source=distribute.pc_relevant_right.none-task-blog-BlogCommendFromBaidu-10.channel_param_right。

内存泄漏监视常用计数器如下:

监视情况:内存不足

Memory/ Available Bytes:

表示剩余的可用物理内存,单位是兆字节(参考值:>=10%)。表明进程当前可使用的内存字节数。 如果 Available Bytes 的值很小(4 MB 或更小),则说明计算机上总的内存可能不足,或某程序没有释放内存。

Memory/ Pages/sec

表明由于硬件页面错误而从磁盘取出的页面数,或由于页面错误而写入磁盘以释放工作集空间的页面数。
如果 Pages/sec 的值为 20 或更大,那么您应该进一步研究页交换活动。Pages/sec 的值很大不一定表明内存有问题,而可能是运行使用内存映射文件的程序所致。

**操作系统经常会利用磁盘交换的方式提高系统可用的内存量或是提高内存的使用效率。**下列四个
指标直接反映了操作系统进行磁盘交换的频度。
Page Faults/sec
当处理器在内存中读取某一页出现错误时,就会产生缺页中断,也就是 page Fault。如果这个页
位于内存的其他位置,这种错误称为软错误,用Transition Fault/sec 来衡量;如果这个页位于硬盘上,必须从硬盘重新读取,这个错误成为硬错误。硬错误会使系统的运行效率很快将下来。Page Faults/sec这个计数器就表示每秒钟处理的错误页数,包括硬错误和软错误。

Page Input/sec
表示为了解决硬错误而写入硬盘的页数(参考值:>=Page Reads/sec)

Page Reads/sec
表示为了解决硬错误而从硬盘上读取的页数。(参考值: <=5)

Pages/sec
表示为了解决硬错误而从硬盘上读取或写入硬盘的页数(参考值:00~20)

注:必须同时监视 Available Bytes、Pages/sec 和 Paging File % Usage,以便确定是否发生这种情况。如果正在读取非缓存内存映射文件,还应该查看缓存活动是否正常。Cathe Bytes表示文件系统的缓存(默认为50%的可用物理内存)

监视情况:内存泄露

Memory/Available Bytes

Memory/ Committed Bytes

Committed Bytes 是指已被提交的(不是保留的)虚拟内存字节数。此数并不一定代表页面文件的使用量,因为它包含了物理内存中从未被换出过的私有提交页面。当然,如果一个进程完全是非驻留的,则它代表所使用的页面文件数量。

Process/ Private Bytes

分配的私有虚拟内存总数,即私有的、已提交的虚拟内存使用量。即:Task Manager中的VM Size。
内存泄露时表现的现象是私有虚拟内存的递增,而不是工作集大小的递增。在某个点上,内存管理器会阻止一个进程继续增加物理内存大小,但它可以继续增大它的虚拟内存大小。
Private Bytes进程无法与其他进程共享的字节数量。该计数器的值较大时,有可能是内存泄露的信号。
Private Bytes既包括不引起page fault异常就能够访问的内存也包括引起page fault异常才能够访问的内存。
所以一般Private Bytes大于Working Set。但是如果一个进程和其他进程共享较多内存,也可能造成Working Set大于Private Bytes。

Process/ Working Set

Working Set看成一个进程可以用到(但不一定会使用)的物理内存。即不引起page fault异常就能够访问的内存。
Working Set包含了可能被其他程序共享的内存, 例如DLL就是一个典型的可能被其他程序共享的资源。

Process/ Handle Count

显示此进程当前打开的句柄的总数。此数字是此进程中的每个线程当前打开的句柄总数。特定进程中句柄计数的增加可能是发生句柄泄漏的错误进程的症状,这将导致服务器上发生性能问题。此问题并不一定会出现,但是在一段时间内对其进行监视以确定是否发生句柄泄漏十分重要。

Memory/ Pool Nonpaged Bytes

含义:
Pool Nonpaged Bytes 指在非换页池中的字节数,非换页池是指系统内存(操作系统使用的物理内存)中可供对象(指那些在不处于使用时不可以写入磁盘上而且只要分派过就必须保留在物理内存中的对象)使用的一个区域。
疑问:Memory\Pool Nonpaged Bytes 的计数方式与 Process\Pool Nonpaged Bytes 的计数方式有什么不同。
通俗含义:
非换页池中的当前大小,即Task Manager中的Kernel Memory→NonPaged。

Memory/ Pool Nonpaged Allocs

含义:
Pool Nonpaged Allocs 指在换换页池中分派空间的调用数。它是用衡量分配空间的调用数来计数的,而不管在每个调用中分派的空间数是多少。
原文:
Shows the number of calls to allocate space in the nonpaged pool. This counter is measured in numbers of calls to allocate space, regardless of the amount of space allocated in each call.
分析:
考察其自系统启动以来的增长了10%以上,如果是,表明有潜在的严重瓶颈。
需要观察Server\Pool Nonpaged Failures,非页面池分配失败的次数。非零表示计算机的物理内存太小。

Process(process_name)/ Pool Nonpaged Bytes。

描述:
Pool Nonpaged Bytes 指在非分页池中的字节数,非分页池是指系统内存(操作系统使用的物理内存)中可供对象(指那些在不处于使用时不可以写入磁盘上而且只要分派过就必须保留在物理内存中的对象)使用的一个区域。Memory\Pool Nonpaged Bytes 的计数方式与 Process\Pool Nonpaged Bytes 的计数方式不同,因此可能不等于 Pool Nonpaged Bytes\_Total。 这个计数器仅显示上一次观察的值;而不是一个平均值。

如果您怀疑有内存泄露,请监视 Memory/Available Bytes 和 Memory/ Committed Bytes,以观察内存行为,并监视你认为可能在泄露内存的进程的 Process/ Private Bytes、Process/ Working Set 和Process/ Handle Count。如果您怀疑是内核模式进程导致了泄露,则还应该监视 Memory/ Pool Nonpaged Bytes、Memory/ Pool Nonpaged Allocs 和 Process(process_name)/ Pool Nonpaged Bytes。

监视情况:检查过于频繁的页交换

由于过多的页交换要使用大量的硬盘空间,因此有可能将导致将页交换内存不足,这容易与导致页交换的磁盘瓶颈混淆。因此,在研究内存不足不太明显的页交换的原因时,您必须跟踪如下的磁盘使用情况计数器和内存计数器:

· Physical Disk/ % Disk Time

· Physical Disk/ Avg.Disk Queue Length

例如,包括 Page Reads/sec 和 % Disk Time 及 Avg.Disk Queue Length。如果页面读取操作速率很低,同时 % Disk Time 和 Avg.Disk Queue Length的值很高,则可能有磁盘瓶径。但是,如果队列长度增加的同时页面读取速率并未降低,则内存不足。

要确定过多的页交换对磁盘活动的影响,请将 Physical Disk/ Avg.Disk sec/Transfer 和 Memory/ Pages/sec 计数器的值增大数倍。如果这些计数器的计数结果超过了 0.1,那么页交换将花费百分之十以上的磁盘访问时间。如果长时间发生这种情况,那么您可能需要更多的内存。

研究程序的活动

接下来,检查正在运行的程序导致的过多的页交换。如果可能,请停止具有最高工作集值的程序,然后查看页交换速率是否有显著变化。如果您怀疑存在过多的页交换,请检查 Memory/ Pages/sec 计数器。该计数器显示由于页面不在物理内存中而需要从磁盘读取的页面数。(注意该计数器与 Page Faults/sec 的区别,后者只表明数据不能在内存的指定工作集中立即使用。)

参考文档:
1、Windows系统内存计数器理解解析:http://blog.sina.com.cn/s/blog_551240db0101j59n.html
2、Windows常见性能计数器(较好的说明):
https://blog.csdn.net/dfbrt56/article/details/3341591?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param
3、[收集]Windows 性能监视器的计数器及阈值应用:
https://blog.csdn.net/ixingarden/article/details/2728664
4、“性能监视器”监视系统性能的基本设置:https://www.cnblogs.com/xinaixia/p/8241685.html

猜你喜欢

转载自blog.csdn.net/youarenotme/article/details/107897721