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

22

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

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

Спасибо.

OverTheRainbow
источник
сколько у вас оперативки?
Baarn
@OverTheRainbow - Почему бы не рассмотреть Page Snooze - chrome.google.com/webstore/detail/…
PeanutsMonkey
У меня есть 4 ГБ, чего достаточно, за исключением случаев, когда некоторые веб-страницы занимают 500 МБ. Спасибо за ссылки на Page Snooze и Session Buddy.
OverTheRainbow

Ответы:

-2

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

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

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

Я бы не стал этого делать, если бы я был вами, если бы я хотел плавного веб-серфинга.

WikiWitz
источник
16
Это не совсем решение, когда вы не можете контролировать содержимое компьютера, который вы используете (т.е. рабочий компьютер)
Gnoupi
в этом случае было бы хорошо, если бы существовал способ установить «приоритеты» для выбранных вкладок (например, активная вкладка получает большую часть памяти), поскольку при ограниченном объеме ОЗУ и на компьютере, которым вы не владеете, пользователь - это тот, кто следует адаптировать (уменьшив количество открытых вкладок), что контрпродуктивно.
WikiWitz
3
Chrome потребляет столько же ОЗУ, сколько получает, поэтому добавление большего объема ОЗУ - это то же самое, что сжигание большего количества древесины в дровах, а сжигание большего.
JDuarteDJ
5
@WikiWitz, вы недооцениваете, сколько ест Chrome RAM. У меня 16 ГБ физической ОЗУ, и этого все еще недостаточно.
Pacerier
2
«Предполагать, что вы используете свой компьютер для серфинга в Интернете большую часть времени», - это главная задача. Не все это Chromebook.
Писквор
12
  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. Я полагаюсь на Session Buddy для восстановления открытых вкладок, когда Chrome не может их восстановить.

Дэн Д.
источник
Как Chrome справляется с убийством рендеров? Какое поведение проявляет вкладка после того, как ее рендер отображен? О, я только что видел ваш комментарий Session Buddy, так что это означает, что Chrome иногда не может их восстановить, хорошо. Это часто случается? Это действительно здорово, спасибо!
Мэтью
1
@Human Вкладки, которые использовали этот убитый процесс рендеринга, становятся сбойными вкладками. Но хотя приведенный выше скрипт прекрасно работает с Chrome 12 в более поздних версиях, он также убивает расширения, которые в отличие от Chrome 12 запускаются в процессах рендеринга, а не в расширениях.
Дэн Д.
@Human Возможно потерять последние вкладки, если вы не нажмете кнопку восстановления . Также, даже если у вас есть Last Tabsфайл, невозможно восстановить вкладки из этого файла. Я пытался определить формат и извлечь URL-адреса из него когда-то давно. Это не было успешным. И я больше доверяю SQLite, чем двоичному формату, который Chrome использует для хранения вкладок текущего сеанса, поэтому SB лучше.
Дэн Д.
@DanD., Этот сценарий безопасен? Будет ли это в конечном итоге разбить весь Chrome?
Pacerier
@Pacerier Да, кроме случаев, когда Chrome все еще находится в фазе отложенной загрузки вкладок после перезапуска, это не так.
Дэн Д.
4

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

Однако это имеет некоторые серьезные оговорки,

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

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

  • Вы почти наверняка потеряете ускорение GPU

  • заставить аудио работать сложно, но обрабатывается в связанной модели контейнера.

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

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

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


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

ThorSummoner
источник
1

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

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

surfasb
источник
1

Используйте расширение TabsOutliner - это даст вам простой способ «закрыть» вкладки, фактически не удаляя их из контекста и текущего списка сеансов. Очень полезно.

Расширение вкладок Outliner

omnray
источник
0

Убейте процесс табуляции, который использует большое количество памяти (я замечаю, что что-либо с Flash имеет тенденцию использовать 500 МБ +). Вы можете просто перезагрузить мертвые вкладки позже, когда захотите возобновить работу с ними.

Bigbio2002
источник
0

TabMemFree автоматически приостановит неактивные вкладки. Вы можете определить, как долго, прежде чем он приостановит неактивные вкладки, минимум за 15 минут. Вы также можете поручить игнорировать закрепленные вкладки.

Tab Wrangler - еще одно расширение, которое следует учитывать, которое автоматически приостанавливает неактивные вкладки, если вы ищете немного больше контроля. Как и в случае с TabMemFree, вы можете определить период времени, в течение которого вкладка считается неактивной, и настроить ее на игнорирование закрепленных вкладок, но у вас есть дополнительная опция для блокировки дополнительных вкладок и синхронизации настроек вкладок между различными компьютерами.

Даниил
источник