Jakie masz pytanie?

lub

Dlaczego przeglądarki takie jak Mozilla, nawet przy niewielkiej liczbie otwartych kart, potrafią cyklicznie się zawieszać i nieoczekiwanie wyłączać, a po zamknięciu zasobożernego procesu jego zasoby są niemal natychmiast przejmowane przez pozostałe procesy przeglądarki?

problemy z pamięcią RAM zawieszanie się przeglądarki wieloprocesowa architektura przeglądarki
avatar

Gość (37.30.*.*)



Odpowiedź:

Wiele osób doświadcza frustrującej sytuacji, w której przeglądarka internetowa – mimo otwarcia zaledwie kilku kart – zaczyna „haczyć”, przestaje reagować na polecenia, a ostatecznie po prostu się zamyka. Problem ten dotyczy nie tylko Mozilli Firefox, ale i innych nowoczesnych przeglądarek. Choć intuicja podpowiada nam, że trzy karty nie powinny obciążać komputera, rzeczywistość pod maską programu jest znacznie bardziej skomplikowana. Przyczyną nie jest zazwyczaj sama liczba stron, ale to, co się na nich dzieje oraz sposób, w jaki współczesne silniki przeglądarek zarządzają dostępną pamięcią RAM.

Architektura wieloprocesowa, czyli dlaczego jeden proces to za mało

Dawniej przeglądarki działały jako jeden wielki proces. Jeśli jedna strona się zawiesiła, „wywalało” cały program. Aby temu zapobiec, twórcy Mozilli wprowadzili architekturę wieloprocesową (znaną jako Electrolysis lub e10s). Obecnie Firefox dzieli zadania na proces nadrzędny (interfejs), procesy treści (strony WWW), procesy procesora graficznego (GPU) oraz procesy rozszerzeń.

Kiedy zamykasz zasobożerny proces (np. kartę z ciężką grą przeglądarkową lub Facebookiem), system operacyjny zwalnia pamięć RAM. Jednak przeglądarka, widząc nagły przypływ wolnych zasobów, często natychmiast je „zagospodarowuje”. Dzieje się tak, ponieważ nowoczesne silniki JavaScript (takie jak SpiderMonkey w Firefoksie) oraz mechanizmy buforowania dążą do maksymalizacji wydajności. Wolna pamięć RAM to dla przeglądarki „zmarnowana” pamięć. Zamiast zostawić ją pustą, przeglądarka wykorzystuje ją do przechowywania większej ilości danych w pamięci podręcznej, co ma przyspieszyć przełączanie się między pozostałymi kartami.

Dlaczego przeglądarka zacina się przy kilku kartach?

Cykliczne zawieszanie się przy niewielkiej liczbie kart zazwyczaj nie wynika z braku pamięci, ale z konfliktów na poziomie instrukcji lub błędów w skryptach. Oto najczęstsze powody:

  • Wycieki pamięci w rozszerzeniach: To najczęstszy winowajca. Nawet jedno, źle zoptymalizowane rozszerzenie (np. bloker reklam z ogromną bazą filtrów) może powodować tzw. wycieki pamięci (memory leaks). Proces rozszerzenia prosi o więcej zasobów, ale nigdy ich nie oddaje, co prowadzi do „zadławienia” całej przeglądarki.
  • Akceleracja sprzętowa: Przeglądarki wykorzystują kartę graficzną (GPU) do renderowania stron. Jeśli sterowniki karty graficznej są nieaktualne lub występuje konflikt na linii przeglądarka-system, dochodzi do krótkich zamrożeń obrazu (freezów) lub nagłych zamknięć aplikacji (crashy).
  • Ciężkie skrypty śledzące: Strona, która wydaje się prosta, może w tle uruchamiać dziesiątki skryptów analitycznych i reklamowych. Jeśli jeden z nich wpadnie w nieskończoną pętlę, procesor zostanie obciążony w 100%, co odczujemy jako zawieszenie przeglądarki.
  • ** Garbage Collection (Oczyszczanie pamięci):** Silniki JavaScript muszą co jakiś czas czyścić nieużywane obiekty z pamięci. Ten proces nazywa się Garbage Collection. Jeśli strona jest bardzo dynamiczna, proces ten może uruchamiać się zbyt często i trwać zbyt długo, co powoduje charakterystyczne „szarpnięcia” podczas przewijania.

Ciekawostka: Dlaczego RAM znika tak szybko?

Czy wiesz, że nowoczesne przeglądarki stosują technikę zwaną „speculatively pre-rendering”? Przeglądarka próbuje przewidzieć, w który link klikniesz, i zaczyna go ładować w tle, zanim jeszcze to zrobisz. To sprawia, że internet wydaje się szybszy, ale drastycznie zwiększa zużycie zasobów, nawet jeśli masz otwartą tylko jedną stronę.

Co się dzieje po zamknięciu „ciężkiego” procesu?

Zjawisko, w którym inne procesy natychmiast przejmują zasoby po zamkniętym procesie, wynika z mechanizmu zarządzania priorytetami. System operacyjny (Windows, macOS czy Linux) zawsze stara się utrzymać pewien bufor pamięci. Gdy zamykasz proces zużywający 1 GB RAM, pozostałe procesy Firefoksa, które wcześniej były „tłamszone” przez system, aby nie zabrakło pamięci dla całego komputera, nagle dostają sygnał: „Mamy wolne miejsce!”.

W tym momencie mechanizmy JIT (Just-In-Time compilation) mogą skompilować więcej kodu do pamięci maszynowej, a cache obrazów może zostać rozszerzony, by nie trzeba było ich ponownie pobierać z dysku. To sprawia wrażenie, że zasoby „przeskakują” z jednego miejsca w drugie, podczas gdy w rzeczywistości przeglądarka po prostu optymalizuje swoje działanie pod kątem nowej dostępnej przestrzeni.

Jak zdiagnozować problem w Mozilli?

Jeśli Twój Firefox regularnie sprawia problemy, możesz to sprawdzić bez instalowania dodatkowych narzędzi:

  1. Wpisz w pasku adresu about:processes. To wewnętrzny menedżer zadań przeglądarki, który pokaże Ci dokładnie, która karta lub które rozszerzenie zużywa najwięcej procesora i pamięci.
  2. Wpisz about:memory i kliknij „Minimize memory usage”. Jeśli przeglądarka nagle zacznie działać płynniej, oznacza to, że problemem jest zarządzanie stertą pamięci (heap).
  3. Sprawdź about:crashes, aby zobaczyć raporty o błędach. Często zawierają one informacje o tym, czy przyczyną zamknięcia był błąd sterownika, czy konkretna wtyczka.

Zrozumienie, że przeglądarka to dzisiaj niemal osobny system operacyjny działający wewnątrz Twojego komputera, pomaga zaakceptować fakt, że nawet „pusta” strona wykonuje w tle tysiące operacji na sekundę. Kluczem do stabilności jest zazwyczaj higiena rozszerzeń i dbanie o aktualność sterowników graficznych.

Podziel się z innymi: