python2.7でlatencyが高い

閲覧: 181 回
最初の未読メッセージにスキップ

Yosuke Suzuki

未読、
2011/12/16 0:43:582011/12/16
To: google-app-engine-japan
スズキと申します。

python2.5からpython2.7への切り替えをしようと思っているのですが、
GAEの本番サーバーにデプロイしたところ、
今までに比べてかなりlatencyが高い状態になってしまいました。

Average Latencyが
24282.8 ms
など5000msから1万ms程度で推移しています。

今までは、数百msで収まっていました。

Applicationのノブの設定で、
Pending Latency: ( 110ms - 1.0s )
と設定していますが、Latencyが全然下がってきません。

Frameworkはkay-frameworkで、
python2.7用のブランチを使っています。

インスタンス数は、従来より減っているようですが、
パフォーマンスは下げたくないというところです。

python系の皆様で、
python2.7に切り替えた方の状況などいかがでしょうか?

twitterで見ていたら、py2.5->py2.7で
10インスタンスから2インスタンスに減ったというような話を見ましたが、
パフォーマンスは同程度なのでしょうか?

ちなみに、今回デプロイして試しているのは本番サーバーとは言っても
用途は開発系で、Full Text Searchが使えるゾーンになっています。
このこともlatencyが高いことに影響しているのでしょうか?
(ちなみにpy2.7環境にするとFull Text Searchが試せないようですが)

設定やコードの書き方などでlatencyを下げられる方法などあれば、
ぜひご教授いただければと思います。

よろしくお願いします。
--
--------------------------
Yosuke Suzuki

Takashi Matsuo ♟

未読、
2011/12/16 0:52:092011/12/16
To: google-app-...@googlegroups.com
おっしゃるとおり、現在 Full Text Search のテストアプリは別クラスターに置かれているので、状況が大きく異なります。
新しく application を作ってそこで動かしてみてください。

他に原因として考えられることは CPU を多く使う(RPC の API では無く) Application だと、現在 Python2.7 の Runtime では性能があまり出ません。
ハンドラー内でどのような処理をしていますか?
 

設定やコードの書き方などでlatencyを下げられる方法などあれば、
ぜひご教授いただければと思います。

よろしくお願いします。
--
--------------------------
Yosuke Suzuki

--
このメールは Google グループのグループ「Google-App-Engine-Japan」の登録者に送られています。
このグループに投稿するには、google-app-...@googlegroups.com にメールを送信してください。
このグループから退会するには、google-app-engine...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/google-app-engine-japan?hl=ja からこのグループにアクセスしてください。




--
Takashi Matsuo | Developer Advocate | tma...@google.com | 03-6384-9224

Yosuke Suzuki

未読、
2011/12/19 2:28:192011/12/19
To: google-app-...@googlegroups.com
皆様

松尾さんといろいろやり取りさせていただいた結果、
python2.7でlatencyが高い問題の現状での解決ができましたので
フィードバックさせていただきます。

現状のpython2.7環境では、taskqueなどで重い処理をしていると
通常のサービス系にも影響が出てしまうようです。python2.5系では起きていませんでした。

そこで、taskqueの処理をbackendsに持って行くように変更しました。

backendsの利用は以下の松尾さんのブログを参考にしました。
http://blog.shehas.net/2011/09/07/taskqueue-instance

backends.yamlを作成して、
taskqueをまわすためのqueue.yamlとcron.yamlに作成したbackendへのtarget指定をしました。

ここまではほとんど時間もかからずに適用できました。
これだけでユーザー向けのレスポンスも改善し、正常になりました。

今回の問題はFull Text Searchとは関係なかったようです。

backends自体が初めて使ったのでいくつかはまっていたところが、ありましたので
書いておきます。

kay-frameworkでは
python manage.py appcfg update
でデプロイできますが、backendsはこれではデプロイされませんでした。

pyhotn manage.py appcfg backends update
とbackendsもデプロイ作業が必要でした。

それから、backendsからタスクが起動した際に、
/_ah/startで404エラーが出てしまってました。

以下をapp.yamlに設定すれば問題ないかと思っていたのですが、うまくいかず。。。
- url: /_ah/start
script: kay.main.application
login: admin

仕方がないので、
/_ah/start
が404にならないように、とにかく簡単なResponseを返す
関数を作って回避しています。
この辺かなり微妙ですので、他の解決策があれば、ご教授いただければと思います。

スズキ

2011年12月16日14:52 Takashi Matsuo ♟ <tma...@google.com>:

--
--------------------------
Yosuke Suzuki

najeira

未読、
2011/12/20 0:18:472011/12/20
To: google-app-...@googlegroups.com
najeiraです。

Python2.7でレイテンシが高いというのは、
concurrent requestsが有効になっている場合のことでしょうか?

concurrent requestsが有効になっている場合に、
TaskQueueで重い処理を行うと、その同じインスタンスで
ユーザのリクエストを受けると重くなってしまう、ということかなと想像しています。

TaskQueueが特に重くなかったり、
threadsafe: false にしていたら大丈夫かも知れません。

# backends を使って対処済みのようですが、参考までに

Yosuke Suzuki

未読、
2011/12/20 2:37:062011/12/20
To: google-app-...@googlegroups.com
> Python2.7でレイテンシが高いというのは、
> concurrent requestsが有効になっている場合のことでしょうか?
>
> concurrent requestsが有効になっている場合に、
> TaskQueueで重い処理を行うと、その同じインスタンスで
> ユーザのリクエストを受けると重くなってしまう、ということかなと想像しています。
>
> TaskQueueが特に重くなかったり、
> threadsafe: false にしていたら大丈夫かも知れません。
もともとfrontend instanceを節約したいと思っていたので、
threadsafe: safe
にしています。

ただ、そのことでユーザリクエストを受けるほうにも影響が出るとは
あまり考えていませんでした。

> # backends を使って対処済みのようですが、参考までに
backendsにしたことで、重さの問題は解消し
instance数はこちらでかなりコントロールできるようになりました。

taskqueに入れていたのはほとんどがユーザーの活動に関わらず、
定期タスクとして動いていた部分なので、python2.7にかかわらず
早めにbackendsに移行しておけばよかったです。

スズキ


--
--------------------------
Yosuke Suzuki

全員に返信
投稿者に返信
転送
新着メール 0 件