我们的服务往往会在晚上在客户的服务器上睡着,然后很难醒来。似乎发生的是进程堆,有时是几百 MB,被移动到交换文件。这发生在晚上,此时我们的服务未被使用,而其他服务计划运行(数据库备份、AV 扫描等)。发生这种情况时,在几个小时不活动后,对服务的第一次调用最多需要几分钟(后续调用需要几秒钟)。
我很确定这是虚拟内存管理的问题,我真的很讨厌强制操作系统将我们的服务保存在物理内存中的想法。我知道这样做会损害服务器上的其他进程,并降低整体服务器吞吐量。话虽如此,我们的客户只是希望我们的应用程序能够响应。他们不关心每晚的工作是否需要更长的时间。
我依稀记得有一种方法可以强制 Windows 将页面保留在物理内存中,但我真的很讨厌这个想法。我更倾向于一些将启动更高级别功能的内部或外部看门狗(已经有一些内部调度程序做的很少,并且没有区别)。如果有提供这种服务的第 3 方工具就好了。
我很想听听针对此类问题的任何评论、建议和通用解决方案。该服务使用VC2005编写,运行在Windows服务器上。
最佳答案
正如您所提到的,强制应用保留在内存中并不是在机器上共享资源的最佳方式。您可能会发现一个行之有效的快速解决方案是简单地安排一个事件,在您的客户开始使用服务之前,每天早上在特定时间唤醒您的服务。您可以使用简单的脚本或 EXE 调用在 Windows 任务计划程序中安排它。
关于windows - 防止繁重的进程沉入交换文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/833497/