Archive for the ‘phalcon’ Category.

php extensionのススメ3(メモリ消費)

同時アクセス数が多いという事はweb(ap)サーバーのメモリ消費に注意しなくてはいけません。
webサーバーレイヤーではnginxが有利だと言われる部分はアプリレイヤーでも考慮する必要があります。

phalconフレームワークとCakePHPで単純にHelloWorld的なプログラムを実行してみます。
テンプレートでmemory_get_usage()をechoするだけのプログラムです。

phalconフレームワークは400Kくらいです。
phalcon

cakephpは10倍の4Mくらいです。
cakephp

DB接続すらせずに、Actionも空っぽでテンプレートでecho memory_get_usage()しているだけのプログラムで10倍のメモリ消費となります。
phalconフレームワークは早いだけではなくメモリ消費という最重要項目に関しても優秀です。
これは、先日説明したphpのzvalを思い出して下さい。
c言語のネイティブレイヤーでスタック変数を定義するのと、phpレイヤーで変数を定義するのとではメモリ消費が違います。
同じ処理をするにしても、ネイティブ側で例えばint型(私のPCは32bitなので4バイト)で良い値があるとします。
phpレイヤーでしか定義出来ない場合は、まず$aというポインタ変数として(私のPCは32ビットなので)4バイト
ポインタの参照先の実態として、zval構造体+共用体のメモリを消費します。
ネイティブで済ませる部分が多ければ多いほど、zvalの呪縛から解放されメモリ消費を抑える事も出来ると言うことです。

Actionやテンンプレートが空っぽでこれなのですから、CakePHPをそのまま使ってしまうと1アクセス当たり平均10MBは覚悟しておいた方が良いかもしれません。
対象サーバーでの同時アクセス数を100に設定したと仮定すると軽く見て1GBは覚悟しておくべき数値かと思われます。
1000アクセスだとすると10GBですね。
ゲーム開発の場合はマスターデータをKVSから全件取得したりもしますので、多めに考えておいた方が良さげです。
あくまでアプリレイヤーのメモリ消費ですので、webサーバーは別途メモリを消費します。
そしてAPCにキャッシュさせたデータもメモリを消費します。
APCのコンパイルキャッシュもメモリを消費しますので、プログラムの本数分消費します。

その他サーバー監視プロセスやログ収集プロセスなど最低限動いているプロセスもメモリを消費します。
これから考えてもApacheとnginxの項でも書いた、C10Kという単位は普通に馬鹿かと言いたくなる単位なのは、ご理解いただけるかと思いますw

プロジェクトスケルトンの作成

プロジェクトの設定とかは全くしていませんが、とりあえず動きました。
これでチュートリアルに進めます。
phalcon

Phalcon Developer Tool

Phalconフレームワークの使い方を勉強していきたいと思います。

ここからPhalcon Developer Toolsをダウンロードしてコマンドラインからプロジェクトスケルトンが作れるようです。
http://docs.phalconphp.com/en/latest/reference/tools.html

好きな所にインストールすれば良いのですが、私は/usr/local/binにインストールします。