limits - herokaijp/devcenter GitHub Wiki
Herokuのプラットフォームの様々なコンポーネントに課される制限についての記事です。この記事では、コネクション数など、制限についてのみ記載しています。データベースが持つ能力など機能の話には言及しません。
制限を設けるのには様々な理由があります。時に制限は、基盤となるプラットフォームが構築されている方法を理由として存在しています。例えば、Herokuは1500行以上のログの履歴を保持しません。(ロギング用のアドオンを介して、残りのログを利用することは可能です)。また時に制限、良いユーザーとしての振る舞いを強制します。APIのリクエストは1時間に1500回以内と決められています。
各制限事項は、別のドキュメントの制限に関するドキュメントをリンクしてあります。リンク先の記事でより多くの情報が得られるでしょう。
Logplex
ログの履歴制限
Herokuは最新の1500行のログしか保持しません。もしそれ以上を保持したい場合はherokuのsyslog drain機能を用いて自身でログを管理して下さい。
ルーター
HTTPタイムアウト
最初のHTTPリクエストは30秒以内に応答データを返してください。(プロセスがアクティブであることを示すために完全な応答もしくは応答データの一部を返す必要があります。)プロセスが30秒以内に応答を返さないと、H12エラーがログに出力されます。
その後、55秒ごとにデータクライアントまたはプロセスからデータを送信する必要があります。もし55秒以上データの送信がない場合は、H15エラーがログに出力されます。
HTTP レスポンスバッファリング
The router maintains a 1MB buffer for responses from the dyno per connection.
ルーターは、各コネクションごとのdynoからレスポンス用に1MBのバッファーを保持します。
HTTP リクエストバッファリング
リクエストを処理する際、ルータは8KBのバッファを確保します。HTTPリクエストの各行とヘッダはそれぞれ8KBの長さまで許容されますが合わせて8KB以内に収まる必要があります。もしそれ以上のデータを含むリクエストが有った場合は、そのリクエストはディスパッチ前にルーターでドロップされます。
Dynos
Dyno メモリ
各 dyno のメモリは512MBです。
one-off dyneのタイムアウト
heroku run コマンドなどで利用される一時的なdynoのコネクションは1時間以上、非アクティブな状態が続くと切断されます。そのとき、dyneのあSIGHUPシグナルを創出します。このアイドルタイムアウトは、非アクティブなセッションを開きっぱなしにしたことによる課金を防いでくれます。
環境変数
環境変数データの容量は、キーと値を含めて各アプリごとに16kbまでです。
起動タイムアウト
dynoのwebプロセスが$PORTにアサインされるまでに60秒以上かかる場合はプロセスがKILLされます。
終了タイムアウト
dynoがKILLされた、または再起動された場合、その中のプロセスは10秒以内にSIGTERMを受け取ります。この10秒が過ぎるとそのプロセスはSIGKILLシグナルを受け取り強制的に終了します。
Dyno メモリ再起動
dynoのメモリサイズが三倍にまで達した場合、R15エラーを出力しdynoは再起動します。
Dyno 再起動制限
10分に1度、クラッシュしたdynoの再起動を試みます。起動失敗するようなコードをpushしてしまった場合、dynoは一旦起動してから10分後にまた再起動するということです。通常のケースでは、長時間のプロセスがクラッシュを引き起こした場合、勝手に再起動が行われます。ただし2回連続再起動に失敗した場合は10分間ダウンしたままとなります。
Dyno スケール
デフォルトでは、dynoのスケールは100までです。それ以上のdynoを希望の場合はサポートへ連絡して下さい。
プロセス / スレッド
1つのdynoに1度に256までのプロセス / スレッド(どんな状態のものも含む)が生成できます。この制限はプロセス数とスレッド数の合計値であることに注意して下さい。 255スレッドと1プロセスであれば、256プロセスと数えます。
ビルド
Slug size
コンパイル後のslugサイズは200MBです。殆どのアプリはこの制限に収まるでしょう。
Slug コンパイル
Slug コンパイルは15以内です。
Heroku Postgres
Dataclips row limits
Dataclips が返す行は29,999 行までです。
Dataclips query limit timeout
Dataclips 10秒以上かかるクエリをキャンセルします。この値は変更可能です。
Production層
- 最大 500 コネクション
- ストレージ容量: 1TB
- メモリキャッシュが可能(size dependent on plan)
スターとアップ層
- devは10,000 行、basicプランは 10,000,000行までしか参照できない。
- 最大20コネクション
- メモリキャッシュは利用不可
API
Heroku API limits
Heroku APIは1時間に1200回まで実行出来ます。