はじめに
とあるホストに間借りして Zabbix を設置しようとしたとき、そんなにリッチなリソースが利用可能だったわけでなく、なるべく消費メモリ量を削減する必要がありました。
それと、そういえば nginx で php 動かしたこと無いなーということで、それも試してみたくなりました。
というわけで、各 HTTP Server で Zabbix Frontend を動作させたときの消費メモリ量を調べました。
そして今更 nginx には CGI 機能が無いということに驚愕してみたり。
諸元
利用したモジュール
項目 | 内容 |
---|---|
OS | CentOS 7.9.2009 x86_64 |
Zabbix | MIRACLE ZBX 5.0.8-3 |
PHP7 | remi 7.3.26-1 |
apache | 2.4.6-97 |
nginx | epel 1.16.1-3 |
lighttpd | epel 1.4.54-1 |
SCL の rh-php には apache 用のモジュールが入っていません。libphp7.so という名前のファイルは入ってますが、これは configure スイッチの --enable-embed で生成されるファイルであって apache で使えません。
SCL の rpm ってモジュール構成とかビルド設定に互換性が無くて使いづらかったりしますよねぇ。あと approve されないままだったり。複数バージョンが共存できるようになっている点は助かりますが。
php 実行環境
項目 | 内容 |
---|---|
apache | php7_module (libphp7.so) |
nginx | php-fpm (UNIX Socket) |
lighttpd | php-cgi |
計測方法など
- 起動して、しばらく操作して、ちょっと落ち着いたところで平均を算出
- 1人で操作、ブラウザからの接続も1つ
- 30sec 間隔で監視、もちろん Zabbix で
- PSS の値
結果
単位は MiB です。
項目 | 合計 | http server | php |
---|---|---|---|
apache | 118.87 | n/a | n/a |
nginx | 64.37 | 3.36 | 61.01 |
lighttpd | 24.57 | 1.93 | 22.64 |
参考まで、php-fpm と組み合わせた場合の apache は 5MiB くらいでした。
ということで lighttpd が最小です。
むかし、Intel NUC で Zabbix Server + Agent + Frontend を11セット動かして1日稼動させる、というお仕事をしていましたが、そこで利用していたのも lighttpd でした。もっとも、その時点では nginx を好きじゃなかったので non apache と言えば lighttpd の一択だったわけですけど。Docker じゃなくて lxc しかもシステムコンテナでしたし。
そもそも
Frontend を止めてしまっても Zabbix の監視は止まらないので、不要な時は止めておくのが良いですね。
もっと言えば、リモートで DB に繋げられるならローカル(ブラウザを開いている手元のホスト)で動かすのが正解って気もします。
おわりに
lighttpd は奇跡的にメンテが続いてます。ありがたい。ありがとうございます。もうしばらく lighttpd 使っていこうと思います。
nginx は HTTP Reverse Proxy には便利ですが、FastCGI 環境とか、使いづらいユースケースもありますねぇ。Docker だと monit とか併用するんでしょうか。それはそれで面白いけど。