好。我有点恼火,因为我在具有 8GB RAM 的 i7 MPB 上运行 Mac OS Lion,而 Safari 的性能总是随着时间的推移而降低。
因此,我注意到不仅 Safari.app 消耗了异常数量的内存,而且它的一对名为“Safari Web Content”(消耗更多)。
对此感到恼火,我决定杀死那个“Safari Web Contant”实例(它们总是成对出现,奇怪的是。但是,无论如何),毕竟 Safari.app 是主要的应用程序,无论如何。发生了什么?您知道 Safari 中的所有选项卡何时会自动刷新吗?出现相同的效果:Safari Web 内容的内存使用量下降(当它退出时,然后从零点重新启动),并且您的所有选项卡在选择时都会刷新。这让我相信,有时发生的那些选项卡的自动刷新只不过是一种以非常奇怪的方式释放内存的方式(葡萄牙语称为“chuncho”)。
好的,那又怎样?好吧,如果这似乎(至少对我而言)是更好地处理内存消耗的“官方”方式,我想如果我也这样做就好了,对吧?
因此,我创建了一个小脚本,每分钟运行一次作为 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
不要介意随机命名的文件名,也不要介意我可能做过的奇怪的事情(“chunchos”):P 该脚本基本上会检查是否有任何“Safari Web 内容”进程消耗的内存超过 $LIMIT 百分比。由于我有 8GB 的内存,我认为 6% 已经太多了(请注意,在此之前,它有时会设法超过 6%),因此应该终止该进程!通过在我的 crontab 上执行该脚本,每 1 分钟进行一次验证。
结果? Safari 的性能现在更好了! :) 我不需要每一个半小时手动重置一次 Safari,这让我很高兴 :)(即使在后台发生几乎相同的情况)
副作用? 威尔。刷新选项卡并不总是需要的。我能想到一个明显的副作用。如果您的“Safari Web 内容”进程在您进行一些重要操作时关闭,您将失去一切。例如,如果在我提示这个时我的内存消耗太高,并且脚本杀死了我的内容进程,我将失去一切。
很高兴,我已经使用该脚本几天了,仍然没有丢失任何东西。
尽管这个解决方案给了我更好的浏览体验,我仍然没有因为丢失一些文字而烦恼,我知道这是可能的。因此,我想知道你们是否知道如何释放进程内存的特定区域。
我之所以这么问是因为当我在“Safari Web Content”的 pid 上运行 vmmap 时,我注意到使用的大部分内存分配在 Malloc 区域“JavaScriptCore FastMalloc_0xaca89d40”中。那样的话,我认为如果我可以释放内存,我可以在 Safari 上获得更好的体验,而不会丢失太多的风险(当然,这取决于 Safari 如何处理这种微妙的意外内存清除,但是我有信仰)。
让我们走到最后 .你认为我的方法好,或者你能想到做我所做的任何其他副作用吗?另外,你知道我能不能清除那个特定区域的内存?我不介意我是否需要 root 访问权限(至少出于测试目的)。最后,在使用 Safari 时,您是否还开发了自己的方式来提升浏览体验?如果是这样,请分享! :)
费尔南多。
最佳答案
不,您不能强制另一个进程释放内存。无论如何,这几乎肯定会使其崩溃(这实际上是您通过终止 Safari Web Content 进程所做的)。
关于macos - 帮助改进我针对 Safari 高内存使用率的个人解决方案,或说明为什么它不好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7197253/