有没有办法限制 Win7 x64 中进程使用的内存?

有没有办法限制 Win7 x64 中进程使用的内存?

我认为 Linux 可以使用 ulimit 来实现这一点,我在 Win7 x64 中寻找类似的东西。问题是,有时进程不知道物理内存已经耗尽,并继续分配内存,这会使系统速度变慢,因为系统是从页面文件分配的。恢复的唯一方法是硬重启。

谢谢

答案1

那里Windows 系统资源管理器,但这仅适用于Windows Server 2008。

一般来说,这不是一个好主意——页面文件是用来使用的。大多数进程不知道其物理内存的限制,也不需要关心。听起来你应该清理使用资源的程序,或者投资更多的内存——4GB 现在是相当标准的,而且越多越好。

答案2

  • 在 Win7 上,打开msconfig,然后Boot面板 => Advanced options=> 勾选Maximum memory并在复选框下方的文本框中设置限制 => 重新启动。这将限制总内存使用量。

  • 另一种方法是在后台运行批处理脚本,监视进程的内存使用情况,如果占用过多内存则终止它。

我有一个不需要的进程(它会下载大量广告)占用了太多内存(总是由我经常使用的另一个程序启动)。这是bat我监控并自动关闭它的脚本。

@echo off
set prog="XXXX.exe"
:1
SET found=1 
(tasklist /FI "username eq <your username>" | find %prog% || set found=0) >nul 2>nul
if %found% EQU 1 (taskkill /f /im %prog%)
ping 0.0.0.1 -n 600 >nul 2>nul
goto 1

希望有人可以扩展它来监控任何进程。

  • 如果你编写了自己的程序,你可以利用作业对象 API

    作业可以对与该作业关联的每个进程强制实施限制,例如工作集大小、进程优先级和作业结束时间限制。如果与作业关联的进程尝试将其工作集大小或进程优先级从该作业建立的限制中增加,则函数调用会成功,但会被默默忽略。作业还可以设置限制,当超出限制时会触发通知,但允许作业继续运行。

答案3

似乎没有本地方法可以做到这一点,因为 M$ 再次将其用户视为无能的白痴,不允许他们执行可能实际上使整个系统更稳定或更高效的任务。

唯一的解决方法可能是建议在后台运行批处理脚本(从技术上讲,这属于第三方,因为脚本是由另一方非正式编写和运行的),但这不会“限制”该过程本身,而是在达到您施加的最大限制时重新启动该过程。

您应该考虑的重启脚本问题是:

  1. 您将会意外地终止该进程,这意味着它将在执行的任何任务中被中断。

  2. 如果在进程重新启动时写入文件,则可能会生成损坏的文件。如果进程有自己的文件验证和重写应急措施(例如在线游戏和 Steam),则可以缓解这种情况。

  3. 其他子进程和线程也将被终止,并可能传播此处列出的其他问题。

  4. 如果该进程很快耗尽了 RAM,则可能会过于频繁地重新启动该进程,从而导致该进程变得无用(提交严重错误报告并停止使用该软件)。

  5. 尽管软件进程正在经历无意的内存泄漏,但当系统内存不足/耗尽时,例如当它最终使用页面文件时,该进程可能具有内部行为策略。如果它在这种情况下改变其行为以减少其占用空间,则重新启动该进程可确保它永远不会进入这种“减少”的运行状态。

Linux 团队做对了事情的另一个原因,但是遗憾的是,Windows 首先在驱动程序和游戏方面获得了全世界的支持,所以我们必须比它活得更久。

顺便说一句,我个人在 Razer GameScannerService.exe 进程中遇到了严重的内存泄漏,在我的 16GB 1800MHz 内存(和我的 5GHz CPU)中,几分钟内它已经分配了近 2GB 的 RAM,如果我允许的话,我看到它一直攀升到 9GB。

尽管有大量错误报告,但 Razer 并未采取措施解决此问题。我们唯一的选择是以某种方式禁用该服务,并且不再让 Razer 自动将配置文件应用于游戏或自动发现已安装的新游戏。

相关内容