如何防止 Windows Server 2003 修剪进程的工作集?

Per*_*xus 6 windows windows-server-2003 memory

我认为 Windows Server 2003 如何处理进程的工作集有两个不同的问题,但我认为是相关的。

首先,有一些 GUI 应用程序运行在控制台会话上,当它们的顶级窗口被最小化时,工作集会被修剪。我知道让服务器进程与 GUI 一起运行是很不寻常的,但这些是遗留应用程序,它们在做一些我无能为力的重要事情。

其次,有一个长时间运行的数据库服务器,它在客户端连接时分配大量内存,但在另一个客户端连接之前不会触及该内存。与此同时,几天可能过去了,操作系统似乎认为这是修剪该进程工作集的充分理由。

在这两种情况下,都有大量可用的物理 RAM(比应用程序需要的多 GB),所以我希望 Windows 不修剪它们的工作集。有没有设置来配置这个?这些都是第三方应用程序,因此更改内存分配或锁定内存中的页面不是可行的选择。

Rya*_*ies 2

您发布的文章包含您想要的所有信息,尽管我知道这不是您想听到的。

首先,我不知道您的应用程序是什么或它们做什么,或者为什么它们的工作集不被修剪如此重要,或者任何其他可能帮助您解决问题的切线信息该流程的工作集正在做出贡献。在我看来,您必须支持一个设计不良的应用程序,并且您正在尝试改变 Windows 的行为以弥补设计不良的应用程序。这是一个糟糕的情况,我很抱歉。

也就是说,我会尝试回答你的问题:

您正在描述 Windows 的设计方式的一个基本机制。GUI 窗口上的最小化按钮的默认行为将调用 ShowWindow(hWnd, SW_MINIMIZE) 来修剪进程的工作集 - 故事结束。

您倾向于这个设计不佳的应用程序的编写者可能选择拦截当用户单击“最小化窗口”按钮并调用 ShowWindow(hWnd, SW_SHOWMINIMIZED) (不会修剪 WS)而不是 ShowWindow 时发生的 WM_SYSCOMMAND 消息(hWnd, SW_MINIMIZE),但他们没有。如果您无法联系此应用程序的开发人员并告诉他们再试一次(这次使用实际的服务器应用程序),那么您将陷入这种行为。