Chrome で RAM の使用を制限しますか?

Chrome で RAM の使用を制限しますか?

Google Chrome で複数のタブを数時間または数日間開いたままにしておくと、一部のページが大量の RAM を使用し、ページングが原因で OS (XP) 全体が応答しなくなることに気付きました。運が良ければ、開いている URL のリストをブックマークし、Chrome を閉じて、もう一度やり直すことができます。運が悪ければ、Chrome を終了して、開いている URL のリストを復元できることを期待するしかありません。

  • それはなぜでしょうか? プラグインでメモリリークが発生しているのでしょうか?
  • 1 つのタブ/ページが設定された量を超える RAM を使用しないように Chrome を構成する方法はありますか?

ありがとう。

答え1

OS が処理できる量の RAM を購入することを選択すべきだと思います。Chrome の RAM 使用量を制限すると、Web での閲覧体験が台無しになるだけなので、制限すべきではありません。ほとんどの時間をインターネット閲覧にコンピュータを使用すると仮定すると、タブを同時に実行して「楽しむ」ために必要なパフォーマンスを実現するために、Chrome に必要なすべてのリソースを取得できるようにする必要があります。

個々のタブの RAM 使用量を制限する方法はないと思いますが、Chrome 全体の使用量を制限することはできます。こちらをご覧ください:

https://stackoverflow.com/questions/192876/set-windows-process-or-user-memory-limit

もし私があなただったら、スムーズなウェブサーフィンを望むなら、そうすることはしないでしょう。

答え2

  1. 私はChromeのレンダラーが一定量以上のメモリを使用したときにそれを止めるPython 2.5プログラムを書きました。このプログラムは で実行しますwatch。(psutilPython には含まれていないモジュールです。

    import sys, os, psutil
    
    if len(sys.argv) == 2:
        try:
            limit = int(sys.argv[1])
        except:
            limit = 200 # default 200MB
    else:
        limit = 200
    
    uid = os.getuid()
    for p in psutil.get_process_list():
        try:
            if (p.name == 'chrome' and any('type=renderer' in part for part in p.cmdline)
               and p.uid == uid):
                m = p.get_memory_info()
                #print p.pid,m, m.rss / 1024 / 1024, m.vms / 1024 / 1024
                if (m.rss / 1024 / 1024) > limit: # kill if rss is greater than limit
                    print 'Killed', p.pid
                    p.kill()
        except psutil.error.NoSuchProcess:
            pass
        except psutil.error.AccessDenied:
            pass
    
  2. 私は頼りにしているセッションバディChrome がタブの復元に失敗した場合、開いているタブを回復します。

答え3

これまでに私が見た中でこれができる唯一のものはコンテナ内でChromeを実行するそしてコンテナのRAMを制限する

しかし、これにはいくつかの大きな注意点があります。

  • Chrome の実行は、Dockerize のセットアップと起動シーケンスによって複雑になります。

  • まず、Chrome はすでにスレッドをサンドボックス化するためにカーネル コンテナを使用しています。そのため、コンテナを、それが機能するようにある種のルート権限で実行する必要があります。これは回避可能であり、リンク コンテナ モデルはそれを実現します。(必要なことはすべて実質的に実行します)

  • ほぼ確実にGPUアクセラレーションが失われます

  • オーディオを動作させるのは複雑ですが、リンクされたコンテナー モデルで処理されます。

  • 保証が無効になったときに他に何が問題になるか予想したとしても、Chrome は RAM をこれ以上使用しないように指示されることを非常に嫌い、それに応じて異常な動作をしたり癇癪を起こしたりします。

しかし、最終的にはうまくいきます。

私は、これらの RAM 制限を、事前にビルドされた Docker イメージを持たない Electron Shell アプリに適用して、それらを調整することに興味があります。


話題から外れますが、Firefox は限られたハードウェア上で非常に適切に動作するということを指摘しておきますが、それが本当の答えだとは思いません。

答え4

必ずしもプラグインである必要はありません。Web ページはもはや静的ではないことに注意してください。一部の Web ページでは、かなりの量の非同期アクティビティが実行されます。プラグインからのアクティビティを追加すると、不明な点がいくつか生じます。

私が見つけた最善の解決策は、Web ページを終了して再読み込みすることです。私の知る限り、Web ページが使用する RAM の量を制限する方法はありません。

関連情報