前回作成した2つのレコードを作成するPHPを使用し、動作のパフォーマンス・サーバにかかる負荷を比較する。

2つのFileMaker Web公開について

測定前に予備知識として、FX.phpが利用するWeb公開と、FileMaker API for PHPが利用するWeb公開は異なるということを挙げておこう。FX.phpはデータのやり取りにFMPXMLRESULT文法のXMLを使用し、FileMaker API for PHPはfmresultset文法のXMLを使用する。

FMPXMLRESULT文法について - fms10_cwp_xslt_ja.pdf より引用

FMPXMLRESULT および FMPXMLLAYOUT:XML データにアクセスしたり、XSLT スタイルシートを使用するに は、FMPXMLRESULT および FMPXMLLAYOUT 文法も Web 公開エンジンとともに使用できます。XML エクスポートとカスタム Web 公開の両方に1つのスタイルシートを使用するには、FMPXMLRESULT 文法を使用する必要があります。レイアウト内の値一覧およびフィールド表示情報にアクセスするには、FMPXMLLAYOUT 文法を使用する必要があります。

fmresultset文法について - fms10_cwp_xslt_ja.pdf より引用

fmresultset:Web 公開エンジンには、この文法を使用することをお勧めします。この文法は、柔軟で XSLT スタイル シートオーサリングに最適化されており、名前によるフィールドアクセスや、関連セット(ポータル)データの操作をより簡単に行うことができます。また、この文法は、グローバル格納オプションや、集計および計算フィールドの識別など、FileMaker の用語や機能とより直接的なつながりを持ちます。この文法は、XML データへのアクセスと XSLT スタイルシートに使用できます。Web 公開を効率的に実行できるよう、この文法は、FMPXMLRESULT 文法よりも詳細になるように設計されています。

FX.phpはhttp://<ホスト>[:<ポート番号>]/fmi/xml/FMPXMLRESULT.xml(XML公開)に、FileMaker API for PHPはhttp://<ホスト>[:<ポート番号>]/fmi/xml/fmresultset.xml(PHP公開)にリクエストを発行する。基本的にFileMaker API for PHPが使用するfmresultset文法の方が取得する情報量が多く、多機能だ。その分、サーバにかかる負荷もFMPXMLRESULTと比較すると大きい。

FX.php/APIでのパフォーマンス測定

ここでの動作環境は次のとおり。

サーバPC (FileMaker Server)

  • OS: Mac OS X 10.6.2
  • CPU: 2GHz Intel Core 2 Duo
  • メモリ: 6G
  • FileMaker Server: 10.0.2.206
  • 負荷測定: アクティビティモニタ

クライアントPC

  • OS: Ubuntu 9.10
  • CPU: 2GHz Intel Atom CPU Z550
  • メモリ: 2G
  • 負荷測定: Apache JMeter 2.3.4

クライアントPCからApache JMeterを使用し、前回作成したfx_new.phpとapi_new_1.phpにアクセス。応答速度やスループット値を計測する。

  • 同時使用ユーザ数(スレッド数); 10, 20, 30, 40, 50
  • リクエスト回数: 1回
  • ループ数: 100

1回のテストでfx_new.phpとapi_new_1.phpにそれぞれ1,000~5,000回、個別にアクセスして結果を解析。サーバPC側ではアクティビティモニタを監視し、CPU使用率を監視した。結果は次のとおり。

サーバマシンのCPU使用率

それぞれ左がfx_new.php (FX.php)、右がapi_new_1.php (FileMaker API for PHP)の負荷となっている。

同時使用ユーザ10、総リクエスト1,000の負荷

同時使用ユーザ20、総リクエスト2,000の負荷

同時使用ユーザ30、総リクエスト3,000の負荷

同時使用ユーザ40、総リクエスト4,000の負荷

同時使用ユーザ50、総リクエスト5,000の負荷

CPU使用率は同時使用ユーザ数が10の場合はfx_new.phpが最大40%、api_new_1.phpが最大90%前後だった。同時使用ユーザ数が20以降の場合、fx_new.phpは最大90-100%、api_new.phpが最大100-120%といったところ。

クライアントPCパフォーマンス - fx_new.php

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time[ms]
10 1,000 193 35 7544 547.49 43.0 20.8 63202
20 2,000 410 36 16323 1170.17 40.5 19.57 89402
30 3,000 846 34 27252 2957.63 31.0 15.03 136550
40 4,000 998 35 31474 3477.46 34.3 16.62 196515
50 5,000 1213 35 54972 4775.98 33.0 16.41 267536
  平均 732 35 27513 2585.75 36.54 17.69  

クライアントPCパフォーマンス - api_new\_1.php

同時使用ユーザ数 総リクエスト数 Average[ms] Min[ms] Max[ms] Std. Dev. Throughput/sec KB/sec Time[ms]
10 1,000 411 68 5393 253.31 22.8 11.11 83696
20 2,000 791 68 16623 1483.95 22.1 10.76 170434
30 3,000 1394 67 38194 3351.41 19.5 9.48 234099
40 4,000 1671 67 38895 3652.72 21 10.24 320285
50 5,000 2283 79 63898 4816.25 19.8 9.65 412290
  平均 1310 69.8 32600 2711.53 21.04 10.25  

同時使用ユーザ数が10の場合は顕著な差は見られない。だが20ユーザ以降の場合は、かなりの差が出た結果となった。注目したい値はAverage(平均処理時間)とTime(処理完了までの時間)。同時使用ユーザ数が20以降、fx_new.phpとapi_new_1.phpでは1.5~2倍近いパフォーマンス差がでていることがわかる。レコード新規登録という簡単な処理だが、この差は軽視できないものだろう。同時ユーザ数があらかじめ多いと見込めている場合で処理を速くしたい場合は、FX.phpを使った実装の方が良いかもしれない。

なお、この辺りの処理についてはFileMaker Server 11にて改善されている可能性もある。まだ日本ではリリースされていないが、英語版のFileMaker Server 11を持っている方はぜひこれらの負荷測定を試してみてほしい。