情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Herokuアプリケーションの仮想マシンについて

HerokuアプリケーションはHerokuの仮想マシン上で実行されます。

仮想マシンには下のような種類があります。

  • free・・・無料で使用できる仮想マシンです。メモリは512メガバイトです。また、HTTPリクエストを処理する仮想マシンとして使用した場合には30分間HTTPリクエストが到来しなかった場合には動作が停止します。動作が停止した後にHTTPリクエストが到来した場合には自動的に動作が再開します。また、free仮想マシンを実行した場合にはアカウント毎に1か月毎に割り当てられる無料枠を消費します。無料枠を全て消費した場合には次月に新しい無料枠が割り当てられるまでfree仮想マシンを実行することはできなくなります。無料枠は月初に550時間が割り当てられます。ただし、アカウントにクレジットカードを登録した場合には追加で450時間が割り当てられます。つまり、合計で1000時間が割り当てられます。
  • hobby・・・有料で使用できる仮想マシンです。メモリは512メガバイトです。freeとは異なり、HTTPリクエストを処理する仮想マシンとして使用した場合であっても動作が停止することはありません。24時間動き続けます。
  • standard-1x・・・有料で使用できる仮想マシンです。メモリは512メガバイトです。hobbyとは異なり、プロ向けの特別な機能を使用することができます。
  • standard-2x・・・有料で使用できる仮想マシンです。standard-1xとは異なり、メモリは倍の1024メガバイトであり、CPUも倍の計算能力を有します。
  • performance-m・・・有料で使用できる仮想マシンです。standard-2xとは異なり、メモリは2.5ギガバイトであり、CPUも倍程度の計算能力を有します。また、物理的なCPUを他の仮想マシンと共有することはなく、自身専用の物理的なCPUを使用することができます。
  • performance-l・・・有料で使用できる仮想マシンです。performance-mとは異なり、メモリは14ギガバイトであり、CPUも4倍程度の計算能力を有します。

また、Herokuアプリケーションは複数の仮想マシンを同時に別々の動かし方で動かすこともできます。この動かし方をプロセスタイプと言います。

プロセスタイプは基本的には自由に設定することができ、名称と仮想マシンに対するコマンドから成ります。

プロセスタイプを設定するにはProcfileという名称のファイルをHerokuアプリケーションのコードの最上位のフォルダにコードの一部として作成します。

Procfileファイルにはプロセスタイプの設定を1行に1つずつ記述します。それぞれのプロセスタイプの設定を記述するにはプロセスタイプの名称を記述し、:を記述し、コマンドを記述します。

ただし、webという名称のプロセスタイプは必ず設定しなければなりません。そして、webプロセスタイプは必ずHTTPリクエストを処理する仮想マシンを表しますので注意してください。

また、Herokuアプリケーションは複数の仮想マシンを同時に同じ動かし方(プロセスタイプ)で動かすこともできます。

そして、それぞれの仮想マシンには名称が割り当てられます。たとえば、仮想マシンのプロセスタイプがxである場合にはx.1x.2、・・・というようなxの後に.と数値が付加された名称が割り当てられます。

なお、Herokuアプリケーションを実行している仮想マシンは1日に1回程度再起動されることがあります。

再起動が行われると仮想マシンのローカルのファイルシステムに加えた変更は全てリセットされますので注意してください。たとえば、仮想マシンのローカルのファイルシステムに保存したファイルは再起動の過程で全て削除されます。

仮想マシンに対する制限

free仮想マシンを使用しているHerokuアプリケーションはfree以外の仮想マシンを使用することはできません。

また、hobby仮想マシンについても同様の制限があります。つまり、hobby仮想マシンを使用しているHerokuアプリケーションはhobby以外の仮想マシンを使用することはできません。

それから、free仮想マシンを使用しているHerokuアプリケーションは複数のプロセスタイプの仮想マシンを同時に動かすことはできません。ただし、アカウントにクレジットカードを登録した場合には2つまでのプロセスタイプの仮想マシンを同時に動かすことができます。

また、free仮想マシンやhobby仮想マシンを使用しているHerokuアプリケーションは複数の仮想マシンを同時に同じプロセスタイプで動かすことはできません。

それから、Herokuアプリケーションは同時に最大でも100個までの仮想マシンしか使用することができません。

プロセス数やスレッド数に関する制限

仮想マシンで動かすことのできるプロセス数やスレッド数の合計の上限は仮想マシンの種類に応じて下のように決まっています。

  • free・・・256
  • hobby・・・256
  • standard-1x・・・256
  • standard-2x・・・512
  • performance-m・・・16384
  • performance-l・・・32768

仮想マシンの自動再起動

仮想マシンが消費しているメモリの量が仮想マシンの種類に応じて下の量より多くなった場合には仮想マシンは自動的に再起動されます。

  • free・・・1ギガバイト
  • hobby・・・1ギガバイト
  • standard-1x・・・1ギガバイト
  • standard-2x・・・2ギガバイト
  • performance-m・・・5ギガバイト
  • performance-l・・・28ギガバイト

