web-dev-qa-db-ja.com

プロセスがWin7x64で使用するメモリを制限する方法はありますか?

Linuxはulimitを使用してこれを実行できると思います。私は、Win7x64で同様のものを探しています。問題は、プロセスが物理メモリがすでに使い果たされていることを認識せず、メモリの割り当てを継続する場合があります。これにより、システムがページファイルから割り当てているため、システムのクロール速度が低下します。回復する唯一の方法は、ハードリブートです。

ありがとう

5
jimjxr

isWindows System Resource Manager ですが、これはWindows Server2008にのみ適用されます。

一般に、これは良い考えではありません。ページファイルは使用することを目的としています。ほとんどのプロセスは、物理メモリの制限を認識しておらず、注意を払う必要もありません。リソースを使用してプログラムをクリーンアップするか、より多くのメモリに投資する必要があるようです。最近では4 GBがかなり標準的であり、より多くの方が優れています。

3
Andrew M.
  • 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 を利用できます。

    ジョブは、ジョブに関連付けられている各プロセスに、ワーキングセットのサイズ、プロセスの優先度、ジョブの終了時間の制限などの制限を適用できます。ジョブに関連付けられたプロセスが、そのワーキングセットのサイズまたはプロセスの優先度をジョブによって確立された制限から増加させようとすると、関数呼び出しは成功しますが、黙って無視されます。ジョブは、制限を超えたときに通知をトリガーする制限を設定することもできますが、ジョブは引き続き実行できます。

2
Lee

これを行うネイティブな方法はないようです。繰り返しになりますが、M $は、システム全体をより安定または生産的にする可能性のあるタスクの実行を許可されるべきではない無能な馬鹿のようにユーザーを扱います。

唯一の回避策は、バッチスクリプトをバックグラウンドで実行するために提案されたものである可能性があります(スクリプトは別のパーティによって非公式に作成および実行されるため、技術的にはサードパーティに該当します)が、これはプロセス自体を「制限」しませんが、代わりに、設定した最大制限に達したときにプロセスを再開します。

考慮すべき再起動スクリプトの問題は次のとおりです。

  1. プロセスを予期せず強制終了します。つまり、実行していたタスクでプロセスが中断されます。

  2. プロセスの再起動時にファイルが書き込まれていると、破損したファイルが生成される可能性があります。これは、プロセスに独自のファイル検証と書き換えの不測の事態(オンラインゲームやSteamなど)がある場合に軽減できます。

  3. その結果、他のサブプロセスとスレッドも強制終了され、ここにリストされている他の問題が伝播する可能性があります。

  4. プロセスがRAMをかなり早く消費する場合、プロセスの再起動が頻繁に発生し、プロセスが役に立たなくなる可能性があります(重大なバグレポートを提出し、ソフトウェアの使用を停止してください)。

  5. ソフトウェアプロセスで意図しないメモリリークが発生していますが、ページファイルを使用する場合など、システムのRAMが不足している、または枯渇している場合、プロセスに動作の内部ポリシーがある可能性があります。この場合、フットプリントを削減するために動作を変更した場合、プロセスを再起動すると、このような「削減された」動作状態になることはありません。

Linuxチームが問題を解決したもう1つの理由は、残念ながら、Windowsは最初にドライバーとゲームで世界の支持を得たため、それよりも長生きする必要があります。

ところで、私はRazer GameScannerService.exeプロセスで大規模なメモリリークを個人的に経験しています。16GBの1800MHzメモリ(および5GHz CPU)のうち、数分以内にすでに2GB近くのRAMが割り当てられており、上昇するのを見てきました。許可すれば最大9GBまで。

膨大な数のバグレポートがあるにもかかわらず、Razerはこれを修正するために何もしません。私たちの唯一のオプションは、何らかの方法でサービスを無効にし、Razerがゲームにプロファイルを自動適用したり、インストールされた新しいゲームを自動検出したりする機能なしで生きることです。

2
user253780