Ограничиваете использование оперативной памяти в Chrome?

Ограничиваете использование оперативной памяти в Chrome?

Когда я оставляю несколько вкладок открытыми в Google Chrome на несколько часов/дней, я замечаю, что некоторые страницы в конечном итоге используют огромные объемы оперативной памяти, вплоть до того, что вся ОС (XP) перестает отвечать из-за подкачки страниц. Когда мне везет, я наконец могу добавить в закладки список открытых URL, закрыть Chrome и начать снова; когда нет, я просто должен закрыть Chrome и надеяться, что смогу восстановить список открытых URL.

  • Почему так? Утечки памяти в плагинах?
  • Есть ли способ настроить Chrome так, чтобы отдельная вкладка/страница не использовала больше установленного объема оперативной памяти?

Спасибо.

решение1

Я думаю, вам просто следует выбрать покупку столько оперативной памяти, сколько может выдержать ваша ОС. Вам не следует ограничивать использование оперативной памяти Chrome, потому что это просто испортит вам опыт серфинга в Интернете. Предполагая, что вы используете свой компьютер для серфинга в Интернете большую часть времени, вы должны позволить Chrome получить все необходимые ресурсы, чтобы обеспечить производительность, которая вам нужна, чтобы вы могли «наслаждаться» запуском этих вкладок одновременно.

Я не думаю, что есть способ ограничить использование ОЗУ каждой отдельной вкладкой, но вы можете ограничить использование Chrome в целом. Посмотрите здесь:

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

Если бы я был на вашем месте, я бы предпочел этого не делать, если мне нужен плавный веб-серфинг.

решение2

  1. Я написал программу на Python 2.5, которая убивает рендереры Chrome, когда они используют больше установленного объема памяти. Я запускаю эту программу под watch. (обратите внимание, что она используетpsutil(модуль, который не входит в состав Python.)

    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

Единственное, что я видел на сегодняшний день, что может это сделать, этозапустить хром внутри контейнераиограничить контейнеры ram.

Однако здесь есть несколько важных оговорок:

  • Запуск Chrome осложняется настройкой и последовательностью запуска Dockerize

  • во-первых, Chrome уже использует контейнеры ядра для изоляции своих потоков; поэтому вам нужно запустить контейнер с привилегиями root, которые позволяют этому работать. Это можно обойти, и связанная модель контейнера делает это. (она делает практически все, что нужно)

  • Вы почти наверняка потеряете ускорение графического процессора.

  • Заставить работать звук сложно, но это решается с помощью модели связанного контейнера.

  • Что бы вы ни ожидали увидеть в случае аннулирования гарантии, Chrome крайне не любит, когда его просят не использовать больше оперативной памяти, и будет капризничать и устраивать истерики.

Но в конечном итоге это работает.

Меня больше интересует применение этих ограничений оперативной памяти к приложениям Electron Shell, у которых нет готовых образов Docker, чтобы настроить их для вас.


Не по теме, но хочу отметить, что Firefox очень хорошо себя ведет на ограниченном оборудовании, но я не считаю это реальным ответом.

решение4

Это не обязательно плагин. Обратите внимание, что веб-страницы больше не статичны. На некоторых веб-страницах просто происходит нетривиальное количество асинхронной активности. Добавьте активность от плагинов, и вы получите некоторые неизвестные.

Лучшее средство, которое я нашел, — это закрыть веб-страницу и перезагрузить ее. Насколько мне известно, нет способа ограничить объем оперативной памяти, используемый веб-страницей.

Связанный контент