Mozilla Firefox

In other news, alaltăieri a apărut SeaMonkey 2.0, se laudă că are small memory footprint. O să încerc să-l folosesc, să vedem ce şi cum. Sunt curios dacă merge XMarks pe el.
LE: nu merge :frown: - asta înseamnă import manual de bookmarks şi credentials. Grrr...
 
Pai ai bube la Firefox. :biggrin:
La mine e OK. :tongue:
 

Attachments

  • cache.jpg
    cache.jpg
    139.5 KB · Views: 30
Vista, spre exemplu, ocupa cam 80-90% din memoria disponibila mai ales pe sistemele cu putin RAM (1GB). Am testat pe o statie cu 48GB de RAM si tot a reusit sa ocupe 10GB desi nu facea nimic. Dar acolo stiam ca in momentul in care porneam inca un proces care lua 100MB, cantitatea de memorie ocupata ramanea tot la 80-90%. Adica elibera spatiul rezervat de cacheuri si lasa loc respectivului proces. In cazul FF, daca pe sistemul ala cu 480MB de RAM din care 270 deja luati dau drumul la inca un proces de 100MB o sa o ia in barba. FF-ul nu o sa elibereze nici un byte, Windows-ul incearca sa faca tot ce poate - adica sa treaca in pagefile tot ce e neesential dar mai ai performanta din parti.

Dar pe Windows nu se poate vedea informaţia asta despre memorie? Pe Linux îţi spune clar: atîta în uz efectiv, atîta cached, atîta buffers de disc. Fără ea ne dăm degeaba cu presupusul.

Uite, o să fac un test. Lucrez zilnic minim 8 ore pe Linux, cu 2xFirefox pornite. O să fac un restart luni, apoi în loc să sting calculatorul în fiecare zi o să-i fac standby zilnic timp de-o săptămînă, şi vedem ce se întîmplă cu memoria dpdv al ce-am zis mai sus (user/cache/buffers/free/swap) în general, şi cu firefox-urile în particular.

Ba, şi mai elegant, pot da drumul la un rrdtool în spate care să adune date, şi la sfîrşitul săptămînii facem şi-un grafic frumos.

Am un tipar de utilizare suficient de divers (deschid multe tab-uri, vizitez tot felul de site-uri, inclusiv cu flash-uri şi alte bălării, etc.)
 
Um, când pui sistemul în standby strange things happen în memorie. Tot ce zic este că testul respectiv s-ar putea să nu aibă nici o semnificaţie. Ori laşi sistemul pornit, împreună cu Firefox, ori toţi ceilalţi vor trebui să pună sistemul în standby în fiecare seară timp de o săptămână :smile:
 
Dar pe Windows nu se poate vedea informaţia asta despre memorie? Pe Linux îţi spune clar: atîta în uz efectiv, atîta cached, atîta buffers de disc. Fără ea ne dăm degeaba cu presupusul.
AFAIK in Windows e mai greu sa vezi altceva decat memoria in uz efectiv (total ocupat) si memoria per proces. Cu Spotlight poti sa mai intuiesti buffere sau cached. Iar perfmon genereaza tot felul de rapoarte criptice pe care le pot citi cu acelasi drag si spor cu care as numara firele de par din barba purtand manusi de box.
Dar partea aia nu ma intereseaza, nu ma dernjeaza spatiul pe care si-l rezerva sistemul de operare ci cel pe care il fura aplicatia. Dupa cum ziceam si mai sus am incredere in mecanismele Windows-ului si sunt sigur ca spatiul ala nu e ocupat "pentru ca se poate". Si oricum el este eliberat la nevoie. Nu am vazut nici un OS sa tina memoria plina de caches si buffere si sa prefere sa faca paging sau swapping decat sa o elibereze pentru o aplicatie care o cere.

Ma intereseaza spatiul ocupat de Firefox, iar FF nu elibereaza spatiul ocupat nici daca alte aplicatii au nevoie de el. Dupa ce m-am jucat o vreme cu el si a ajuns sa ocupe peste 200MB nu a mai scazut nici dupa ce am inchis toate taburile si l-am lasat asa. Asta inseamna ca mi-a blocat 200MB inutil, spatiu pe care celelalte programe nu au cum sa il foloseasca. Adica o chestie radical diferita fata de ce face un OS (fie el Linux sau Windows) care umple memoria cu cache-uri si buffere numai cu scopul de a imbunatati raspunsul sistemului dar o si elibereaza in momentul in care e ceruta de alte aplicatii. In cazul asta de FF. Practic pe un sistem cu putin RAM FF forteaza Windowsul sa faca swapping la greu numai ca sa poata el ocupa 200+MB ca sa afiseze o pagina alba.

Solutia recomandata de indivizii de la Mozilla Foundation este sa pui extensia Session Saver si sa repornesti aplicatia periodic. Asta ca sa nu spun ca ei nu muncesc sa gaseasca o solutie.

