Обмеження використання оперативної пам’яті в Chrome?


22

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

  • Чому так? У плагінах протікає пам'ять?
  • Чи є спосіб налаштувати Chrome так, щоб одна вкладка / сторінка не використовувала більше встановленого обсягу оперативної пам’яті?

Дякую.


скільки у вас оперативної пам’яті?
Baarn

@OverTheRainbow - Чому б не розглянути сторінку Snooze - chrome.google.com/webstore/detail/…
PeanutsMonkey,

У мене є 4 Гб, що достатньо, за винятком випадків, коли деякі веб-сторінки захоплюють 500 Мб. Дякуємо за посилання на сторінку Snooze та Session Buddy.
OverTheRainbow

Відповіді:


-2

Я думаю, вам слід просто вибрати стільки оперативної пам’яті, скільки може працювати ваша ОС. Не слід обмежувати використання оперативної пам’яті Chrome, оскільки це просто зіпсує ваше серфінг у мережі. Якщо припустити, що ви використовуєте комп’ютер для серфінгу в Інтернеті більшу частину часу, ви повинні дозволити Chrome отримати всі необхідні ресурси для того, щоб забезпечити ефективність, яку ви хочете, щоб ви одночасно "насолоджувались" роботою цих вкладок.

Я не думаю, що існує спосіб обмежити використання оперативної пам’яті кожної окремої вкладки, але ви можете повністю обмежити використання Chrome. Послухайте:

/programming/192876/set-windows-process-or-user-memory-limit

Я хотів би цього не робити, якби я був ти, якщо я хочу плавного веб-серфінгу.


16
Це насправді не рішення, коли у вас немає контролю над вмістом комп'ютера, який ви використовуєте (тобто робочий комп'ютер)
Gnoupi

у цьому випадку було б добре, якби був спосіб встановити "пріоритети" на вибрані вкладки (наприклад, активна вкладка отримує більшу частину пам'яті), оскільки з обмеженою оперативною пам’яттю та з комп'ютером ви не володієте користувачем, це той, який має адаптуватися (зменшуючи кількість відкритих вкладок), що є контрпродуктивним.
WikiWitz

4
Chrome з'їдає стільки оперативної пам’яті, скільки отримує, тому додавання більшої кількості оперативної пам’яті - це те саме, що ставити більше вогню в дрова, воно спалює більше.
JDuarteDJ

5
@WikiWitz, ви недооцінюєте кількість споживаної оперативної пам’яті Chrome. У мене 16 Гб фізичної оперативної пам’яті, і це все ще недостатньо.
Pacerier

2
"Якщо припустити, що ви використовуєте комп’ютер для серфінгу в Інтернеті більшу частину часу", - це головна думка. Не все - це Chromebook.
Пісквор

12
  1. Я написав програму Python 2.5, яка вбиває хромовані рендери, коли вони використовують більше заданої кількості пам'яті. Я запускаю цю програму під 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 поводиться з тим, що рендерів вбивають? Яку поведінку проявляє вкладка після вбивства рендера? О, я щойно побачив коментар вашого сеансового приятеля, тож це означає, що Chrome іноді не може їх відновити, добре. Це трапляється часто? Це дійсно акуратно, дякую!
Метью

1
@Human Вкладки, які використовували той процес рендерінгу, який був убитий, стають збійними вкладками. Але, хоча вищезазначений сценарій чудово працює з Chrome 12, у більш пізніх версіях він також вбиває розширення, які на відміну від Chrome 12 виконуються в процесах візуалізації, а не в розширеннях.
Ден Д.

@Human Можна втратити останні вкладки, якщо не вдалося натиснути відновити . Також навіть якщо у вас є Last Tabsфайл, відновити вкладки з цього файлу неможливо. Я давно намагався визначити формат і витягнути з нього URL-адреси. Це не було успішно. І я більше довіряю SQLite, ніж двійковому формату, який Chrome використовує для зберігання вкладок поточного сеансу, і тому SB краще.
Ден Д.

@DanD., Цей сценарій безпечний? Чи в кінцевому підсумку вийде з ладу весь Chrome?
Pacerier

@Pacerier Так, за винятком випадків, коли Chrome все ще знаходиться у фазі завантаження вкладки після перезавантаження, це не так.
Ден Д.

4

Єдине, що я бачив на сьогоднішній день, що це може зробити, - це запустити хром всередині контейнера та обмежити таран контейнера .

Однак це має деякі основні застереження,

  • Запуск хрому ускладнюється налаштуваннями докерізу та послідовністю запуску

  • для одного, Chrome вже використовує контейнери ядра, щоб пісочниці його ниток; тож вам доведеться запустити контейнер з якоюсь привілею root, яка дозволяє це працювати. Це можна обійти, і пов'язана модель контейнера це робить. (це робить практично все, що потрібно)

  • Ви майже напевно втратите прискорення gpu

  • отримання звуку для роботи є складним, але обробляється у пов'язаній моделі контейнера.

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

Але в кінцевому рахунку це спрацює.

Мені більше цікаво застосувати ці рамкові обмеження до додатків Electron Shell, які не мають попередньо створених зображень докера, щоб передати їх для вас.


Немає теми, але хочу зазначити, що Firefox дуже добре поводиться на обмеженому обладнанні, але я не вважаю це справжньою відповіддю.


Я повинен оновити цю відповідь, щоб розповісти більше про те, як контейнери - це лише інтерфейс cgroup, ви можете використовувати cgroups самостійно, щоб виконати те саме
ThorSummoner

1

Це не обов'язково плагін. Зауважте, що веб-сторінки більше не є статичними. На деяких веб-сторінках триває нетривіальна кількість асинхронних дій. Додайте активність із плагінів, і ви отримали кілька невідомих.

Найкращий засіб, який я знайшов - це вбити веб-сторінку та перезавантажити її. AFAIK, немає можливості обмежити об'єм оперативної пам'яті, яку використовує веб-сторінка.


1

Використовуйте розширення TabsOutliner - це дасть вам простий спосіб "закрити" вкладки, фактично не видаляючи їх зі свого контексту та поточного списку сесій. Дуже корисний.

Розширення вкладок


0

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


0

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.