20

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

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

Спасибо.

6 ответов6

11
  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 не может их восстановить.

3

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

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

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

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

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

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

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

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

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


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

1

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

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

1

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

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

0

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

-1

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .