2010年07月01日
Androidのlowmemorykillerが発動したときのログ
Androidではメモリが足りなくなったときに、プロセスを強制終了させてメモリを開放させるという機構が入っています。Low memory killer と呼ばれるものです。
これが発動したときの典型的なログがとれたのでちょっと紹介します。
Android 2.2 をビルドしてemulatorを起動し、JavaScriptのベンチマークテストのページをブラウザで開きました。
このページ(V8 benchmark)です。
すると、このページの実行にはメモリがたくさん必要らしく、コンソールに以下のようなカーネルログが ...
select 217 (droid.deskclock), adj 15, size 3521, to kill select 236 (d.process.media), adj 15, size 3646, to kill send sigkill to 236 (d.process.media), adj 15, size 3646 select 217 (droid.deskclock), adj 15, size 3488, to kill send sigkill to 217 (droid.deskclock), adj 15, size 3488 select 257 (droid.bluetooth), adj 15, size 3472, to kill send sigkill to 257 (droid.bluetooth), adj 15, size 3472 select 269 (m.android.email), adj 14, size 3593, to kill send sigkill to 269 (m.android.email), adj 14, size 3593 select 194 (d.process.acore), adj 8, size 4156, to kill select 286 (viders.calendar), adj 13, size 3477, to kill send sigkill to 286 (viders.calendar), adj 13, size 3477 select 194 (d.process.acore), adj 8, size 4136, to kill select 296 (com.android.mms), adj 12, size 3594, to kill send sigkill to 296 (com.android.mms), adj 12, size 3594 select 194 (d.process.acore), adj 8, size 4114, to kill select 314 (.quicksearchbox), adj 11, size 3266, to kill send sigkill to 314 (.quicksearchbox), adj 11, size 3266 select 194 (d.process.acore), adj 8, size 4082, to kill select 323 (android.protips), adj 10, size 3172, to kill send sigkill to 323 (android.protips), adj 10, size 3172 select 194 (d.process.acore), adj 8, size 4047, to kill select 332 (m.android.music), adj 9, size 3144, to kill send sigkill to 332 (m.android.music), adj 9, size 3144 select 193 (ndroid.launcher), adj 4, size 3851, to kill select 194 (d.process.acore), adj 8, size 3955, to kill send sigkill to 194 (d.process.acore), adj 8, size 3955 select 193 (ndroid.launcher), adj 4, size 3695, to kill select 340 (.cooliris.media), adj 7, size 3138, to kill send sigkill to 340 (.cooliris.media), adj 7, size 3138 select 193 (ndroid.launcher), adj 4, size 3630, to kill send sigkill to 193 (ndroid.launcher), adj 4, size 3630 select 146 (putmethod.latin), adj 1, size 2882, to kill send sigkill to 146 (putmethod.latin), adj 1, size 2882 select 70 (logcat), adj 0, size 68, to kill select 350 (android.browser), adj 0, size 16780, to kill send sigkill to 350 (android.browser), adj 0, size 16780
lowmemorykillerがばったばったとプロセスを殺していき、最後にブラウザまで殺してしまってそこで終了。
何事もなかったようにホーム画面を表示し、システムとしては不安定にはなっていません。
emulatorはデフォルトではメモリが96MBなのですが、このページのJavaScriptを実行するにはこれでは足りないようです。コマンドラインオプション -memory 256 を追加して起動するとlowmemorykillerが発動することなくこのページのJavaScriptベンチマークを実行することができました。
JavaScriptエンジンはV8でなくjscのほうを使いました。V8だとなぜかメモリが256MBでも落ちてしまいました。
このログはAndroid用Linuxカーネルの以下のソースから出ています。
drivers/staging/android/lowmemorykiller.c