また、Herokuアプリケーションが自分から終了した場合には仮想マシンは自動的に再起動されます。ただし、再起動は下のような形で行われます。

  • Herokuアプリケーションが自分から終了するのが初めてであった場合にはすぐに再起動が行われます。
  • Herokuアプリケーションが自分から終了するのが2回目であった場合には20分後に再起動が行われ、3回目であった場合には40分後に行われ、4回目であった場合には60分後に行われ、5回目であった場合には180分後に行われ、6回目であった場合には320分後に行われます。
  • Herokuアプリケーションが自分から終了するのが7回目以降であった場合には320分後に再起動が行われます。
  • ただし、この回数はHerokuアプリケーションの新しいリリースが作成されたり、仮想マシンの手動再起動を行ったりした場合にはリセットされます。

仮想マシンの起動

仮想マシンの起動時には毎回Herokuアプリケーションが実行される前にHerokuアプリケーションのコードの最上位のフォルダの.profileという名称のファイルに記述されているスクリプトが実行されます。

そのため、Herokuアプリケーションを実行する前に行いたい処理を記述するには.profileファイルにスクリプトを記述するようにします。

仮想マシンの表示

Herokuアプリケーションが実行されている仮想マシンを表示するにはheroku psコマンドを実行します。

第1引数以降にプロセスタイプを指定します。この引数は指定しなくても構いません。

また、heroku psコマンドには下のようなオプションを付加することができます。

  • -a--app)・・・Herokuアプリケーションの名称を指定します。デフォルトは現在のフォルダに存在するHerokuアプリケーションの名称です。
  • -r--remote)・・・HerokuアプリケーションのGitリポジトリのリモートの名称を指定します。
  • --json・・・情報をJSON形式で表示します。

たとえば、下のようにします。

C:\work\heroku\app1>heroku ps
Free dyno hours quota remaining this month: 549h 24m (99%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping

=== web (Free): npm start (1)
web.1: idle 2017/02/04 15:42:15 +0900

仮想マシンの終了

Herokuアプリケーションが実行されている仮想マシンを終了するにはheroku ps:stopコマンドかheroku ps:killコマンドを実行します。

第1引数に仮想マシンの名称を指定します。

あるいは、プロセスタイプを指定することもできます。プロセスタイプを指定した場合には指定したプロセスタイプの全ての仮想マシンが終了されます。

また、heroku ps:stopコマンドやheroku ps:killコマンドには下のようなオプションを付加することができます。

  • -a--app)・・・Herokuアプリケーションの名称を指定します。デフォルトは現在のフォルダに存在するHerokuアプリケーションの名称です。
  • -r--remote)・・・HerokuアプリケーションのGitリポジトリのリモートの名称を指定します。

仮想マシンの再起動

Herokuアプリケーションが実行されている仮想マシンを再起動するにはheroku ps:restartコマンドを実行します。

第1引数に仮想マシンの名称を指定します。

あるいは、プロセスタイプを指定することもできます。プロセスタイプを指定した場合には指定したプロセスタイプの全ての仮想マシンが再起動されます。

この引数は指定しなくても構いません。この引数を指定しなかった場合にはHerokuアプリケーションの全ての仮想マシンが再起動されます。

また、heroku ps:restartコマンドには下のようなオプションを付加することができます。

  • -a--app)・・・Herokuアプリケーションの名称を指定します。デフォルトは現在のフォルダに存在するHerokuアプリケーションの名称です。
  • -r--remote)・・・HerokuアプリケーションのGitリポジトリのリモートの名称を指定します。

仮想マシンのスケール

特定のプロセスタイプの仮想マシンの数を増減させることをスケールと言います。

Herokuアプリケーションの仮想マシンをスケールするにはheroku ps:scaleコマンドを実行します。

第1引数にプロセスタイプ毎の仮想マシンの数を指定します。

プロセスタイプ毎の仮想マシンの数を指定するにはプロセスタイプの名称を記述し、=を記述し、仮想マシンの数を記述します。あるいは、仮想マシンの数の代わりに仮想マシンを幾つ増減させるかを(+-を使用して)指定することもできます。また、それぞれのプロセスタイプに対する指定は空白で区切ります。

また、heroku ps:scaleコマンドには下のようなオプションを付加することができます。

  • -a--app)・・・Herokuアプリケーションの名称を指定します。デフォルトは現在のフォルダに存在するHerokuアプリケーションの名称です。
  • -r--remote)・・・HerokuアプリケーションのGitリポジトリのリモートの名称を指定します。

仮想マシンのリサイズ

特定のプロセスタイプの仮想マシンの種類を変更することをリサイズと言います。

Herokuアプリケーションの仮想マシンをリサイズするにはheroku ps:resizeコマンドかheroku ps:typeコマンドを実行します。

第1引数にプロセスタイプ毎の仮想マシンの種類を指定します。

プロセスタイプ毎の仮想マシンの種類を指定するにはプロセスタイプの名称を記述し、=を記述し、仮想マシンの種類を記述します。また、それぞれのプロセスタイプに対する指定は空白で区切ります。

また、heroku ps:resizeコマンドやheroku ps:typeコマンドには下のようなオプションを付加することができます。

  • -a--app)・・・Herokuアプリケーションの名称を指定します。デフォルトは現在のフォルダに存在するHerokuアプリケーションの名称です。
  • -r--remote)・・・HerokuアプリケーションのGitリポジトリのリモートの名称を指定します。
pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Heroku