Google Chrome がたまにすごく重くなる.ディスクアクセスが原因のようだ.そこでキャッシュ(消えても問題ないファイル群)~/.cache/google-chrome を RAMディスク /dev/shm 以下に移動したのだが,それでも改善されない.そこで,設定ファイル~/.config/google-chrome も RAMディスク 上に置くことにした.
# 追記@Sep.04,2010:スクリプト修正.
RAMディスクというのは,メモリをハードディスクのように扱えるようにしたメモリ領域のこと.なので,読み書きがハードディスクよりも速い.
そこで,Google Chrome(以下 chrome)が頻繁に書き換えるファイルを RAMディスク 上に置いてしまって,chrome を軽くする.
注意点は,RAMディスク 上のファイルはシャットダウンとともに消えてしまうため,設定ファイルを chrome 終了時にハードディスクに移動しなければならないこと.
chrome が利用するファイルは,どうやら ~/.cache/google-chrome と ~/.config/google-chrome のようだ.前者はキャッシュファイルで消しても問題なく,後者は設定ファイルで消すとブックマークなどの情報が失われる.そこで,chrome 起動前にこれらのデータを RAMディスク に移動し,chrome 終了時にもとに戻す(ただしキャッシュは消す)ようなスクリプトを書いた.
スクリプト xchrome †
# 二重起動しないように修正;既にchromeが起動されている場合,終了させるように修正.@Sep.04,2010
#!/bin/bash
exename=$(basename $0)
pgres=$(pgrep $exename)
if [ "$(echo "$pgres" | grep -v $$)" != "" ];then
echo "$exename is already running"
exit 1
fi
while [ $(ps -C chrome --no-headers | wc -l) -gt 0 ];do
killall chrome
sleep 0.5
done
username=akihiko
ramdisk=/dev/shm
gcache=~/.cache/google-chrome
gconfig=~/.config/google-chrome
rcache=$ramdisk/$username/google-chrome/cache
rconfig=$ramdisk/$username/google-chrome/config
tmpdir=/tmp/$username/google-chrome
if [ -e $tmpdir ];then
rm -r $tmpdir
fi
mkdir -p $tmpdir
if [ -e $ramdisk ];then
if [ -e $ramdisk/$username/google-chrome ];then
mv $ramdisk/$username/google-chrome $tmpdir/ram.bak
fi
mkdir -p $ramdisk/$username/google-chrome
else
echo "ramdisk not found: $ramdisk"
exec google-chrome
exit 0
fi
if [ -e $gcache ];then
# cp -av $gcache $tmpdir/cache.bak #キャッシュのバックアップを取る
mv $gcache $rcache
else
mkdir $rcache
fi
ln -s $rcache $gcache
if [ -e $gconfig ];then
# cp -av $gconfig $tmpdir/config.bak #設定のバックアップを取る
mv $gconfig $rconfig
else
mkdir $rconfig
fi
ln -s $rconfig $gconfig
google-chrome
rm $gcache
rm $gconfig
# mv -i $rcache $gcache #キャッシュを残す
rm -rv $rcache #キャッシュを消す
mv -v $rconfig $gconfig
使い方: ./xchrome で実行するだけ.
安心のために設定ファイルのバックアップを取る場合は,
# cp -av $gconfig $tmpdir/config.bak #設定のバックアップを取る
のコメントアウトを外す.ただし,起動が遅くなることに注意.
終了時にキャッシュもハードディスクに移動する場合は,最後らへんの
# mv -i $rcache $gcache #キャッシュを残す
rm -rv $rcache #キャッシュを消す
を
mv -i $rcache $gcache #キャッシュを残す
# rm -rv $rcache #キャッシュを消す
と変更する.でも,キャッシュファイルのサイズが大きくなるとメインメモリを圧迫するので,おすすめできない.
課題 †
- 終了に時間が掛かる(RAMディスクからハードディスクへファイルを移動するため).
- 起動が少し遅くなった(が,そんなに気にならない.RAMディスクへの移動は速い).
- RAMディスクを使いすぎて困ったことにならないだろうか?(不安)
ともあれ,たまに chrome が異常に重くなる現象は,今のところ回避できている.