wirespot, nu stiu daca FF se comporta la fel pe orice sistem de operare. Dar probabil merita sa incerci.

L.E. Ca sa exemplific un pic ce spuneam despre sistemele de operare si mecanismele lor de gestionare a memoriei. Am atasat 2 poze. Una este facuta cu statia pornita de 1 minut si jumatate, cealalta cu statia pornita 1 ora si jumatate (aproximativ). Ignorati numarul de core-uri, m-am jucat si cu HT-ul din BIOS intre screenshoturi.
Atunci cand sunt ocupati 10GB de RAM sistemul nu facea mai nimic. Pornisem un RealTemp, un Cpu-Z, plus ceva activitati de rutina in acea ora si ceva. Imediat dupa asta am pornit cateva procese menite sa ocupe (artificial) restul memoriei. Windowsul nu a avut nici o problema sa elibereze memoria pana cand a ajuns pe la 2GB si un pic.

Ce metoda ergonomica exista prin care sa pot forta FF sa elibereze memoria ocupata? Nu Windows-ul, FF sa elibereze memoria pe care nu o foloseste. Tot accentuez ideea asta penreu ca di diverse motive vad ca lumea tot intelege ca e vorba de RAM-ul ocupat per total, nu de memoria despre care vorbesc eu: cea ocupata strict de FF si atat.
 

Attachments

  • r1.png
    r1.png
    94.1 KB · Views: 21
  • r2.png
    r2.png
    67 KB · Views: 20
Gata si pozele. Pana am terminat de scris am uitat de ele :biggrin:. Trebuie sa invat sa ma exprim mai concis :tongue:.
 
E simplu: nu poti sa obligi un proces sa elibereze o parte din memorie. Pentru ca numai el stie la ce foloseste acea memorie, iar daca el n-are chef (a se citi: a uitat) sa dezaloce, aia e, ramane ocupata pana inchizi procesul. Firefox e unmanaged code, intre el si OS nu exista un runtime care sa aiba garbage collector and stuff, daca nu se apeleaza explicit dezalocarea pe obiectele care nu mai sunt folosite, se aduna in memorie, care tot creste pana se buseste tot.

Eu suspectez ca o mare parte din vina o au dezvoltatorii de plugin-uri, pentru ca pe aia chiar nu-i controleaza nimeni. Eu folosesc destul de multe plugin-uri si nu ma mai mir cand firefox ajunge, vorba ta, primul in lista de procese, doar ca la mine in lista de procese mai sunt si masini virtuale cu 1GB de memorie alocata, iar firefox reuseste sa le depaseasca dupa un uptime de 2 zile. Iar atunci cand ocupa 1 giga si iti zice cache-ul lui ca are maxim 30 de mega, e cam nasol.
 
Um, când pui sistemul în standby strange things happen în memorie.
Nu se întâmplă nimic cu conținutul memoriei.

AFAIK in Windows e mai greu sa vezi altceva decat memoria in uz efectiv (total ocupat) si memoria per proces. Cu Spotlight poti sa mai intuiesti buffere sau cached.

În Windows ai un singur cache, raportat în tab-ul Performance. Mai ai memorie per proces, memorie liberă iar diferența până la Total RAM e dată de shared dll's încărcate. Astea pot fi încărcate de orice aplicație și OS le ține încărcate "poate le mai folosește cineva" până are nevoie să elibereze memorie și atunci le descarcă după o statistică a utilizării, cele mai puțin utilizate și mai vechi ies primele.

System cache nu o influențează memoria liberă și nu se raportează ca memorie ocupată pentru că OS reduce system cache instant când are nevoie de free RAM pentru o aplicație care cere așa ceva, e foarte volatil și întotdeauna disponibil.

Buffere și cache dintr-o aplicație sunt raportate în procesul respectiv, e memorie privată a acelui proces indiferent la ce o folosește și se eliberează când procesul e închis.

Miahi probabil are dreptate, orice puști care a citit un manual despre bazele programării poate să scrie un plugin, dar de memory leaks probabil puștiul nici nu a auzit, e vreo 2-3 manuale mai încolo.
 
System monitor din Windows >=XP are deficiente mari in a arata marimea cache-ului.
Va recomand AbpMon ca sa va faceti o idee despre cum este folosita memoria, dar aveti grija ca si programul asta include cache-ul la scriere in categoria OS+App, nu Cache.
 
Da. Cache-ul la scriere nu este contorizat nicaieri. Nici read-ahead-ul.
Iar bytes written /second indica scrierea in cache, nu scrierea efectiva pe disc.
 
System cache din Windows este folosit de sistemul de operare pentru diverse aplicații, dacă aplicațiile au și un sistem propriu de caching e inclus în memoria consumată de aplicație.

Read-ahead e inclus în System cache dacă e făcut de Windows, la fel și cache-ul la scriere.
 
