Хорошо.Я был отчасти раздражен, потому что я запускаю Mac OS Lion на i7 MPB с 8 ГБ ОЗУ, и Safari всегда снижает производительность во времени.
Следовательно, я заметил, что не только Safari.app потребляетненормальный объем памяти, но также и его пара под названием «Safari Web Content» (который потребляет даже больше).
Раздраженный этим, я решил убить экземпляры «Safari Web Contant» (они всегда появляются парами,Любопытно. Но, как бы там ни было) В конце концов, Safari.app - главное приложение.Что случилось?Знаете ли вы, когда все ваши вкладки в Safari обновляются автоматически?Происходит тот же эффект: использование памяти Safari Web Content прекращается (когда оно завершается, а затем перезапускается с нуля), и все ваши вкладки обновляются при выборе.Это заставляет меня поверить, что автоматическое обновление этих вкладок, которое иногда происходит, является не чем иным, как способом освобождения памяти очень странным образом (то, что на португальском языке называется «чунчо»).
Хорошо, такчто?Ну, если это кажется (по крайней мере для меня) «официальным» способом лучше справляться с потреблением памяти, я думаю, было бы хорошо, если бы я сделал то же самое, верно?
Поэтому я создал небольшойСценарий, который запускается каждую минуту как задание crontab, проверяет, не слишком ли велико использование памяти «Safari Web Content» и, если это так, убивает ее.
Вот оно:
#!/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
Не обращайте внимания на случайное имя файла и странные вещи («чанчо»), которые я, возможно, сделал: P Этот сценарий в основном проверяет, существует ли какой-либо процесс «Safari Web Content», потребляющий больше, чем процент $ LIMIT моей памяти.Поскольку у меня есть 8 ГБ оперативной памяти, я, хотя 6%, было бы уже слишком много (обратите внимание, что раньше ему иногда удавалось преодолеть эти 6%), поэтому процесс должен быть убит!Эта проверка выполняется каждую 1 минуту через выполнение этого скрипта на моем crontab.
Результаты? Производительность Safari теперь намного лучше!:) Мне не нужно вручную переустанавливать Safari раз в полтора часа, и это меня очень радует :) (хотя на фоне происходит почти то же самое)
Побочные эффекты? Weeell.Обновление вкладок - не всегда то, что нужно.Есть один явный побочный эффект, о котором я могу думать.Если ваш процесс «Safari Web Content» закроется, когда вы выполняете какую-то важную операцию, вы потеряете все.Например, если мое потребление памяти слишком велико, когда я опрокидываю это, и сценарий убил мой процесс контента, я бы потерял все.
С удовольствием, я использовал сценарий уже несколько дней, и до сих порничего не потерял.
Несмотря на то, что это решение дало мне лучший опыт при просмотре до настоящего момента, и я все еще не раздражался из-за потери некоторых записей, я знаю, что это возможно.Поэтому я хотел бы знать, знаете ли вы, ребята, как освободить определенную область памяти процесса.
Я спрашиваю об этом, потому что, когда я запускаю vmmap на pid «Safari Web Content», я замечаю, чтоБольшая часть используемой памяти выделяется в зоне Malloc «JavaScriptCore FastMalloc_0xaca89d40».Таким образом, я предполагал, что, если бы я мог освободить эту память, я мог бы получить лучший опыт в Safari без риска потерять слишком много (конечно, это будет зависеть от того, как Safari справится с этим тонким неожиданным освобождением памяти, ноЯ верю).
Давай доберемся до конца .Считаете ли вы, что мой подход хорош, или вы можете подумать о других побочных эффектах от того, что я делаю?Кроме того, вы знаете, могу ли я очистить память об этом конкретном регионе?Я не против, если мне понадобится root-доступ (по крайней мере, для тестирования). И, наконец, разработали ли вы свой собственный способ повышения удобства просмотра при использовании Safari?Если это так, пожалуйста, поделитесь!:)
Фернандо.