スティルハウスの書庫の書庫

はてなダイアリーで書いてた「スティルハウスの書庫」を移転してきました。

謎なエラーのためにお金を払うの巻

appengineをここ10日くらいproductionで運用して、もうひとつ気づきました。CPUコストのほとんどが、アプリケーションの正常動作ではなくて、Datastoreやmemcacheが勝手に固まる謎のエラーによるものってことです。

Datastoreやmemcacheが固まると、そのまま30秒タイムアウトが発生するまでリクエストが引っ張られます。その時間がそのままCPU消費時間としてカウントされるのです。で、現状のクライアントの作りでは、そうしたエラーが発生したら、数秒おいてすぐにリクエストを再送(リトライ)する仕組みにしています。その結果、1人とか2人のユーザー(おそらくこれらの人がアクセスしているApp Serverノードやタブレットサーバーが不調と想像)が延々とリトライすることで、上記グラフのCPU時間の大半を消費していしまいます。こういった固まるエラーが発生していないときは、アプリのCPU消費はとても少ないです(0.5とか)。

まあ、私のコードやデータが原因という可能性もありますが(それにしても固まるってのはどうだ)、水道管から水漏れしてたらその分請求されたみたいで納得いかねえ。。(っても1.5ドル/1日くらいだけど)