臥薪嘗胆
rebootしてreadonlyになったくらいで折れるガラスのハート
1.rebootしたらreadonlyに
OSチューニングをして、再起動するとファイルシステムがreadonlyに
確認したところ、aptitude upgradeで発生している模様
その段階で原因はわからず、再起動して動作しないと違反となるため
ちょくちょく再起動&スナップショットしつつ震えながら作業することにorz
原因
ISUCON5 本選出場者決定のお知らせにもあるようにバグの模様
具体的にはaptitude upgradeにてgrub.cfgが変更されたことが原因
upgradeによって、以下(grub.cfgより参照)のrwがroとなり、その結果ファイルシステムがreadonlyとなる
linux /boot/vmlinuz-3.19.0-30-generic root=UUID=e176bae0-84a5-4bd2-b968-e809e902488c rw console=ttyS0)
(grub.cfgをroからrwに変更したところ、起動するようになった)
GCP公式のubuntu15.04のgrub.cfgはroであることから、正しいのはroだと思われる
今回であれば、
・他のインスタンスにboot時にreadonlyとなるディスクを追加し、roをrwに書き換える
・readonlyとなる前に、次に記述する「ファイルシステムチューニングができず」での対応策を実施する
ことによって対処可能
これ以上はboot周りについて知識不足なので、また機会のあるときに追う
2.ファイルシステムチューニングができず
とりあえずnoatimeにしたいのに
root@isucon-retry4:/home/isucon# vi /etc/fstab LABEL=cloudimg-rootfs / ext4 defaults,noatime 0 0 root@isucon-retry4:/home/isucon# mount -o remount / mount: can't find LABEL=cloudimg-rootfs
原因
fstabの設定と実際のマウント情報が違うことが原因
mtab(mounted filesystem table)は実際にマウントした情報を記録している。mtabを確認すると
/dev/disk/by-uuid/e176bae0-84a5-4bd2-b968-e809e902488c / ext4 rw,relatime,data=ordered 0 0
となっており、デバイス名でマウントされている
そのため、デバイスにラベルをつけるべし(もしくはfstabのラベル利用をやめる)
root@isucon-retry4:/home/isucon# tune2fs -l /dev/disk/by-uuid/e176bae0-84a5-4bd2-b968-e809e902488c | grep "volume name" Filesystem volume name: <none> root@isucon-retry4:/home/isucon# e2label /dev/disk/by-uuid/e176bae0-84a5-4bd2-b968-e809e902488c cloudimg-rootfs root@isucon-retry4:/home/isucon# tune2fs -l /dev/disk/by-uuid/e176bae0-84a5-4bd2-b968-e809e902488c | grep "volume name" Filesystem volume name: cloudimg-rootfs root@isucon-retry4:/home/katukatu# cat /etc/mtab | grep ext4 /dev/disk/by-uuid/e176bae0-84a5-4bd2-b968-e809e902488c / ext4 rw,noatime,data=ordered 0 0 ### sda1にラベルを付けても同義 ### root@isucon-retry4:/home/isucon# ls -al /dev/disk/by-uuid/e176bae0-84a5-4bd2-b968-e809e902488c lrwxrwxrwx 1 root root 10 Oct 5 21:39 /dev/disk/by-uuid/e176bae0-84a5-4bd2-b968-e809e902488c -> ../../sda1
3.PHPにモジュール追加できない&hhvmが利用できない
原因
・パッケージ管理に頼りすぎている、私の技術不足
・hhvmについては知識不足
以下、調べた
方法-PHPにモジュール追加
root@isucon-retry:/home/isucon# cat /etc/systemd/system/isuxi.php.service [Unit] Description=isuxi-php After=syslog.target [Service] WorkingDirectory=/home/isucon/webapp/php EnvironmentFile=/home/isucon/env.sh ExecStart=/home/isucon/.local/php/sbin/php-fpm -y php-fpm.conf [Install] WantedBy=multi-user.target root@isucon-retry:/home/isucon# cd .local/php/ root@isucon-retry:/home/isucon/.local/php# bin/php -m | grep mem root@isucon-retry:/home/isucon/.local/php# aptitude install php5-memcached ... root@isucon-retry:/home/isucon/.local/php# vi etc/conf.d/memcached.ini extension="/usr/lib/php5/20131226/memcached.so" root@isucon-retry:/home/isucon/.local/php# bin/php -m | grep mem memcached
方法-hhvmの利用
root@isucon-retry:/home/isucon# apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0x5a16e7281be7a449 ... root@isucon-retry:/home/isucon# add-apt-repository 'deb http://dl.hhvm.com/ubuntu vivid main' root@isucon-retry:/home/isucon# aptitude update ... root@isucon-retry:/home/isucon# aptitude install hhvm The following NEW packages will be installed: ghostscript{a} gsfonts{a} hhvm imagemagick-common{a} libboost-context1.55.0{a} libboost-program-options1.55.0{a} libboost-regex1.55.0{a} libboost-thread1.55.0{a} libc-client2007e{a} libcupsfilters1{a} libcupsimage2{a} libfftw3-double3{a} libgflags2{a} libgoogle-glog0{a} libgs9{a} libgs9-common{a} libijs-0.35{a} libjbig2dec0{a} libjemalloc1{a} liblqr-1-0{a} libmagickcore-6.q16-2{a} libmagickwand-6.q16-2{a} libonig2{a} libpaper-utils{a} libpaper1{a} libtbb2{a} libunwind8{a} mlock{a} poppler-data{a} 0 packages upgraded, 29 newly installed, 0 to remove and 0 not upgraded. Need to get 30.0 MB of archives. After unpacking 54.2 MB will be used. Do you want to continue? [Y/n/?] y ... update-alternatives: using /usr/bin/hhvm to provide /usr/bin/php (php) in auto mode ******************************************************************** * HHVM is installed. * * Running PHP web scripts with HHVM is done by having your * webserver talk to HHVM over FastCGI. Install nginx or Apache, * and then: * $ sudo /usr/share/hhvm/install_fastcgi.sh * $ sudo /etc/init.d/hhvm restart * (if using nginx) $ sudo /etc/init.d/nginx restart * (if using apache) $ sudo /etc/init.d/apache restart * * Detailed FastCGI directions are online at: * https://github.com/facebook/hhvm/wiki/FastCGI * * If you're using HHVM to run web scripts, you probably want it * to start at boot: * $ sudo update-rc.d hhvm defaults * * Running command-line scripts with HHVM requires no special setup: * $ hhvm whatever.php * * You can use HHVM for /usr/bin/php even if you have php-cli * installed: * $ sudo /usr/bin/update-alternatives \ * --install /usr/bin/php php /usr/bin/hhvm 60 ******************************************************************** Setting up libpaper-utils (1.1.24+nmu2ubuntu3) ... Processing triggers for libc-bin (2.21-0ubuntu4) ... Processing triggers for systemd (219-7ubuntu6) ... Processing triggers for ureadahead (0.100.0-19) ... root@isucon-retry:/home/isucon# hhvm --version HipHop VM 3.9.1 (rel) Compiler: tags/HHVM-3.9.1-0-g0f72cfc2f0a01fdfeb72fbcfeb247b72998a66db Repo schema: 6416960c150a4a4726fda74b659105ded8819d9c root@isucon-retry:/home/isucon# php -v HipHop VM 3.9.1 (rel) Compiler: tags/HHVM-3.9.1-0-g0f72cfc2f0a01fdfeb72fbcfeb247b72998a66db Repo schema: 6416960c150a4a4726fda74b659105ded8819d9c root@isucon-retry:/home/isucon# systemctl stop isuxi.php root@isucon-retry:/home/isucon# vi /etc/hhvm/server.ini ... hhvm.server.port = 8080 ... root@isucon-retry:/home/isucon# systemctl restart hhvm root@isucon-retry:/home/isucon# netstat -anp | grep "hhvm" tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 25111/hhvm unix 3 [ ] STREAM CONNECTED 47465 25111/hhvm unix 3 [ ] STREAM CONNECTED 47464 25111/hhvm unix 3 [ ] STREAM CONNECTED 47468 25111/hhvm unix 3 [ ] STREAM CONNECTED 47467 25111/hhvm
参考URL
phpに後から拡張モジュールを追加する
Prebuilt packages on Ubuntu 15.04 (vivid)
How To Install And Configure HHVM On Ubuntu 15.04
ISUCON5 予選通過しました (@methane編)