FreeBSDにphp5.2.0インストールしかしCoreDump
自分は随分前からperlな人でいろいろなアプリを作ってきました。他の言語には見向きもしませんでしたがphpが気になりだしている。
最近巷ではphpが流行っているらしくIT系の記事やメーリングリストも読んで見てますが活発な情報交換をしているようです。
最新バージョンをしらべてみるとphp5.2までなっている、自分が始めてphpを知ったのはたしかVer3ぐらいだっただろうか。
つうことでプログラムの開発環境までは揃えてみようと思いMyサーバFreeBSDにインストールしてみることにした。
インストール
FreeBSDにはportsと呼ばれるとても便利なインストール環境がある。 FreeBSD + Apache + MySQL + PHP5 所謂 LAMP じゃなく FAMP (笑)なサーバにしてみようと思う。 apacheとMySQLはすでに利用しているのでphp本体と拡張モジュール群をインストール
# portinstall php5 # portinstall php5-extensions
extensionsのインストールで初めに個別のモジュールを選択してインストールが出来るようになっている。これは大変便利な機能だFreeBSDならではだろう。依存関係も全て自動で面倒みてくれるため楽チンである。思わず簡単なだけに機能てんこ盛りでインストールしてしまった。車で言う所のフル装備ってゆうの?(古)
又今のphpには PHPコード最適化モジュール「Zend Optimizer」があるらしくこれもインストール段階で選択できるようになっている。
インストールされたモジュールたち
#cat /usr/local/etc/php/extensions.ini extension=session.so extension=recode.so extension=calendar.so extension=ctype.so extension=curl.so extension=dba.so extension=dom.so extension=fileinfo.so extension=gd.so extension=gettext.so extension=iconv.so extension=mbstring.so extension=mcrypt.so extension=mhash.so extension=ming.so extension=mysql.so extension=ncurses.so extension=openssl.so extension=pcntl.so extension=pcre.so extension=pdf.so extension=zlib.so extension=pdo.so extension=posix.so extension=pspell.so extension=readline.so extension=simplexml.so extension=soap.so extension=sockets.so extension=sqlite.so extension=sysvmsg.so extension=sysvsem.so extension=sysvshm.so extension=tokenizer.so extension=xml.so extension=xmlreader.so extension=xmlrpc.so extension=xmlwriter.so extension=xsl.so extension=zip.so
後はphpをapacheモジュールとして動いてもらうためのおまじないを書く。 これはcgiとしてではなくapacheにphpの機能を持たせることとなる。 cgiとして起動させるとリクエストの度にphpをコンパイルしてから実行となりこの部分のオーバヘッドがあるためどうしても遅くなりがちである。 apacheのモジュールとして起動しておけば毎回読み込み・コンパイルの動作がいらなくなり結果高速にリクエストをさばけるようになる訳だ。
httpd.conf
LoadModule php5_module libexec/apache/libphp5.so AddModule mod_php5.c AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps
でもってapacheをrestartするがどうもコケているようだmessagesに
pid 35583 (httpd), uid 0: exited on signal 6 (core dumped)
こんな表示がある。 途方にくれていてもしかたないのでgoogle先生にお尋ねしてみた。
で、「徒然なるまま」サイトで見つけたがextensions.iniで呼んでいるモジュールの順番がまずいとcoredumpを吐くみたいだった。で早速extensions.iniの内容を全部コメントを付加して上から順にコメントを外しapacheの再起動を繰り返していった所extension=session.so と extension=recode.so の2つが原因だったのを突き止めた。多分読み込む順番が他のモジュールと依存していたりするのだろう。 結局一番上に持ってくる事で全ては解決!!
extensions.ini のファイルはphp5-extensions をインストールした時に自動的に作られたものなので結構他にもハマッテル人がいるんじゃなかろうか?
info.php を以下の用に作って目出度くinfo画面を拝むことが出来ました。
<? phpinfo(); ?>
ps aux でapacheのプロセスを覗いてみると以下のよう
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND root 37798 0.0 3.5 28532 17900 ?? Ss 4:45PM 0:00.94 /usr/local/sbin/httpd -DSSL www 37799 0.0 3.5 28604 17984 ?? I 4:45PM 0:00.04 /usr/local/sbin/httpd -DSSL www 37800 0.0 3.5 28604 17984 ?? I 4:45PM 0:00.03 /usr/local/sbin/httpd -DSSL www 37801 0.0 3.5 28604 17984 ?? I 4:45PM 0:00.03 /usr/local/sbin/httpd -DSSL www 37802 0.0 3.5 28604 17984 ?? S 4:45PM 0:00.06 /usr/local/sbin/httpd -DSSL www 37803 0.0 3.5 28532 17900 ?? I 4:45PM 0:00.00 /usr/local/sbin/httpd -DSSL www 37815 0.0 3.5 28532 17900 ?? I 4:45PM 0:00.00 /usr/local/sbin/httpd -DSSL
あんだけモジュール詰め込んだのにプロセスsizeは増えないのね。 mod_perlのときはGDやらImageMagickやらを詰めるとすぐに十数MBぐらいになったもんだがphpのなせるワザなのかぁ。