Google Chrome - Foro de ayuda

DEBATE: Consumo excesivo de memoria. Varias pestañas de una web, un solo proceso

jesus alumasa
23/02/12 11:37
Buenas.

Fecha: 23-02-2012
Versión Navegador Chrome: 17.0.963.56 m
Sistema Operativo: Windows XP SP3

Intentaré explicar el título de mi pregunta. Lo he buscado por el foro y no he encontrado nada parecido. Si lo hay discúlpenme. 

He observado que al estar en una web y ciclar en un link que se abre en una nueva pestaña, si es también contenido de la misma web, esas pestañas se ejecutan todas en un mismo proceso. 

Ejemplo: Abrimos gmail, accedemos a docs desde el link superior, abrimos varios documentos docs. Todas esas pestañas se acumulan en un mismo proceso que consumen mucha memoria.

¿Cuál es el problema? Que aunque cerremos algunas pestañas, el proceso sigue ocupando la misma cantidad de memoria (RAM), no la libera, por lo que hasta que no cerremos todas las pestañas pertenecientes al mismo proceso, no se libera la memoria.

Creo que es una de las causas por las que chrome consume mucha memoria RAM. 

Muchos de nosotros, utilizamos varios servicios de google a diario y lo hacemos a través de los links que aparecen en las distintas webs de google. Es por ello que medida que pasa el día, tenemos la memoria RAM por las nubes y tenemos que cerrar el navegador y volverlo a abrir, liberando así toda la memoria.

Aquí demostramos que no siempre cada pestaña corresponde a un proceso.

No siempre ocurre esto, a veces, se abre en otro proceso.

Abro este hilo en el foro para debatir como se podría mejorar.

Respuestas (11)

Alejandro Silvestri
23/02/12 12:37
Interesante.  Me gustaría que aclares dónde viste los procesos ¿en el administrador de tareas de Chrome?
Aporto unos pensamientos: 
  1. los procesos brindan seguridad a las pestañas, para que un sitio maligno no acceda a otras páginas que estás viendo.  Ahora bien, eso no es necesario cuando están en el mismo dominio, porque siempre tienen acceso por norma.
  2. si un proceso tiene mucha memoria "liberable", es decir memoria que no está realmente en uso (porque esas pestañas ya se cerraron, por ejemplo), no ocasiona problemas de performance.  Cuando el sistema operativo (Windows o el que sea) necesita memoria RAM, la libera descargando su contenido al disco duro.  Normalmente elige aquélla porción que menos se usa.  Naturalmente el sistema operativo terminará eligiendo esa memoria "liberable" del proceso, la guardará en disco duro, y no la volverá a leer ya que el proceso en realidad no la necesita.  No debería ser un inconveniente, ya que el espacio de esta memoria en el disco duro no suele ser relevante.
jesus alumasa
24/02/12 0:01
Efectivamente, se puede ver claramente desde el Administrador de tareas de Chrome. Ajustes -> Herramientas -> Administrador de tareas. Además, también se puede comprobar desde el administrador de tareas del propio Windows Control-Alt-Supr.

En cuanto al tema de la memoria virtual de Windows, creo que es un debate aparte que sería muy extenso, porque personalmente nunca creo que eso haya estado conseguido en Windows, sobre todo con procesos enormes. Cuando el Windows necesita liberar memoria y traspasarla al disco duro, casi siempre se encuentra con un disco duro fragmentado y ya sabemos que cuando Windows utiliza el disco duro, no hace otra cosa, se vuelve inestable hasta dar la sensación de estar colgado. Estamos hablando de Windows XP.
Imaginaos: Google Chrome abierto con varios servicios tal y como esta comentado anteriormente.

Desde mi punto de vista creo que Chrome consume demasiada RAM debido a que flash y las extensiones están siempre en memoria. Está claro que si el flash ya está en memoria, es instantáneo la primera vez que se utiliza porque ya está en memoria y no hay que cargarlo desde el disco duro, al igual que las extensiones. 