iar diferența până la Total RAM e dată de shared dll's încărcate
Ieri am incercat sa fac un astfel de calcul, dar la cateva zeci de procese m-am pierdut la numarat. As fi vrut sa fie o metoda mai rapida de calcul sau macar sa pot sa trec in excel toate valorile din taskmgr.
Pe sistemele cu putin RAM (gen cel cu 512MB de care spuneam mai sus) folosesc mereu cheia de registry AlwaysUnloadDLL.
Buffere și cache dintr-o aplicație sunt raportate în procesul respectiv, e memorie privată a acelui proces indiferent la ce o folosește și se eliberează când procesul e închis.
Probabil ca si FF incearca sa foloseasca buffere si cache pentru o performanta mai buna dar spre deosebire de Windows nu stie sa le si goleasca. In conditiile astea mi s-ar parea normal sa aiba un algoritm pe baza caruia sa calculeze la cata memorie sa se limiteze pentru ele. Ceva relativ la cantitatea totala de RAM disponibila sistemului, nu la cat e instalat, nu o valoare absoluta si in nici un caz nelimitat. Sau chiar si o chestie time-based prin care sa flush-uiasca totul fara sa restartez eu aplicatia. Adica daca tot solutia lor este sa repornesti procesul, deci sa "resetezi" toate acele zone tampon "aducatoare de performanta" de ce naiba nu pot sa o implementeze intr-un mod cat mai transparent pentru utilizator?
Cred ca le trebuie niste reguli mai stricte de compliance pentru extensii, daca si ele sunt parte a problemei. Inca o intrebare pentru programatori: Aplicatia (FF) nu poate sa limiteze cantitatea de memorie ceruta de o extensie?

Spuneam si mai sus, e doar un browser. Si uneori extensiile nu pot fi aduse in discutie pentru ca nu sunt instalate dar comportamentul FF e acelasi.
 
Pe sistemele cu putin RAM (gen cel cu 512MB de care spuneam mai sus) folosesc mereu cheia de registry AlwaysUnloadDLL
Si diferentele sunt observabile cu ochiul liber?
Intreb si io ca cica de la 2000 incoace cheia respectiva nu mai e suportata de OS. :biggrin:
 
Inca o intrebare pentru programatori: Aplicatia (FF) nu poate sa limiteze cantitatea de memorie ceruta de o extensie?
Daca limitezi cantitatea de memorie pe o extensie, iar ea cere memorie peste limita aia, ori crapa extensia, ori crapa tot browser-ul. Alta optiune n-ai.

Intr-un mediu unmanaged, orice octet cerut pe care uiti sa-l dezaloci cand ai terminat cu el ramane ca memorie ocupata pana se opreste procesul. Exista tool-uri pentru determinarea de astfel de memory leaks, insa intr-o aplicatie mare e al naibii de greu de gasit toate problemele de memorie, mai ales in programele C, unde poti adresa un octet din memorie in orice mod vrei tu, si poti zapaci usor uneltele care ar trebui sa te ajute.

O solutie pentru asta e cea de la Chrome, cu proces separat pentru fiecare pagina. Ai inchis tab-ul, a murit procesul destinat lui, cu tot gunoiul care s-a adunat. Iar aici te bazezi pe cache-ul OS-ului, sa-ti deschida rapid inca o instanta a aceluiasi proces.
 
Mă holbam acuma la Firefox-ul meu, deschis de muultă vreme, şi în memorie ocupă 295 MB. Dar în about:cache, zice:

Memory cache device

Number of entries: 501
Maximum storage size: 32768 KiB
Storage in use: 1112 KiB
Inactive storage: 1112 KiB
So, cache-ul lui ocupă 1 MB în memorie, şi ca amator într-ale ocupării memoriei mă gândesc că restul e programul în sine + extensii + plugins. Am 10 extensii, 16 plugins (din care 3 Java-related, WTF) şi 0 teme. Ar fi fain să existe un tool care să afişeze cât ocupă fiecare extensie/plugin pe-acolo. Măcar să ştim ce papă memorie :smile:

LE: fază tare: Am restartat Firefox, a pornit cu o ocupare memorie de 150 MB (10 tabs open). Am dat disable la toate addon-urile, am restartat Firefox din nou... ocupare: 162 MB. WTF.
LLE: enable all addons, restart... 147 MB ocupaţi. Go figure :smile: Bine, în timp pun pariu că se umflă iar, dar tot e dubios ce se întâmplă.
 
Si diferentele sunt observabile cu ochiul liber?
Intreb si io ca cica de la 2000 incoace cheia respectiva nu mai e suportata de OS. :biggrin:
Mai nu stiu. :smile: Eu o folosesc din inertie si sper sa aiba efect. Daca e sau nu sesizabil nu as putea sa iti spun pentru ca nu am folosit prea mult acel sistem.

Cred ca alora de la Mozilla le-ar prinde bine un program de "atestare" a extensiilor. Cele care respecta anumite standarde sa primeasca o certificare, ceva care sa imi arate mie ca utilizator ca extensia aia e "ok".
 
Back
Top