Raspberry Pi 3 Model B
OS: Raspbian stretch lite November 2017
MySQL 5.7.21
OSにRaspbianを導入したRaspberry Pi 3でMySQLのビルドをこなしていたら道半ばで打ち切りの憂き目に遭った。エラーメッセージによればcc1plusが殺害されているようである。
$ make (snip) [ 50%] Building CXX object sql/CMakeFiles/sql.dir/item_geofunc_setops.cc.o c++: internal compiler error: Killed (program cc1plus)
dmesgから手がかりを探ると、どうもOut of memory killerによってプロセスが刈り取られた模様である。Raspberry Pi 3 Model Bのメモリ搭載量1GBに対してその8割を超えるメモリを消費すればお咎めの対象となるのも宜なるかなというところである。
$ dmesg (snip) [16075.666040] Out of memory: Kill process 11885 (cc1plus) score 853 or sacrifice child [16075.666059] Killed process 11885 (cc1plus) total-vm:919780kB, anon-rss:842300kB, file-rss:0kB, shmem-rss:0kB [16076.103693] oom_reaper: reaped process 11885 (cc1plus), now anon-rss:0kB, file-rss:0kB, shmem-rss:0kB
ビルドに費やした途方もない待ち時間がふいになり誠に遺憾である。さりとてOOM-Killerを無効にするとメモリの払底を差し止められずにシステムが混乱に陥る惧れがある。だからこの度はスワップ領域を拡張するのが適当におもう。
実際Raspbianのデフォルトではスワップ領域に100MBの割り当てしかなく、近頃のMySQLをビルドするには到底間に合わない。これを2GBへ引き上げる。Raspbianは/etc/dphys-swapfile
のCONF_SWAPSIZE
でスワップ領域を設定するようである。
$ sudo vi /etc/dphys-swapfile #CONF_SWAPSIZE=100 CONF_SWAPSIZE=2048 $ sudo dphys-swapfile install want /var/swap=2048MByte, checking existing: deleting wrong size file (104857600), generating swapfile ... of 2048MBytes $ sudo dphys-swapfile swapon
これでスワップ領域が2GBに拡張された。
$ free -m total used free shared buff/cache available Mem: 927 76 455 12 395 787 Swap: 2047 0 2047
改めてMySQLのビルドを試みたところ450分程度を費やして恙無く完了した。
参考:
- $ man dphys-swapfile
- Increase size of existing swap file