Pero creo que flash no debería ejecutarse hasta que sea necesario y tampoco aquellas extensiones que no necesitan estar en segundo plano.

Ejemplo de extensiones que necesitan estar en segundo plano: aquellas que necesitan actualizar un contador tipo google reader...
Ejemplo de extensiones que no necesitan ejecutarse en segundo plano: Google Chrome a Phone, Google Translate...

¿Qué opináis?
Alejandro Silvestri
19/04/12 4:36
Lo que sigue es una conjetura, basada en observaciones mías.

Me parece que Chrome abre un proceso nuevo para cada pestaña, excepto que estén "enlazadas", es decir, que tengan comunicación entre ellas.  Ocurre por ejemplo con GMail y Google Docs (y otras productos de Google), y esto permite que cuando GMail recibe un chat, la ventanita surja en la página de Google Docs.

En este caso abre todas las pestañas enlazadas en el mismo proceso, y verás que ese proceso consume mucha memoria (porque es la suma de varias pestañas).

Cuando un proceso requiere memoria la solicita y Chrome se la asigna, de manera que aumenta la cantidad de memoria que ocupa.  Pero por costumbres de programación, rara vez el proceso libera memoria, aun cuando deja de usarla.  A modo de ilustración, consideremos que hay objetos que ya no se usan, pero el programador no se ocupó de "matar" el objeto, por lo que queda ocupando memoria.

Esta memoria es virtual.  Todo el tiempo el sistema operativo intercambia bloques de memoria entre la RAM y el disco duro.  La cuestión es que cuanto más tiempo pase un espacio de memoria sin ser accedido, más probabilidades de que se elimine de la RAM y quede en el disco duro.  Y mientras el proceso no intente acceder a ese espacio, no volverá a la RAM.

La conclusión es la siguiente: un proceso que consume mucha memoria muy probablemente tenga largas porciones que ya no utiliza.  Éstas, a la larga, ocupan espacio en el disco duro, pero no en la RAM, y no suelen afectar la performance (salvo que tengas un disco duro muy comprometido, que no tenga espacio para caché, cosa que sería muy rara).




jesus alumasa
19/04/12 5:16
Buenas Alejandro.

Con la versión de Google Chrome 18.0.1025.162 m, no ocurre lo mismo que la que indico en el primer mensaje del post. Ahora, aunque las pestañas de abran en el mismo proceso, cuando cierras una pestaña se libera parte de la memoria del proceso, por lo que el problema a priori parece solucionado.

En versiones anteriores lo que ocurría es que si las pestañas se abrían en el mismo proceso, aunque cerraras algunas pestañas, el proceso no liberaba memoria, por lo que lo largo del día ocupaba más y más, y no liberaba hasta que no cerraras todas las pestañas de ese mismo proceso.

En cuanto a mis observaciones, puedo decir, que según como abras las pestañas, click directo o botón derecho abrir en nueva pestaña, las pestañas se abren en nuevos procesos o en el mismo. He observado que la barra superior de las aplicaciones de google, según en que aplicación te encuentres (gmail, calendar, docs) se comportan de diferente forma, no son iguales.

Creo que el tema se ha solucionado, o eso parece.
jesus alumasa
19/04/12 7:53
Buenas.

Volvemos a las andadas.

Lo dicho en el anterior mensaje han sido conclusiones sacadas al ver el administrador de tareas de Google Chrome. Pero, he estado observando el administrador de tareas de Windows XP SP3 y me he llevado la sorpresa que sigue ocurriendo el mismo problema de la memoria excesiva. A que me refiero, a que si varias pestañas de Chrome se abren en el mismo proceso, ese proceso con el tiempo ocupa más y más, y hasta que no se cierran todas las pestañas de ese proceso no se libera toda la memoria.
Alejandro Silvestri
19/04/12 10:51
Eso es así por lo que te comentaba.  Pero lo importante es que al cerrar el proceso, sí se libera la memoria.
jesus alumasa
20/04/12 1:49
Buenas Alejandro.

Antes de nada te agradecería que la respuesta has marcado como la mejor, desmárcala ya que no es cierta.

