Zabbixにeaccelerator導入とhttpdチューニングは効果があるのか?

筆者のZabbixサーバはCPUもストレージも貧弱なので、ブラウザでグラフを表示しているだけでiowaittimeとusertimeがかなり上昇してしまいます。
iowaitの増加ははDBにとってかなりの痛手。チューニングにより少しでも改善できないか試してみました。

eAcceleratorを試す

ZabbixのGUIはPHPで構成されています。ということはeAcceleratorでメモリ上にZabbixのphpをキャッシュすればiowaitは減るのでは?ということで試してみます。

eAcceleratorインストール

# yum install php-eaccelerator
---> Package php-eaccelerator.i686 1:0.9.6.1-1.el6 will be インストール
================================================================================
 パッケージ              アーキテクチャ
                                     バージョン               リポジトリー
                                                                           容量
================================================================================
インストールしています:
 php-eaccelerator        i686        1:0.9.6.1-1.el6          epel        113 k

トランザクションの要約
================================================================================
インストール         1 パッケージ

総ダウンロード容量: 113 k
インストール済み容量: 313 k
これでいいですか? [y/N]y
パッケージをダウンロードしています:
php-eaccelerator-0.9.6.1-1.el6.i686.rpm
インストール:
  php-eaccelerator.i686 1:0.9.6.1-1.el6                                         

完了しました!

eAcceleratorのパラメータ設定

次に/etc/php.d/eaccelerator.iniを編集してphp-eAcceleratorのパラメータを変更します。Zabbix2.2.9のphpは約16MBほど消費するようですのでマージンを設けて24MBを確保します。またメモリだけは十分にあり、ストレージへのアクセスを減らしたいのでeaccelerator.shm_only=”1″でシェアードメモリだけにPHPキャッシュを乗せます。

最後にeAcceleratorのコントロールパネルをZabbixディレクトリ配下で起動できるようにeaccelerator.allowed_admin_pathを設定しcontrol.phpをコピーしてから、httpdを再起動します。

vi /etc/php.d/eaccelerator.ini
===========================================================
[eaccelerator]
extension="eaccelerator.so"
eaccelerator.shm_size = "24"
eaccelerator.cache_dir = "/var/cache/php-eaccelerator"
eaccelerator.enable = "1"
eaccelerator.optimizer = "1"
eaccelerator.debug = 0
eaccelerator.log_file = "/var/log/httpd/eaccelerator_log"
eaccelerator.name_space = ""
eaccelerator.check_mtime = "0"
eaccelerator.filter = "!*report2.php"
eaccelerator.shm_ttl = "0"
eaccelerator.shm_prune_period = "0"
eaccelerator.shm_only = "1"
eaccelerator.allowed_admin_path = "/var/www/html/zabbix/"
===========================================================
cp /usr/share/doc/php-eaccelerator-0.9.6.1/control.php /var/www/html/zabbix/
service httpd restart

eAccelerator control panelにアクセス

control.phpにアクセスしてみると正常に動作しているようです。ブラウザでTTFBを観測すると100ms以上は改善できているので効果は出ています。
phpeaccelerator_zabbix

Zabbixの稼動レポートが動作しなくなった

次にZabbixの動作確認をしていると「稼動レポート」が動かなくなりました。稼動レポートのPHPファイル「report2.php」をeacceleratorのキャッシュから除外します。
zabbix-report2php

※メンテナンス期間の登録も出来なくなっていたので除外設定に追加します。

vi /etc/php.d/eaccelerator.ini
===========================================================
[eaccelerator]
- eaccelerator.filter = ""
+ eaccelerator.filter = "!*report2.php"
+ eaccelerator.filter = "!*maintenance.php"
===========================================================
 service httpd restart

httpdのキャッシュ期間設定を行う

httpdのコンフィグ修正と再起動を行うついでにキャッシュ期間設定を行い、ブラウザに積極的にキャッシュを利用してもらいストレージへのアクセスを低減してみます。

vi /etc/httpd/conf.httpd.conf
===========================================================
+ LoadModule filter_module modules/mod_filter.so
- #LoadModule filter_module modules/mod_filter.so

<ifmodule mod_expires.c>
ExpiresActive On
ExpiresDefault "access plus 10 seconds"
ExpiresByType text/html "access plus 7 days"
ExpiresByType image/gif "access plus 7 days"
ExpiresByType image/jpeg "access plus 7 days"
ExpiresByType image/png "access plus 7 days"
ExpiresByType image/x-icon "access plus 7 days"
ExpiresByType text/css "access plus 7 days"
ExpiresByType text/javascript "access plus 7 days"
ExpiresByType application/x-javascript "access plus 7 days"


#ETags処理
FileETag MTime Size

<ifmodule deflate_module>
 # 圧縮率の設定
 DeflateCompressionLevel 1
 <Location />
  # 圧縮するファイルのMimeTypeを、mod_filterを使って指定する。
  FilterDeclare Compression CONTENT_SET
  FilterProvider Compression DEFLATE resp=Content-Type $text/html
  FilterProvider Compression DEFLATE resp=Content-Type $text/xml
  FilterProvider Compression DEFLATE resp=Content-Type $text/css
  FilterProvider Compression DEFLATE resp=Content-Type $text/javascript
  FilterProvider Compression DEFLATE resp=Content-Type $application/javascript
  FilterChain Compression
  # プロキシサーバーが間違ったコンテンツを配布しないようにするための設定
  Header append Vary Accept-Encoding env=!dont-vary
 </Location>
</ifmodule>
TraceEnable off
===========================================================

効果の程は?

5/1の18:30頃に設定を行いましたが設定の前後でiowaittimeに変化なし、常時Zabbix画面を開いているわけではないのでusertimeも目に見えるレベルの改善はありません。低スペックなサーバな分だけ効果が現れやすいと考えていたのですが、ZabbixにPHPのeAcceleratorはほとんど効果がないようですね。
zabbix-eaccelerator-chart