筆者の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以上は改善できているので効果は出ています。
Zabbixの稼動レポートが動作しなくなった
次にZabbixの動作確認をしていると「稼動レポート」が動かなくなりました。稼動レポートのPHPファイル「report2.php」をeacceleratorのキャッシュから除外します。
※メンテナンス期間の登録も出来なくなっていたので除外設定に追加します。
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はほとんど効果がないようですね。