De acuerdo, al cerrar el proceso se libera la memoria. Pero hay que tener en cuenta que mientras tengas pestañas abiertas de ese mismo proceso no se libera la memoria. Explico un hipotético caso.

Abres gmail, trabajas con él y empiezas desde gmail a abrir servicios de google como docs, calendar, reader, play store, youtube..., Muchos de esos servicios se abrirán junto al proceso de gmail. Que es lo que ocurre, que ese proceso empieza a  ocupar barbaridades de memoria y como gmail lo sueles tener abierto todo el día y no lo cierras, esa memoria no se libera. Es así de sencillo.

Además, muchas páginas abren extensiones que se necesitan y aunque cierres esa pestaña la extensión sigue abierta hasta cerrar el navegador. Sé que esas extensiones pasarían a la memoria virtual, pero sabemos que como windows necesite pasar la memoria a disco duro el sistema se vuelve lento e inestable.
cristobal1960
23/04/12 1:08
Hola jesus alumasa, Alejandro, disculpar que me meta por medio.

No se si jesus ya conoce una manera de ahorrar al máximo la memoria RAM de tu Sistema Operativo.

Realicé un vídeo para explicar y entender facilmente:
Pues al instalar programas se cargan al Sistema Operativo cuando iniciamos Windows 
¿Porque cargarlos, si algunos no lo utilizamos a veces?

Verás como te mejora la memoria RAM, muchisimo, verás una bajada espectacular.

Si ya conocías éste método, te contaré otro método a ver si lo sabes.

Saludos.


jesus alumasa
23/04/12 1:37
Buenas cristobal1960

Está muy bien ahorrar memoria al iniciar Windows, pero en este tema estamos tratando en concreto el programa Google Chrome, el porqué ha veces se desborda el consumo de memoria RAM.

Saludos.
cristobal1960
23/04/12 1:50
Hola jesus, si lo se que estas   tratando en concreto el programa Google Chrome, el porqué ha veces se desborda el consumo de memoria RAM. 

Pero te comentaba lo del inicio de Windows, por si no lo sabias, pero veo que lo sabias, disculpar.

Saludos.
Alejandro Silvestri
23/04/12 4:15
Dos cosas:

  1. De acuerdo con tu primer comentario, sobre sitios vinculados.  La memoria se liberará recién al cerrar la última pestaña del conjunto de sitios.  Y mientras tanto, ocupará algo de disco duro, pero no de RAM, y es muy raro que eso traiga dificultades, pero sin duda no afectará el rendimiento de la PC (los desarrolladores ponen mucho hincapié en eso)
  2. Respecto de las extensiones, éstas se ejecutan en un proceso aparte, individual, independiente de la página.  Deberían cargarse al iniciar Chrome.  Como excepción, el caso particular de los content scripts se ejecutan en el mismo proceso de la página, pero se cierran con ella (no perduran, no viven más que la página).
Finalmente no estoy de acuerdo con esa observación de que Windows se vuelve inestable al volcar de RAM a disco.  Verás, el asunto de la memoria virtual se implementó de manera "seria" en Windows 95, marcando un antes y un después en le manejo de memoria, y las técnicas empleadas se basaron en una larga historia de implementaciones en Unix.  A esta altura ése es un mecanismo altamente probado y perfeccionado.  Hay otras cosas que contribuyen a la inestabilidad, que podrían tener como síntoma un vuelco de memoria, pero dudo mucho que el vuelco en sí mismo desestabilice al sistema.  Es uno de los componentes centrales, con mucho soporte del microprocesador (utiliza instrucciones del micro prácticamente exclusivas para eso), y no es un procedimiento complicado.

La lentitud del sistema tiene más que ver con el vuelco y posterior lectura de memoria de forma recurrente, por falta de RAM, y no tanto con un vuelco de única vez de una porción de memoria virtual que ya no se utiliza.  Insisto, por lo menos conceptualmente, toda la memoria ocupada que no se utilice, no afecta tanto al rendimiento del sistema, y por eso los programadores no priorizan su liberación.