ます’s Blog - どうでもいい記事100選

どうでもいい記事100選

APC 3.0.19

リリースされてました
「Initial PHP 5.3 support」とあるので、このリリースから正式に5.3をサポートって事なのかな。
まだまだリリースされそうな気配が無い5.3ですが、着々と準備は進んでいるようで。それにしてもMaintainersの数が凄いね。
で、この手のツールは使わなくなって久しいのですが、久々にPHPマニュアルを見たら興味深い説明が。


稼動中のWebサーバ上のファイルを書き換える場合、それを原始的(atomic)な手段で行うべきです。つまり、まずいったん一時ファイルに書き込み、準備ができた時点でそれをリネーム(mv)して正しい位置に移動します。多くのテキストエディタやcp、tarその他のプログラムはこの方式ではありません。ということは、ファイルの書き込み中にそのファイルがアクセスされる(そしてキャッシュされる)可能性があるわけです。apc.file_update_protectionは、新しいファイルをキャッシュするまでの遅延を設定します。デフォルトは2秒で、ファイルの更新時刻(mtime)がアクセス時刻と2秒未満しか違わない場合はファイルをキャッシュしないという意味です。更新の最中のファイルにアクセスしてしまった不幸な人には変なデータが見えてしまいますが、少なくともその変な状態がキャッシュされてしまうことはありません。rsyncなどの原始的な更新を保証する方式を利用することがわかっている場合は、値を0に設定することでこの機能を無効にできます。更新処理に2秒以上かかるようなシステムを利用している場合は、この値をもう少し大きくしたくなるかもしれません。

使うのを止めた原因の一つが、この設定で解消されそうな解消されなさそうな気がする。。。んだけど「更新の最中のファイルにアクセスしてしまった不幸な人には変なデータが見えてしまいますが、少なくともその変な状態がキャッシュされてしまうことはありません。」って。。。まぁ、元々の運用の仕方にも問題はあるんですけどね。後から入った身なので如何ともしがたい部分。
こちらと併用したら上手く動きそうな気配がするなぁ。。。改めて調べてみるか。

多くの処理が実行されるサーバでは、最初にサーバを立ち上げたときや多くのファイルを変更した場合などに、すべてのプロセスが同一のファイルをコンパイルしたりキャッシュしたりしてしまうことがあります。write_lockを有効にすると、ひとつのプロセスのみが未キャッシュのスクリプトをコンパイルするようになります。その間、他のプロセスはロック待ちをするのではなくキャッシュされていない状態で実行します。

ただ、どっちにしても、メモリを多く必要とするので使うのは厳しい。。。ただでさえブクブク太ってるのに更に怒られそう。っていうか、Sunの純正メモリは高い。_| ̄|○
どうにかこうにしかして事前コンパイルして運用する方法を模索しているんだけど、その候補としてZend Guardを検討中。トライアル版を試してみたんだけど「トライアル版は最適化しませんよ」的なメッセージが。。。駄目じゃん。ただ、トライアル版でもCPU使用率(若干)やメモリ使用率(こちらはそれなり)の削減は確認できました。実行速度は0.5秒が0.4秒と雀の涙程度に改善。
昔に購入したionCubeの製品があった事を思い出して、こちらでも確認。
最適化レベルを最大にすると、確かにCPU使用率と実行速度は一番良い結果(それでも、どんぐりの背比べ程度)だったのですが、逆にメモリ使用率が一番高かった(何もしていない時よりも)。なんで?Zend Guardの製品版ではどうなのかしら。。。たいして変わらないような気がするなぁ。
当初の懸念通り、インクルードするファイル量が多くなると(PHPコードを中間コード化できても)ファイルI/Oがネックになるのかな。単にロードするだけでも余裕で2秒くらいかかってるし。
APCを導入するとメモリ使用率は大幅に削減(約1/20)、CPU使用率も削減(約3/1)、実行速度も向上(約2倍)したりと(当然なのですが)メモリ上で完結できた方が良い結果。ただ、メモリ使用率についてはAPC設定値の分だけ増えるハズので(実質)APCが一番メモリ使用率が高いと思う。
気になるのは大量のファイル群を一つにまとめてエンコードしても、ファイルを分割した状態でエンコードしても、両者の結果は殆ど変わらなかったので、読みは若干外れてる。。。か?となると、復号・登録処理のどちらかで時間がかかってるって事なのかな。うーむ。
まぁ、アレだ。一つだけ言えるのは楽して性能を向上させる術は無い(甘い話には必ず裏がある)って事か。とほほ。言語単体で考えるのも限界があるしね。もっと全体的な視点で考えないと。地道に頑張ろう。