Ubuntuのapache2でmcryptを有効にする

インストール

有効化

デフォルトだとapache2では有効にならないようなので以下のように有効化する。

apache2の再起動

phpinfo()で有効化しているかを確認

/proc ファイルシステム

/procは以下のファイルやフォルダは実際のファイルではなくカーネルが提供する擬似ファイル。
ファイルのようにアクセスすると、カーネルにアクセスし情報を取得できる。
擬似ファイルシステムにしておくと、プログラムからはインターフェースが統一される。

/proc/[数字]
数字はPID(プロセス毎につけられた番号)をあらわす、プロセスのいろいろな状態を知ることができる。
サーバーなどは起動時に自分のPIDをファイルに書き込んでいたりするので、そこからPIDを知ることができる。

apache2は/var/run/apache2.pidなどに自分のPIDを書き込む。
よって以下のようにして、apache2のプロセス状態を取得できる。

/proc/loadavg
CPUの使用率を表示する。uptimeコマンドなどで利用する。

ほかにもいろいろあるがこれらは man proc で知ることができる。

apache2のMPM覚書

MPM(Multi Processing Module)。アパッチがリクエストの処理をどのように行うかのいろいろな形態。プロセスを使うものとスレッドを使うものに分けられる。

用いられるMPMはどれかひとつ。

コンパイル時にどのMPMが用いられるか決められる。現状のMPMを確認したい場合は-lをつけてapache2を実行する。

prefork.cがあるので、preforkであることがわかる。MPMの一覧はここで確認できる。

preforkはスレッドを使わず1.3系のアパッチのようにあらかじめ(pre)プロセスを起動しておく(fork)、それで待機しておく。

アパッチのプロセスは一番偉いコントロールプロセスみたいのがいて、それがアパッチ全体をコントロールしている。このプロセスは終了することがなく、リクエストを処理することもない。

ディレクティブには以下のようなものがある。
StartServers
MinSpareServers
MaxSpareServers
MaxClients
MaxRequestsPerChild
マニュアルを読むと、アパッチは賢いのでデフォルト値で問題ないとのこと、でもMaxClientsは、サーバへのリクエストがすごく多いときには増やし、サーバが重過ぎて動かなくなるときは減らすとのこと。

MaxRequestsPerChildはひとつのプロセスがいくつのリクエストを処理するかを指定するもの、あまり大きいとプロセスがメモリをたくさん使ってしまうのかもしれない。

Windowsのアパッチでも調べてみた。

mpm_winntが使われている。これはwinntに特化したモジュールでスレッドを使う。PHPがよく落ちたりするのはスレッドを使っているせいかもしれない。しかしこのモジュールはコンパイル時にしか設定できないので、しかもforkはwindowsにはないので、preforkのwindows版があるのかはわからない。

mpm_winntはひとつの子プロセスをつくり、その中のスレッドですべてのリクエストを受け付ける。そしてこのモジュールにはディレクティブがひとつしかないみたいなのでカスタマイズはほとんどできないと思われる。

windowsのアパッチの起動ログをみてみると、次のようになっている。

スレッドを64個も作っているらしい。一個でもエラーが出ると、スレッドの場合は全プロセスが落ちるので致命的と思われる。