メモリ管理

fusion_place の運用にあたっては、物理メモリ量および fusion_place のプログラムに割り当てられるメモリ量などを区別して、それぞれを管理する必要があります。

物理メモリ量の管理(サーバ機・クライアント機)

物理メモリ量は、各コンピュータが実際に搭載しているメモリの量です。「動作環境」をご参考に搭載すべきメモリ量を決定してください。

Windows の仮想メモリシステム
プログラムが使用するメモリの量が物理メモリの量を超える場合、一部のメモリ領域の内容がディスク上に退避されます(これを仮想メモリと呼びます)。退避されたデータが再び必要になれば、逆にディスクから物理メモリ上にロードし直され、かわりに、別のメモリ領域の内容がディスクに待避されます。
この仕組みは Windows が提供しており、「仮想メモリシステム」と呼ばれます。
仮想メモリシステムにおける、物理メモリとディスクの間でのデータ退避・ロード動作をそれぞれ「スワップアウト」「スワップイン」と呼びます。

スワップアウト・スワップインが頻繁に行われると、プログラム(fusion_place を含む)のパフォーマンスが著しく劣化します。物理メモリを十分に搭載して過度のスワップを避けて下さい。

使用メモリ量の確認

物理メモリ量のうちどれだけが使用されているかは、fusion_place を起動した状態で、Windows の「タスクマネージャ」を使用してご確認ください。タスクマネージャの詳しい使用方法はタスクマネージャのヘルプをご覧ください。

CTL+SHIFT+ESC の3つのキーを同時に押下するとタスクマネージャが起動します。

下図がタスクマネージャの画面例です(「パフォーマンス」タブを選んでください。また、Windows のバージョンにより表示項目が多少異なります)。

Windows タスク マネージャ

fusion_place のサーバプログラムに割り当てられるメモリ量の管理

物理メモリが十分にあっても、それが fusion_place に割り当てられていなければ、やはりメモリ不足になります。この場合、「メモリ不足エラー」が発生します。サーバ機でメモリ不足エラーが発生すると、プログラムは予期せぬタイミングで強制終了させられます。この結果、データベース中のデータが壊れる等のトラブルが生じることがあり得ます。データベースのバックアップを適時に取得するとともに、メモリ不足エラーを回避するようご留意ください。

インストール時の初期設定では、fusion_place サーバプログラムには 256M バイトのメモリが割り当てられます。これは、多くの場合十分な量ですが、データ量が多いアプリケーションを使用する場合には、不足することもあります。

割り当てられるメモリがすべて物理メモリとして存在する必要があるわけではありません。fusion_place に 256 M バイトのメモリが割り当てられていても実際に頻繁に使われるのはその半分程度とすれば、残りのメモリ領域の内容は自動的にスワップアウトされディスクに一時退避されます。これは上述した Windows の仮想メモリシステムの働きによるものです。

メモリ不足エラー

メモリ不足の時には、以下のようなエラーメッセージが表示されます。

fusion_place エラー

メモリ割り当て量の調整

メモリ割り当て量を調整するには、Windows のスタートメニューからサーバ管理ツールを起動します。

  1. スタートメニューから 以下の項目(プログラム)を選択します。

    すべてのプログラム  fusion_place premium(又は standard)n.n…  s1.fusion_place サーバ設定

    ⇒ 「fusion_place server Properties」ダイアログボックスが表示されます。

    fusion_place server Properties General

  2. 上記ダイアログボックスで「Java」タブを選択します。

    Java 実行環境に関する設定画面が表示されます。

    fusion_place server Properties Java

  3. 上記画面で、Maximum memory pool(最大メモリ割り当て量)の欄に、適切なメモリ割り当て量を設定します。

    あわせて、Initial memory pool(初期メモリ割り当て量)を、最大メモリ割り当て量と同じ値にすると、fusion_place の処理速度が向上することがあります。
    ただし、初期メモリ割り当て量が最大メモリ割り当て量を超えないようにしてください。

    他の項目の設定内容を変更しないでください。
    割り当て量の設定が終われば、OK ボタンをクリックしてダイアログボックスを閉じてください。
  4. サーバープログラムをいったん停止し、再起動 してください。

    再起動しないと、新しいメモリ割り当て量が適用されません。

fusion_place のクライアントプログラムに割り当てられるメモリ量の管理

fusion_place のクライアントプログラムには、fusion_place [マネージャ][コントリビュータ][ブラウザ][Excel-Link] の4種類がありますが、このうち、[Excel-Link] については、Microsoft Excel によってメモリ割り当て量が自動調整されるので、ユーザ側ではメモリ管理の必要はありません。

クライアント PC で 32-bit の fusion_place 実行環境を使用している場合、fusion_place [マネージャ][コントリビュータ][ブラウザ] に対しては、それぞれ 最大で約 256M バイト のメモリが割り当てられます。これは、ほとんどの場合十分な量ですが、巨大なシートを表示する場合や大容量のデータをインポートする場合にはメモリ不足になる可能性もあります。

