好的,所以我有一个非常大的多线程非托管c ++应用程序(服务器),它运行在Windows 2003服务器上.它为20-50个并发用户提供各种业务逻辑的会话...有时,由于用户在客户端打开了大量窗口等对象/会话缓存之类的东西,它可能会占用大量内存(每个窗口都有一个单独的服务器'会话'.
我们经常看到消耗超过5-600 MB的物理内存和5-600 MB的虚拟内存.一旦达到这一点,我们似乎开始出现"内存不足"错误.
现在我知道Windows会在感觉需要释放物理内存时启动页面错误,而且win32应用程序通常只能分配最多4GB的内存,实际上只有2GB可用于应用程序实际使用'用户模式'地址空间,甚至更少的其他库加载后......我不确定'用户模式'内存使用情况是否是任务管理器上报告的内容. ..
所以无论如何我真正的问题是:
我如何知道我的应用程序可以访问多少用户模式内存,以及在任何给定时间(最好是从应用程序外部,即某些Windows管理工具)使用了多少内存?
[edit]在查看Process Explorer和网站之后,看起来值'Virtual Size'是应用程序可以访问多少内存的值.
听起来像Process Explorer的案例,这是Microsoft SysInternals的免费实用程序:
alt text http://i.technet.microsoft.com/bb896653.ProcessExplorer(en-us,MSDN.10).jpg
描述:
有没有想过哪个程序有特定的文件或目录打开?现在你可以找到.Process Explorer显示有关已打开或加载了哪些句柄和DLL进程的信息.
Process Explorer显示包含两个子窗口.顶部窗口始终显示当前活动进程的列表,包括其拥有帐户的名称,而底部窗口中显示的信息取决于Process Explorer所处的模式:如果处于句柄模式,您将看到处理在顶部窗口中选择的进程已打开; 如果Process Explorer处于DLL模式,您将看到进程已加载的DLL和内存映射文件.Process Explorer还具有强大的搜索功能,可以快速显示哪些进程打开了特定句柄或加载了DLL.
Process Explorer的独特功能使其可用于跟踪DLL版本问题或处理泄漏,并提供对Windows和应用程序工作方式的深入了解.
如果您正在寻找有关终端服务器特定信息的更多信息,我一直在关注程序员的博客,该博客正在发布我相信将完全符合您需求的工具的测试版.它是一种改进的TSAdmin.他称之为TSAdminEx.
请参阅下面的屏幕截图,然后单击此处以了解有关它的更多信息并获得测试版.它是免费软件,BTW.