3

昨日、SQLite のパフォーマンスの問題に関する質問を投稿しました ( Zend Db PDO_sqlite の挿入および更新クエリでのひどいパフォーマンス)。いくつかのテストの後、メソッドが SoapServer を介して呼び出された場合にのみ問題が発生するようです (ネイティブ PHP SoapServer クラスと Zend_Soap_Server クラスの両方を試しました)。

テスト ケース - SQLite DB INSERT および UPDATE DB 操作を使用する 10 個のメソッドを呼び出します。

これがどのように機能するかのいくつかのケースを次に示します。

1.コントローラーを介して - Soap サーバーを使用せずに。ローカルホスト:~0.3 秒、リモート サーバー:~0.3 秒

2.Soap サーバー経由。1回目の電話。ローカルホスト:~1~2秒、リモートサーバー:~7秒!

3.Soap サーバー経由。いくつかの呼び出し。ローカルホスト:~1-10 秒、リモート サーバー:~7 秒

3 番目のケースはあまり気にしません。おそらく、ローカル サーバーのパフォーマンスの問題である可能性があります。重要なことは、リモートサーバーで安定して動作することです。

一方、単純な 10 個のメソッド呼び出しの 7 秒は信じられないほど長いです。明らかに - この 7 秒の一部はクライアントとサーバー間の通信です。ケース 1 ではそれが省略されていますが、それほど遅くはないと思います。

デバッグのためにすべてをログに記録していますが、ケース 1 で呼び出されたのと同じ SQLite メソッドが 0.00x-0.02 秒かかり、ここでは ~0.15-0.45 秒かかります。

問題は何ですか?SOAP を使用すると急激に遅くなるのは普通のことですか? (これは私の最初の石鹸サーバー プロジェクトです)。

編集:私が見つけた別の重要なログの事実:

情報 -2012-04-26 13:08:07.782679 クラス: SoapController。メソッド: SoapController::hadleWSDL。ライン: 18.

情報-2012-04-26 13:08:08.318641 * システム起動 *

つまり、基本的には、2 つのメソッドが呼び出される間の時間です。少量のデータを使用したクライアント/サーバー通信で 0.5 秒を超えると、私には多くのように思えます。以下は、handleWSDL アクションのコードです。

$options = array(
    'encoding' => 'UTF-8',
    'cache_wsdl' => WSDL_CACHE_BOTH,
    'uri' =>$this->_WSDL_URI
);  
$soap = new Zend_Soap_Server(null, $options); 
$soap->setClass('SoapServerFunction');
$soap->setObject(new SoapServerFunction());
$soap->handle();

アプリケーションは非常に単純です。SOAP メソッドは 1 つのパラメーターを取り、それに基づいて 1 つのキャッシュ オブジェクトが作成され、データが処理され、データの一部が XML 形式で返されます。

速度を上げるために私ができること、または速度が低下する本当の理由を追跡する方法について、事前に感謝します。

よろしくお願いします!

4

1 に答える 1

0

サーバーのアドレスに FQDN を使用していますか? その場合、実際には DNS 関連である可能性があります。また、物理システムが実際に行っていることをあまり制御できないため、仮想ホストではなく実際のシステムですべてを試してみることをお勧めします。

次に、xdebug をインストールしてkcachegrindまたはwincachegrindを使用することをお勧めします。これにより、システムの動作をより詳細に把握できます。

第 3 に、PostgreSQL のpg_stat_statements()を利用して、遅いクエリをログに記録できます。

于 2012-06-13T13:13:38.863 に答える