メモリ不足エラー

メモリ不足の時には、以下のようなエラーメッセージが表示されます。

fusion_place クライアント側 エラー

メモリ割り当て量の調整

上記のメモリ量で不足する場合、以下の2つの対応が可能です。

(1)クライアントプログラムにメモリー 1G バイトを割り当てて起動するメニューが別途用意されています。多量のメモリを要する処理を行うのが、管理者など一部のユーザに限られる場合、こちらのメニューをお使い下さい。メニューの URL については、「Java クライアントをWebブラウザから起動する」をご参照下さい。

(2)サーバ側での設定(下記)により、メニューから起動したクライアントプログラムに割り当てられるメモリ量を調整することが出来ます。この方法を用いると、例えば、最大メモリ割り当て量を、256M バイトから 512M バイトに変更することが可能です。

割当メモリサイズが大きすぎるとクライアントが起動しないことがあります。特に、32-bit 版の fusion_place 実行環境を使用する場合、max-heap-size は、1024m~1536m 程度が上限となります(PC の状況により異なります)。

サーバ上の Tomcat 設定ファイルへの記述追加

Tomcat の設定ファイル server.xml に記述追加して下さい。server.xml の所在は「インストール時指定情報の記録場所」をご参照ください。 server.xml の内容は XML 形式の文書となっていますが、その中の Context 要素(のうち、path="/fusionplace" と指定されているもの)の配下に、いくつかの Environment 要素(環境変数)を付け加えることで、クライアントプログラムに割り当てられるメモリ量を指定できます。以下に記述例を挙げます:

  <Context docBase="fusionplace.war" path="/fusionplace">
      <Environment name="fusionplace/dbms" value="H2" type="java.lang.String"/>
      <Environment name="fusionplace/pivot_time_out" value="60000" type="java.lang.Integer"/>

          <!-- ここより、クライアントプログラムに割り当てられるメモリ量を指定するための記述項目 -->

      <Environment name="fusionplace/initial_heap_size" type="java.lang.String" value="512m" />
      <Environment name="fusionplace/max_heap_size" type="java.lang.String" value="1024m" />

      <!-- ここまで、クライアントプログラムに割り当てられるメモリ量を指定するための記述項目 -->
      ・・・
  </Context>

上記例の通り、各 Environment 要素は、 name, type, value という3つの属性を備えています。下表に従い、 name, type にはそれぞれ決まった値を設定し、value にはお使いのメールサーバへの接続に際して適用する値を設定して下さい。なお、Environment 要素は複数ありますが、記述は順不同です。

name
(環境変数名)
type
(環境変数の型)
value
(環境変数の値)

fusionplace/initial_heap_size

java.lang.String

初期メモリ割り当て量。末尾の m 又は g はメガバイト・ギガバイトをそれぞれ表します。

例) 64m, 1024m. 1g

fusionplace/max_heap_size

java.lang.String

最大メモリ割り当て量。末尾の m 又は g はメガバイト・ギガバイトをそれぞれ表します。

例) 64m, 1024m. 1g

上記の2つの環境変数は必須ではありません。また、いずれか、一方だけでも指定可能です。両方指定する場合、max-heap-size は、initial-heap-size 以上として下さい。

H2 データベースのキャッシュに割り当てられるメモリ量

バージョン 6.1 にて、「H2 データベースのキャッシュに割り当てられるメモリ量」は自動設定されるようになりました。以下の記述は、バージョン 6.0 以前のものです。6.1 以降では「CACHE_SIZE」を指定しても適用されません。

サーバプログラムに対して割り当てられるメモリ量の一部は、H2 データベースが「キャッシュ」として利用します。キャッシュには、データベース中で頻繁にアクセスされるデータが保持されるので、キャッシュのサイズを大きくすると、データベースアクセスが速くなります。キャッシュのサイズは。Tomcat の設定ファイル server.xml に記述されています。server.xml の所在は「インストール時指定情報の記録場所」をご参照ください。

server.xml の内容は XML 形式の文書となっていますが、その中の Context 要素(のうち、path="/fusionplace" と指定されているもの)の配下に、 Resource 要素がひとつあります(name 属性値が "fusionplace / datasource")。その中に、下の例の太字箇所のように、「CACHE_SIZE=・・・」という記述がございます。ここに、KiB 単位で、キャッシュサイズを指定して下さい(下の例では、65536KiB すなわち 64 MiB と指定されています)。

  <Context docBase="fusionplace.war" path="/fusionplace">

    ・・・
    <Resource name="fusionplace/datasource"
      auth="Container"
      type="javax.sql.DataSource"
      maxActive="100"
      maxIdle="30"
      maxWait="10000"
      driverClassName="org.h2.Driver"
      url="jdbc:h2:C:\FusionPlace_DB\db\fusionplace;CACHE_SIZE=65536"
      username="…"
      password="…" />
    ・・・

  </Context>