Firefox: Полное руководство по управлению памятью и диском
Введение
Firefox — один из самых гибких браузеров в плане управления ресурсами. В отличие от Chrome, который создаёт отдельный процесс для каждой вкладки, Firefox использует более сложную и настраиваемую архитектуру. В этой статье разберём как Firefox работает с RAM и диском, и как оптимизировать его под свои нужды.
Архитектура процессов Firefox
Типы процессов
Firefox использует многопроцессную архитектуру (Electrolysis/e10s):
about:processes
Parent Process (главный)
├── Web Content (вкладки, по умолчанию 8 процессов)
├── WebExtensions (расширения)
├── GPU Process (графика)
├── RDD Process (декодирование медиа)
├── Socket Process (сеть)
└── Utility Process (вспомогательный)
Настройка количества процессов контента
Откройте about:config и найдите:
dom.ipc.processCount = 8 // макс. процессов для вкладок
dom.ipc.processCount.webIsolated = 4 // процессов для изолированных сайтов
fission.autostart = true // изоляция по сайтам (Site Isolation)
Совет: Если у вас мало RAM (≤8GB), уменьшите
dom.ipc.processCountдо 4. Это снизит потребление памяти, но вкладки будут влиять друг на друга.
Мониторинг: about:memory
Главный инструмент диагностики памяти в Firefox — страница about:memory.
Основные функции
about:memory — Кнопки
Measure — снять текущий снимок памяти
Free memory — принудительная очистка (GC + CC + minimize)
GC — запустить Garbage Collection
CC — запустить Cycle Collection
GC + CC — запустить оба сборщика
Minimize memory use — агрессивная минимизация памяти
Save reports — сохранить отчёт в JSON
Чтение отчёта
После нажатия “Measure” вы увидите дерево памяти:
Пример вывода about:memory
Main Process
├── explicit // явно выделенная память
│ ├── heap-allocated // куча
│ │ ├── js // JavaScript память
│ │ │ ├── zone // JS зоны
│ │ │ └── gc-heap // GC куча
│ │ ├── images // изображения
│ │ └── media // аудио/видео буферы
│ └── non-heap // не-куча (mmap и т.д.)
├── resident // физическая RAM
├── vsize // виртуальная память
└── resident-unique // уникальная память процесса
Web Content (pid 12345) [https://example.com]
├── explicit/window-objects // DOM объекты
├── explicit/js-non-window // JS вне окон
└── ...
Ключевые метрики
| Метрика | Описание |
|---|---|
resident | Реальное использование физической RAM |
heap-allocated | Выделено в куче (malloc) |
js/gc-heap | Память JavaScript — часто главный потребитель |
images | Декодированные изображения |
resident-unique | Память, не разделяемая с другими процессами |
Мониторинг: about:processes
Более наглядный способ увидеть потребление по вкладкам:
about:processes — колонки
Name — имя процесса/вкладки
Type — тип (web, extension, gpu...)
Memory — текущее потребление RAM
Threads — количество потоков
CPU (%) — загрузка процессора
Совет: Кликните на вкладку в about:processes — можно закрыть зависший процесс без закрытия всего браузера!
Управление вкладками
Tab Unloading (выгрузка вкладок)
Firefox автоматически выгружает неактивные вкладки при нехватке памяти:
about:config — Tab Unloading
browser.tabs.unloadOnLowMemory = true // включить выгрузку
browser.low_commit_space_threshold_mb = 200 // порог свободной памяти
browser.low_commit_space_threshold_percent = 5 // или в процентах
Приоритеты вкладок
Firefox выгружает вкладки по приоритету:
- Вкладки, которые давно не посещались
- Вкладки без аудио/видео
- Вкладки без форм с введёнными данными
- Вкладки, не закреплённые (pinned)
Ручная выгрузка
Правый клик на вкладке → Unload Tab (в новых версиях Firefox 105+)
Или через консоль браузера (Ctrl+Shift+J):
// Выгрузить текущую вкладку
gBrowser.discardBrowser(gBrowser.selectedTab);
// Выгрузить все фоновые вкладки
for (let tab of gBrowser.tabs) {
if (!tab.selected) gBrowser.discardBrowser(tab);
}
Расширения для управления вкладками
- Auto Tab Discard — автовыгрузка по таймеру
- Tab Suspender — приостановка вкладок
- OneTab — сворачивание всех вкладок в список
Дисковый кэш
Настройки кэша
Firefox кэширует данные на диск для ускорения загрузки:
about:config — Disk Cache
browser.cache.disk.enable = true // включить дисковый кэш
browser.cache.disk.capacity = 1048576 // размер в КБ (1GB)
browser.cache.disk.smart_size.enabled = true // автоматический размер
browser.cache.disk.parent_directory = "" // путь к кэшу (по умолчанию профиль)
Перенос кэша на RAM-диск
Для SSD или для скорости можно переместить кэш в RAM:
Linux — tmpfs:
# /etc/fstab
tmpfs /tmp/firefox-cache tmpfs nodev,nosuid,size=512M 0 0
# about:config
browser.cache.disk.parent_directory = "/tmp/firefox-cache"
Windows — ImDisk:
:: Создать RAM-диск R: размером 512MB
imdisk -a -s 512M -m R: -p "/fs:ntfs /q /y"
:: about:config
browser.cache.disk.parent_directory = "R:\\firefox-cache"
Только RAM-кэш (без диска)
about:config
browser.cache.disk.enable = false // отключить диск
browser.cache.memory.enable = true // включить память
browser.cache.memory.capacity = 524288 // 512MB в КБ
// -1 = автоматически определить размер
Контроль Swap
Почему Firefox уходит в swap?
Firefox может занимать много виртуальной памяти, даже если не использует её активно. Система может выгрузить неактивные страницы в swap.
Linux: настройка swappiness
# Текущее значение (по умолчанию 60)
cat /proc/sys/vm/swappiness
# Уменьшить агрессивность swap (0-100)
sudo sysctl vm.swappiness=10
# Постоянно — /etc/sysctl.conf
vm.swappiness=10
Linux: cgroups для ограничения памяти Firefox
# Запустить Firefox с лимитом 4GB RAM
systemd-run --user --scope -p MemoryMax=4G firefox
# Или создать сервис
# ~/.config/systemd/user/firefox-limited.service
[Service]
MemoryMax=4G
ExecStart=/usr/bin/firefox
Windows: Process Lasso / System settings
В Windows нет прямого контроля swap для процесса, но можно:
- Увеличить pagefile
- Использовать Process Lasso для приоритезации
- Ограничить Working Set через PowerShell
# Принудительно сбросить рабочий набор Firefox
$firefox = Get-Process firefox
foreach ($p in $firefox) {
[System.Runtime.InteropServices.Marshal]::
SetProcessWorkingSetSize($p.Handle, -1, -1)
}
Session Restore и диск
Как работает восстановление сессии
Firefox периодически сохраняет состояние всех вкладок на диск:
~/.mozilla/firefox/[profile]/
├── sessionstore.jsonlz4 // текущая сессия (сжатый JSON)
├── sessionstore-backups/
│ ├── recovery.jsonlz4 // последний автосейв
│ ├── recovery.baklz4 // предыдущий автосейв
│ ├── previous.jsonlz4 // предыдущая сессия
│ └── upgrade.jsonlz4-* // бэкап перед обновлением
Настройки автосохранения
about:config
browser.sessionstore.interval = 15000 // интервал сохранения (мс)
browser.sessionstore.max_tabs_undo = 25 // макс. закрытых вкладок
browser.sessionstore.max_windows_undo = 3 // макс. закрытых окон
browser.sessionstore.privacy_level = 0 // 0=всё, 1=без https, 2=никогда
Совет: Увеличьте
browser.sessionstore.intervalдо 60000 (1 минута) чтобы снизить нагрузку на диск, особенно на SSD.
Garbage Collection
Как работает GC в Firefox
SpiderMonkey (JS-движок Firefox) использует инкрементальный сборщик мусора:
- Incremental GC — сборка по частям, без долгих пауз
- Generational GC — разделение на молодое/старое поколение
- Compacting GC — дефрагментация памяти
Настройки GC
about:config
javascript.options.mem.gc_incremental = true // инкрементальный GC
javascript.options.mem.gc_per_zone = true // GC по зонам
javascript.options.mem.gc_incremental_slice_ms = 5 // макс. пауза (мс)
javascript.options.mem.high_water_mark = 128 // порог для GC (MB)
javascript.options.mem.gc_allocation_threshold_mb = 30 // GC после выделения
Cycle Collection
Cycle Collector освобождает циклические ссылки между JS и DOM:
about:config
dom.cycle_collector.incremental = true // инкрементальный CC
javascript.options.mem.gc_compacting = true // включить компактинг
Firefox Profiler
Для глубокого анализа используйте встроенный профилировщик:
Запуск профилировщика
1. Откройте about:profiling
2. Или установите расширение Firefox Profiler
3. Или нажмите Ctrl+Shift+1 (если включено)
Выберите пресет:
- Nightly: полный анализ
- Web Developer: фокус на JS
- Media: аудио/видео
- Memory: утечки памяти
Memory профилирование
about:profiling — Memory preset
Features to enable:
☑ Memory Track Allocations — отслеживание выделений
☑ Native Allocations — нативные выделения
☑ Memory Pressure — события нехватки памяти
Записать → Остановить → Анализ на profiler.firefox.com
Оптимизация для слабых машин
Профиль “минимальное потребление”
about:config — Low Memory Profile
// Процессы
dom.ipc.processCount = 2
fission.autostart = false
// Кэш
browser.cache.memory.capacity = 65536 // 64MB
browser.cache.disk.capacity = 262144 // 256MB
// Сессия
browser.sessionstore.interval = 120000 // 2 минуты
browser.sessionstore.max_tabs_undo = 5
// GC агрессивнее
javascript.options.mem.high_water_mark = 64
javascript.options.mem.gc_allocation_threshold_mb = 15
// Выгрузка вкладок
browser.tabs.unloadOnLowMemory = true
browser.low_commit_space_threshold_mb = 400
// Изображения
image.mem.decode_bytes_at_a_time = 16384
gfx.webrender.all = false // отключить WebRender на слабом GPU
Решение проблем
Firefox потребляет слишком много RAM
- Откройте
about:processes— найдите прожорливую вкладку - Откройте
about:memory→ “Minimize memory usage” - Проверьте расширения — отключите по одному
- Очистите кэш: Settings → Privacy → Clear Data
- Создайте новый профиль:
firefox -P
Утечки памяти
Диагностика утечек
1. about:memory → Measure (запомните значения)
2. Подождите 10-15 минут, не закрывая вкладки
3. about:memory → Measure (сравните)
4. Если explicit/js растёт — утечка в JS
5. Если explicit/images — утечка в изображениях
6. Сохраните отчёт и отправьте в bugzilla.mozilla.org
Медленный старт Firefox
- Отключите “Restore previous session” если много вкладок
- Используйте
about:profilesдля создания чистого профиля - Проверьте
about:performanceна медленные расширения
Шпаргалка команд
Полезные about: страницы
about:memory — детальное использование памяти
about:processes — процессы и вкладки
about:performance — производительность вкладок
about:config — все настройки
about:support — системная информация
about:networking — сеть и DNS
about:cache — статистика кэша
about:profiling — профилировщик
Горячие клавиши
Shift+Esc — Диспетчер задач Firefox
Ctrl+Shift+J — Browser Console
Ctrl+Shift+M — Responsive Design Mode
Ctrl+Shift+P — Приватное окно
Ctrl+Shift+Del — Очистить данные
Заключение
Firefox предоставляет огромное количество инструментов для контроля памяти. Используйте about:memory для диагностики, настройте about:config под свои нужды, и Firefox будет работать эффективно даже на слабых машинах.
Bookmark’ните эту статью — пригодится при отладке!