Когда я оставляю несколько вкладок открытыми в 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
Я написал программу на 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
Я полагаюсь наСессия Другдля восстановления открытых вкладок, если Chrome не может их восстановить.
решение3
Единственное, что я видел на сегодняшний день, что может это сделать, этозапустить хром внутри контейнераиограничить контейнеры ram.
Однако здесь есть несколько важных оговорок:
Запуск Chrome осложняется настройкой и последовательностью запуска Dockerize
во-первых, Chrome уже использует контейнеры ядра для изоляции своих потоков; поэтому вам нужно запустить контейнер с привилегиями root, которые позволяют этому работать. Это можно обойти, и связанная модель контейнера делает это. (она делает практически все, что нужно)
Вы почти наверняка потеряете ускорение графического процессора.
Заставить работать звук сложно, но это решается с помощью модели связанного контейнера.
Что бы вы ни ожидали увидеть в случае аннулирования гарантии, Chrome крайне не любит, когда его просят не использовать больше оперативной памяти, и будет капризничать и устраивать истерики.
Но в конечном итоге это работает.
Меня больше интересует применение этих ограничений оперативной памяти к приложениям Electron Shell, у которых нет готовых образов Docker, чтобы настроить их для вас.
Не по теме, но хочу отметить, что Firefox очень хорошо себя ведет на ограниченном оборудовании, но я не считаю это реальным ответом.
решение4
Это не обязательно плагин. Обратите внимание, что веб-страницы больше не статичны. На некоторых веб-страницах просто происходит нетривиальное количество асинхронной активности. Добавьте активность от плагинов, и вы получите некоторые неизвестные.
Лучшее средство, которое я нашел, — это закрыть веб-страницу и перезагрузить ее. Насколько мне известно, нет способа ограничить объем оперативной памяти, используемый веб-страницей.