Bueno. Estaba un poco molesto porque estoy ejecutando Mac OS Lion en un i7 MPB con 8 GB de RAM, y Safari siempre degrada su rendimiento a lo largo del tiempo.Ayuda a mejorar mi solución personal para el uso de memoria de Safari, o decir por qué no es bueno
Por lo tanto, he notado que Safari.app no solo consume una cantidad anormal de memoria, sino también su pareja llamada "Safari Web Content" (que consume aún más).
Enfadado por esto, decidí matar las instancias de "Safari Web Contant" (siempre aparecen en pares, curiosamente. Pero, lo que sea), después de todo, Safari.app es la aplicación principal, de todos modos. ¿Que pasó? ¿Sabes cuándo todas tus pestañas en Safari se actualizan automáticamente? Se produce el mismo efecto: el uso de la memoria del contenido web de Safari se reduce (a medida que se cierra y luego se relanza desde el punto cero), y todas las pestañas se actualizan en la selección. Me hace creer que la actualización automática de esas pestañas que a veces ocurre no es más que una forma de liberar memoria de una manera muy extraña (lo que se llamaría "chuncho", en portugués).
Ok, ¿y qué? Bueno, si eso parece (al menos para mí) ser la forma "oficial" de manejar mejor el consumo de memoria, creo que estaría bien si hiciera lo mismo, ¿no?
Por lo tanto, creé un pequeño script que se ejecuta cada minuto como un trabajo crontab, verificando si el uso de la memoria "Safari Web Content" es demasiado alto y, si lo es, lo mata.
Aquí es:
#!/bin/bash
filename=".tt_0e92309ei2390i209ei9203"
LIMIT=6
ps -eo pmem,pid,args | grep WebProcess.app | grep -v grep | cut -d"/" -f1 > $filename
while read line
do
mem=`echo "${line}"| awk '{print $1}'`
mem=$(echo $mem | sed -e 's/,/./g')
pid=`echo "${line}"| awk '{print $2}'`
status=$(echo "$mem > $LIMIT" | bc -l)
if [ "$status" -eq "1" ]
then
kill $pid
fi
done < $filename
rm $filename
No importa el nombre del archivo con nombre aleatorio, ni las cosas extrañas ("chunchos") que pudiera haber hecho: P Ese guión básicamente comprueba si hay alguna "Safari Contenido Web "proceso que consume más del porcentaje de $ LIMIT de mi memoria. Como tengo 8 GB de memoria RAM, pensé que el 6% ya sería demasiado (tenga en cuenta que antes, a veces conseguía superar esos 6%), ¡así que el proceso debería ser eliminado! Esa verificación se realiza cada 1 minuto, a través de la ejecución de ese script en mi crontab.
Resultados? ¡El rendimiento de Safari ahora es mucho mejor! :) No necesito reiniciar manualmente Safari una vez cada hora y media, y eso me hace muy feliz :) (aunque, casi sucede lo mismo en el fondo)
¿Efectos secundarios? Weeell. Tener tus pestañas actualizadas no siempre es algo deseado. Hay un claro efecto secundario que puedo pensar. Si su proceso de "Contenido web de Safari" se cierra mientras se encuentra en medio de una operación importante, perdería todo. Por ejemplo, si el consumo de mi memoria aumenta demasiado mientras estoy dando propina y el guión mató mi proceso de contenido, lo perdería todo.
Con mucho gusto, he estado usando la secuencia de comandos desde hace algunos días, y aún así no perdí nada.
Aunque esta solución me brindó una mejor experiencia en la navegación hasta el momento, y todavía no me molestó perder algo de escritura, sé que es posible. Por lo tanto, quería saber si ustedes saben cómo liberar una región específica de la memoria de un proceso.
Lo pregunto porque cuando ejecuto vmmap en el pid de "Safari Web Content", veo que la mayoría de la memoria utilizada se asigna en la Zona Malloc "JavaScriptCore FastMalloc_0xaca89d40". De esa forma, supuse que si podía deshacer mi memoria, podría tener una mejor experiencia en Safari, sin el riesgo de perder demasiado (por supuesto, eso dependería de cómo Safari manejaría esa sutil eliminación inesperada de memoria, pero Tengo fe).
Vamos a llegar hasta el final. ¿Crees que mi enfoque es bueno, o puedes pensar en otros efectos secundarios de hacer lo que hago? Además, ¿sabes si puedo borrar la memoria de esa región específica? No me importa si necesitaría tener acceso de root (al menos para fines de prueba). Y, por último, ¿también ha desarrollado su propia forma de aumentar su experiencia de navegación al usar Safari? Si es así, por favor comparte! :)
Fernando.
Yeap, que era mi primera suposición .. Pero creo que tiene que haber una manera de forzar mi camino a través de, al menos, el proceso pertenece a mi usuario jajaja Por supuesto, que violaría una gran cantidad de buenos principios de programación . Me sorprendió el hecho de que Safari.app no se bloqueara realmente cuando abandoné su proceso de Contenido (lo que en la práctica desasoció todo lo que Safari necesitaba, forzándolo a actualizar las pestañas). Por lo tanto, al desasignar solo esa región de la memoria, tengo fe en que Safari se manejaría solo sin perder otras cosas importantes. No estoy seguro si el proceso de WebProcess lo manejaría, aunque .. – FernandoH