获取进程占用的内存

参考url:

https://blog.csdn.net/fw0124/article/details/6367360/

https://processhacker.sourceforge.io/downloads.php

https://technet.microsoft.com/zh-cn/ms684903(v=vs.90)

https://docs.microsoft.com/en-us/windows/desktop/api/MemoryApi/nf-memoryapi-queryvirtualmemoryinformation

0 相关名词解释

PrivateWorkingSet: 进程独自占用的物理内存

SharedWorkingSet: 进程在物理内存中跟其他进程共享的内存, 例如: dll占用的内存

WorkingSet: 进程占用的物理内存总和, 即PrivateWorkingSet与SharedWorkingSet的和

commitBytes(Private Bytes): 当前进程独自占用的虚拟内存总和, 包括PrivateWorkingSet 以及换到页面文件中的部分

根据网上的参考资料, 一个进程总的内存占用包括PrivateWorkingSet, SharedWorkingSet, 在硬盘页面文件中的部分

1 获取进程的内存占用的相关方法

<1> GetProcessMemoryInfo

第二个参数返回结果, 不能获取PrivateWorkingSet

PROCESS_MEMORY_COUNTERS_EX结构中,

WorkingSetSize: 对应任务管理器中的工作集(WorkingSet)

PeakWorkingSetSize: 对应任务管理器中的峰值工作集

PagefileUsage: 对应任务管理器中的提交大小(commitBytes), Windows 7 and Windows Server 2008 R2 and earlier:  PagefileUsage is always zero.

PeakPagefileUsage: 峰值提交大小

PrivateUsage: 对应任务管理器中的提交大小(commitBytes)

<2>QueryWorkingSet

只能在app跟system都是x64或者x86的情况下使用, wow64下能返回结果, 但是跟实际完全不一样

PSAPI_WORKING_SET_BLOCK结构中,

统计Shared ==0(ProcessExplorer中使用该方法)的页面个数然后 乘以 每个页面的大小0x1000 就是该进程的PrivateWorkingSet

<3>QueryWorkingSetEx

这个没用过,因为不知道这个怎么用

<4>NtQuerySystemInformation

这个可以在win7及以上所有环境下使用, 由于是微软未文档化的函数,所以不排除将来有修改的可能, 以下例子是从ProcessHacker的源码中抽取出来的

https://files.cnblogs.com/files/talenth/GetProcessInfo.7z

<5>可能还有其他的方法, 目前没有找到...

原文地址:https://www.cnblogs.com/talenth/p/9762528.html

时间: 2024-10-14 09:11:43

获取进程占用的内存的相关文章

Android之——获取进程总数、内存、任务列表

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47263863 如今,基于Android平台的应用越来越多,不乏这样一些应用程序,这些应用可以多手机中的进程,内存和任务列表进行管理.Android系统中没有自带的应用程序对这些数据进行管理.大家不禁会说,Android的应用设置里面有这些功能啊!是的,虽然应用设置里面有,但是我们如果想看一下系统的进程,还要跑到系统设置里面去看吗?这样是不是很麻烦?是不是很挫呢?那获取Androi

查看进程占用的内存情况

可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看,如想查看java用户的进程内存使用情况的话可以使用如下的命令: (1)top top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器 可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看,如想查看tomcat用户的进程内存使用情况的话可以使用如下的命令: $ top -u tomcat 内容解释: PID:进程的ID    US

查看w3wp进程占用的内存及.NET内存泄露,死锁分析--转载

一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方式运行w3wp进程.这个可以通过查看IIS Application Pool 的高级选项进行设置: 好了,接下打开Windbg看看这个w3wp进程占用了376M内存,启动的54个线程. 1. 加载 WinDbg SOS 扩展命令 .load C:\Windows\Microsoft.NET\Fram

mmdrv.exe进程占用大量内存及其他系统资源

收到阿里云的报警说是服务器进程数过多,然后登陆云监控一看,吓了一跳发现服务器的内存,cpu各种上升,登陆查看任务管理器进程出现好多mmdrv.exe进程,仔细寻觅一番才发现是测试工程师在使用Loadrunner做测试(尼玛也不说一声),原来虚惊一场,以下是自己了解的一些Loadrunner: Load Generator 对系统的要求 如果使用进程方式并发,并发10个虚拟用户,则会在任务管理器中出现10个mmdrv.exe进程: 如果使用线程方式并发,并发10个虚拟用户,只会在任务管理器中出现1

查看w3wp进程占用的内存及.NET内存泄露,死锁分析

一 基础知识 在分析之前,先上一张图: 从上面可以看到,这个w3wp进程占用了376M内存,启动了54个线程. 在使用windbg查看之前,看到的进程含有 *32 字样,意思是在64位机器上已32位方式运行w3wp进程.这个可以通过查看IIS Application Pool 的高级选项进行设置: 好了,接下打开Windbg看看这个w3wp进程占用了376M内存,启动的54个线程. 1. 加载 WinDbg SOS 扩展命令 .load C:\Windows\Microsoft.NET\Fram

Lsass.exe进程占用大量内存

Lsass进程为系统进程,当发现这个进程占用了大量内存(有的占用了3G的内存),在某些内存不是很大的服务器上内存直接达到90%以上.在发现这些内存出现问题的服务器上主要出现了如下状况: 1.杀毒软件扫描出同样的病毒文件.(看扫描出的病毒文件,怀疑为勒索病毒)2.系统文件lsass.exe的大小变为30.5K(原正常文件大小为30.0K). 处理方式:网上找到的处理方法找到两种,一种是打补丁(Windows 7 SP1 和 Windows Server 2008 R2 SP1 (KB3156417

swap分区爆了解决办法(查看swap分区进程占用的内存)

查看swap使用的进程和内存 [[email protected] ~]# for i in $( cd /proc;ls |grep "^[0-9]"|awk ' $0 >100') ;do awk '/Swap:/{a=a+$2}END{print '"$i"',a/1024"M"}' /proc/$i/smaps 2>/dev/null ; done | sort -k2nr | head -10 23234 207.758M

Windbg查看w3wp进程占用的内存及.NET内存泄露,死锁分析

https://www.cnblogs.com/startpoint/p/4194052.html https://www.cnblogs.com/lyl6796910/p/7613664.html https://www.cnblogs.com/dubing/p/3878591.html 原文地址:https://www.cnblogs.com/lenmom/p/9236032.html

Android之——杀死选中的进程(释放进程占用的空间)

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47277691 这篇文章是基于上一篇文章<Android之--获取进程.内存.任务列表>完善的,大家可以先阅读一下上一篇博文<Android之--获取进程.内存.任务列表>,做到心中有数.这篇文章中我主要向大家介绍,如何杀死我们在列表中选中的进程,释放进程所占用的空间.好了,不废话了,咱们直接进入主题吧. 一.原理 老规矩,还是先唠叨一下这个原理级别的东东吧. 基于上