討論區: ヘルプ (!!!まずはWikiの「ボット作成に関わるよくある質問」を参照のこと!!!) (Thread #34183)

リクエスト過多のエラーが出て、BOTがリプライに反応しません (2013-06-26 23:40 by asasora77 #69265)

二週間ほど前にBOTのサーバーを立ててBOTを作り始めました。キャラボット v1.6.2.betaです。
一つのサーバーでBOTを五個作成しました。仮にAからEとします。
Aはフォロワー数950人くらい、Bは300人くらいです。

①AのBOTだけを稼働させて、残り4つには何も反応語句など入力しない状態で「一時停止」にチェックをいれておきました。この時点ではAは普通に動いていました。

②BのBOTの反応語句を入力しているときに、Datastore Read Operations が100%になってしまい、全てのBOTが停止しました。この時点ではA以外の4つのBOTはまだ「一時停止」にチェックがついたままでした。

③16時にリセットがかかり、AのBOTが再び稼働しはじめましたが、リプライにだけ反応しなくなりました。エラーログをチェックするとmessage - Rate limit exceeded code - 88 のエラーが出ていました。TL反応と通常ポストは正常に動いていました。TLとリプライの反応を3分から5分に変更しました。

④しばらく時間を置いてもリプライが反応なかったので、GoogleのApplicationのページからDatastore Viewer の下部にあるFiuhs Memcacheをクリックしまいた。これが正しい対処だったのかはよくわからないんですが、AのBOTのリプライが正常に作動するようになりました。しかし5分後くらいにまたリプライのみ停止、レート制限超過のエラーが出るようになりました。
とりあえず、リプライの有効と書かれたチェックボックスのチェックをはずして様子を見ることにしました。TL反応と定期ポストは作動させたままです。

⑤一週間ほど時間をあけて、BのBOTを稼働。BのBOTは正常に動きました。

⑥さらに二三日おいて、AのBOTのアプリケーションを謝って解除してしまったため、AのBOTのaccess tokenを作り直してふたたびAのBOTを設定。ついでにリプライのチェックボックの有効のところにチェックを入れたところ、AのBOTのリプライが正常に作動するようになりました。

⑦Aのリプライが正常に作動しはじめるほぼ同時にBのBOTが停止。エラーログを確認すると
org.soichiro.charactorbot.server.TwitterBot reply
WARNING: An exception was thrown at reply() getFriendTimeline. Detail : 401:Authentication credentials (https://dev.twitter.com/pages/auth) were missing or incorrect. Ensure that you have set valid consumer key/secret, access token/secret, and the system clock is in sync.
message - Could not authenticate you
code - 32
と出ていました。
これがなんのエラーかがよくわからないんですが、どこかのサイトでアプリケーションの連携に失敗してるときにこのエラーが出るみたいなのを読んで、BのBOTのaccess tokenを作り直しました。
新しいaccess tokenを設定しなおした直後、Datastore Read Operationsが100%になってOverQuotaになりました。
この間約2時間ほど、AのBOTは正常に稼働していました。

⑧16時にリセットがかかりBのBOTは再稼働を始めましたが、AのBOTが再びリプライにのみ反応せずmessage - Rate limit exceeded code - 88 のエラー。


今はBのBOTはリプライ通常ポスト共に正常稼働(TL反応はいれてません)。Aはリプライの有効のチェックをはずして定期ポスト(60分間隔)とTL反応(5分間隔)のみ稼働させている状態です。残り3つのBOTは何も編集せず未稼働の状態です。
Aのリプライのみリクエスト過多のエラーが出るのは、単純にAのフォロワーが多いからでしょうか。Bが停止している間はちゃんと動いてくれていたんですが……。
また、AのBOTの設定?がBのBOTに影響を及ぼすということはあるんでしょうか……。
A、Bともきちんと稼働させたいんですが、もう自分ではどうしていいかわからないためにスレッドを立てさせていただきました。

知識がないため質問文がおかしくなっていたり、まちがった対処をしていたりだとは思うんですが、どなたかご教授ください。よろしくお願いします。

RE: リクエスト過多のエラーが出て、BOTがリプライに反応しません (2013-06-27 09:29 by sifue #69270)

asasora77さん

症状から見るとTwitter APIの制限とGoogle App Engineの無料枠の制限と両方に引っかかっています。

まずTwitter APIの"message - Rate limit exceeded code - 88"に関しては、
タイムラインの流れを早くしているフォロワーをボットから外すことや、反応するキーワードを少なくする等の対策しかありません。
なおこの制限超過を何度もやっているとTwitterのアカウント自身がBanされて凍結されてしまうことがあります。

また、Datastore Read Operationsはbotのデータを編集する時に大量にリソースを消費してしまいます。
もし金銭的に余裕があるのであれば、クレジットカードを登録して、
Google App Engineのリソースを買うのも一つです。最低価格で1週間で2ドル程度ですが、
編集をよくするタイミングの今だけ設定するという手もありです。
ただ、無料枠でやりたいのであれば、ボットのデータのサイズを小さくするというのが対策になると思います。

試してみて下さい。

追伸
あとMemcacheに関してですが、内部的に、BotのテキストデータはすべてMemcacheというメモリのキャッシュシステムに
載せて、お金のかかるDatastoreへの読み込みアクセスが発生しないようにしています。
ただ、Botのデータが編集されるとそのMemcacheをクリアして、再度Datastoreからの読み込みをするため、
そこで大量のQuota(リソース)を消費するような仕組みになっています。

しふー
回覆: #69265