基本的なHerokuアプリの読み込みに2秒かかるのはなぜですか?


100

サービスをテストするために2つの非常にシンプルなHerokuアプリを作成しましたが、最初にアクセスしたときにページをロードするのに数秒かかることがよくあります。

私がしたことは、単純なSinatraアプリを作成してデプロイすることだけでした。Herokuサーバーを台無しにしたり、テストしたりしたことはありません。応答時間を改善するにはどうすればよいですか?現在は非常に遅いため、どこから始めればよいかわかりません。それが役立つ場合、プロジェクトのコードはgithubにあります。

回答:


175
  • アプリケーションがしばらく使用されていない場合(サーバーのメモリから)アンロードされます。
  • 最初のヒットでロードされ、誰もアクセスせずに時間が経過するまでロードされたままになります。

これは、サーバーリソースを節約するために行われます。誰もあなたのアプリを使用しない場合、なぜリソースをビジー状態にし、本当に必要な人にそれらを使用させないのですか?
アプリに継続的なトラフィックが多い場合、アンロードされることはありません。

これに関する公式のメモがあります。


51
この問題を解決する最も簡単な方法は、2に、あなたのdynosを高めることである

5
@diegopau私はあなたが必要とするものを正確に実行する素晴らしいアプリ(wekkars.com)を見つけました。現時点ではベータ版のようですが、ここでは完全に機能します。
SteenhouwerD 2012年

68
アイドリングを防ぐためにサーバーにpingを実行すると、自分の巣が壊れます。あなたが話しているこれらのサービスは無料です。彼らは資源を節約する必要があります。誰もがサーバーにpingを実行した場合、スワップアウトされるものはなく、プロバイダーはスケールアップする必要があります。それはお金がかかります...さようなら無料サービス。この回答の投稿者は、サーバーにpingする提案を削除する必要があると思います。
GreenAsJade 2012

32
私はuptimerobot.comを使用してHerokuアプリに5分ごとに無料でpingを実行します。これにより、200OK(さらに重要でない場合はさらに重要)が表示され、アプリの応答性が維持されます。私はこれについて謝罪しません。私は10個のherokuアプリを持っていますが、そのほとんどは開発アプリまたはデモアプリですが、これは特にライブ/プロダクションであり、トラフィックが少ないにもかかわらず、要求されたときに迅速に応答する必要があります。これがHerokuのビジネスモデルへの脅威である場合、彼らは私たちがそれをするのを止めます。何千人ものグローバルユーザーがいるときは、別のdynoを立ち上げて、優れたサービスの料金を支払います。だから罪悪感の旅をやめて!:)
ED-209

3
私はトックと一緒です。新しいアプリは、サイトの読み込みが非常に遅いため、稼働する前にサイトを離れると、どのようにしてユーザーを獲得するはずですか?
デボラ2014年

14

Heroku w / VarnishおよびMemcachedで使用できるキャッシュオプションを調査することもできます。これらは、dynoとは関係なく永続化されます。

たとえば、不変のホームページがある場合、応答にCache-Controlヘッダーを追加することにより、それをVarnishで長期間キャッシュできます。そうすれば、ユーザーは、到着したときではなく、「何かをしたい」まで、負荷の影響を受けることはありません。


4

「スケーラビリティ:Herokuの仕組み」に対するトムロビンソンの回答を確認してください。Quora:http : //www.quora.com/Scalability/How-does-Heroku-work

Herokuは、サーバーリソースを多くの異なる顧客/アプリケーション間で分割します。アプリには、計算能力のブロックが割り当てられています。リソースの需要に基づいたHerokuパーティション。より多くの電力を必要とする人気のあるアプリケーションがある場合、より多くの「dyno」(アプリケーションコンテナー)を購入して、見返りにパイのより大きなチャンクを取得できます。

ただし、あなたの場合、無料のアプリを実行していて、あなた以外の人がいたとしても、ほとんどの人がアクセス/使用していません。したがって、Herokuは、アドレスへの要求があるまで、アプリをアンロードすることで、取得したリソースを削減します(本質的には休止状態にします)。この状態が発生し、アプリが長時間アイドル状態になっていると、再読み込みに時間がかかります。

リロード時間が重要な場合は、1つのdynoを追加して、アプリがスリープ状態にならないようにします。


3

私は同じ問題を抱えています。昨夜、Rails 3(1.9.2)アプリをデプロイしましたが、遅いです。1.9.2 / Rails 3がHerokuのベータ版であることは知っていますが、サポートチケットは、彼らが私に送信したいくつかの指示を使用して問題ないことを述べています。

長い時間が経過した後の最初のリクエストに最も時間がかかることを理解しています。理にかなっています。しかし、10秒もかからずにDBに接続していないページをロードするだけでは、かなり悪い場合があります。

とにかく、あなたは私がやろうとしていることを試してみたいかもしれません。それは私のアプリをプロファイリングし、ローカルでどれだけ時間がかかるかを確認します。400ミリ秒かかる場合は、何か問題があります。しかし、ローカルで50ミリ秒を取得し、それでもHerokuで10秒かかる場合は、何かが間違いです。

明らかに、キャッシュは役立ちますが、無料で5MBしか得られません。もう一度、1人のユーザーがサイトを使用するので、それほど遅くなることはありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.