gravatar

Flush Swap on Mac OS X

在 Mac OS X 上,如果一直使用的話,會使得 swap 一直爆增。原因當然就是跑了一大堆應用程式,像是 Safari, Firefox, AdiumX 這些等等都是非常佔記憶體,再來是各種的 dashboard widget。當然放越多越方便,一叫出來就有得用。但是很不幸的這些都是背景執行的程式,會佔著記憶體。在 Mac OS X 下,要看 swap 使用量,可以使用以下指令

sysctl -a | grep swap
vm.swapusage: total = 256.00M used = 101.31M free = 154.69M
就可以看到目前 swap file 分配的大小,以及使用量和剩餘的空間。
由於 swap 空間是動態增長,如果要讓 swap 空間變小,可以 logout 後再次 login,就把大部分程式記憶體給釋放,swap 就會自動的縮小。但是每次一段時間就要 logout 非常麻煩,如果不介意 swap 大小就算了,當然 swap 用太多表示有些程式需要 swap out/in 就會變慢。
以 dashboard widgets 來說,因為都是背景執行,而且通常大部分的人都會一次就跑五六個以上。一般來說一個 widget 一啟動大概是 10MB 空間,但是會隨著使用時間的增加,記憶體使用量就會增加,使用 top 指令就可以看出來。我大概四天的時間,用 top 看那些 Dashboard 的程式大概會長到 20-30MB。算算五六個 widgets 就要花上 100MB 以上。如果可以每天重新啟動 widgets 的話,讓他們回到 10MB 左右的空間,對於主記憶體可以省上不少空間。但是手動關掉 widgets 又要重新加入非常麻煩。剛才試了一下 kill -1 的方法來重新啟動 dashboard widget 的 process,發現這個方式可以運作,順利重新啟動 widget process,又不會像第一次啟動電腦叫出 dashboard 那樣子每個 widget 都會停住。如此一來可以寫個 script 在固定時間把 widgets' process 全部 kill -1 重跑,這樣應該可以減少 widgets' size 持續增長。