本ブログのサーバをCentOS8に更改しました。
いろいろ更新したついでにphp8を使ってみたところWordPress高速化の定番プラグイン「001 Prime Strategy Translate Accelerator」がAPCモードで動かないじゃないですか!ヤダーーー!!ってことで自己責任で改造してみました。
ことの発端
「001 Prime Strategy Translate Accelerator」はphp5.X時代のプラグインなので、今となっては古いAPCを利用していますが、現在主流のphp7.x世代で利用されているAPCuと直接の互換性はなくapcu_bcという互換性確保モジュールの併用が必要です。
しかしremiレポジトリから入手可能なphp8ではapcu_bcが廃止されたため、「001 Prime Strategy Translate Accelerator」がAPCモードで動作しなくなりました。
プラグインのソースを直接いじる
プラグインファイル「001-prime-strategy-translate-accelerator.php」とリファレンスのAPCu関数を見比べてみると、ちょっとした修正でAPCu化できそうなので、ファイルを直接いじってみます。
まずはapc_***をapcu_***に置換します。
# cd /var/www/html/wp-content/plugins/001-prime-strategy-translate-accelerator/ # cp 001-prime-strategy-translate-accelerator.php 001-prime-strategy-translate-accelerator.php.bak # sed -i 's/apc_/apcu_/g' 001-prime-strategy-translate-accelerator.php
これだけで基本的には動作しますが「キャッシュの強制削除を行う」でエラーが出るため、該当のコード「ファイルの103行目付近のapcu_clear_cache」を修正します。
# cd /var/www/html/wp-content/plugins/001-prime-strategy-translate-accelerator/
# vi 001-prime-strategy-translate-accelerator.php
public function update_psta_settings() {
if ( isset( $_POST['psta_update'] ) ) {
if ( isset( $_POST['cache_force_delete'] ) ) {
switch ( $this->setting['cache_type'] ) {
case 'apc' :
if ( function_exists( 'apcu_clear_cache' ) ) {
- apcu_clear_cache( 'user' );
+ apcu_clear_cache();
}
break;
修正といってもリファレンスを参考にパラメータを削除するだけです。
APCが復活!するも・・
ファイル修正後にWordPressの管理画面でプラグインを呼び出すとキャッシュタイプに「APC」が復活しました。
ですが、ただ表示されているだけかもしれないので、APCu INFOで利用状況を確認します。
APCuをしっかり利用していることが確認できました。
次に実際の効果はどうなのか確認するためキャッシュタイプ毎にapachebenchを動かしてみました。ところが「ファイル > APC > キャッシュなし」という結果に。
ab -c 100 -n 5000 http://192.0.2.128/ 001 Prime Strategy Translate Accelerator キャッシュタイプ:キャッシュなし Requests per second: 133.01 [#/sec] (mean) Time per request: 751.813 [ms] (mean) Time per request: 7.518 [ms] (mean, across all concurrent requests) Transfer rate: 1255.69 [Kbytes/sec] received キャッシュタイプ:ファイル Requests per second: 135.06 [#/sec] (mean) Time per request: 740.399 [ms] (mean) Time per request: 7.404 [ms] (mean, across all concurrent requests) Transfer rate: 1275.05 [Kbytes/sec] received キャッシュタイプ:APC Requests per second: 134.93 [#/sec] (mean) Time per request: 741.098 [ms] (mean) Time per request: 7.411 [ms] (mean, across all concurrent requests) Transfer rate: 1273.84 [Kbytes/sec] received>
検証環境のストレージはSSDなので、キャッシュファイル参照でもアクセス時にボトルネックにならないということなのかもしれません。なお本番環境(さくらのVPS/SSD)もAPCu対応に改造してみましたが、両者の明確な違いは出ませんでした。php8自体の高速化の恩恵なのかもしれませんね。
まとめ
今回はちょっとした修正で「001 Prime Strategy Translate Accelerator」をAPCu対応に改造することができました。しかし本ブログではその恩恵は特に得られずAPCuのメモリ消費分だけ無駄になるので、改造したところは結局もとに戻しました。
APCからAPCuに変わってずいぶんと経つのに開発元の「Prime Strategy」が長いこと改修を加えないのは、その必要がないからかもしれませんね。