基本チューニング

ここでは、iDempiereアイデンピエレ)のサーバー構築後に行うべき、基本的なチューニング設定について調査及び研究し、その成果をまとめています。

 

ページ目次

  1. iDempiereを早く&軽くするためのパラメータ設定
  2. javaの起動モード
  3. Javaのヒープ領域のチューニング
  4. PostgreSQLのチューニング
  5. 参考サイト
  6. 参考文献
OES広告

iDempiereを早く&軽くするパラメータ設定

iDempiereはパラメータ設定を変更する事により、画面の表示速度を向上させたり、サーバー側の処理を軽減させる事ができます。iDempiereの初期状態が必ずしもパフォーマンス的に最適なパラメーター設定になっているとは限りませんので、特に下記の項目に注意してパラメータ設定を見直して下さい。

ひとつひとつの設定変更はとても小さな効果しかありませんが、チリも積もれば山となるで、総合してパラメータ設定を見直す事により、体感できるレベルでパフォーマンスを向上させる事も可能です。

【補足説明】日本語を主言語にする際は慎重な判断をして下さい。

2016年8月現在、日本語を主言語にする事によりいくつかの不具合が発見されています。そのため、日本語を主言語にする際は慎重な判断をして下さい。

 

【補足説明】JPiereではバージョン3.1より上記のパラメーター設定を見直して最適化しています。

オープンソースのERP iDempiereの日本商習慣対応ディストリビューションでプラグイン群であるJPiere(ジェイピエール)ではバージョン3.1より、上記で紹介しているパラメータ設定を見直し、最適化しています。ぜひ、iDempiereの初期設定の状態と比較して、パフォーマンスの違いを体感して下さい。

詳しくは"JPiereのパフォーマンス改善への取り組み"を参照して下さい。

JVMの起動モード

JVMの起動には、クライアントモードとサーバーモードの2種類の起動モードがあります。クライアントモードでは起動時間を早くしメモリサイズを縮小するように調整されます。サーバーモードでは、プログラムの実行速度が最大になるように設計されています。iDempiereでは当然サーバーモードで起動すべきです。

JVMの起動モードの確認

どちらのモードで起動されているかは、「java -version」コマンドで確認する事ができます。

$java -version

java version "1.6.0_27"

OpenJDK Runtime Environment (IcedTea6 1.12.6) (6b27-1.12.6-1ubuntu0.12.04.2)

OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode)

クライアントモード

起動時間を短縮し、メモリサイズを縮小するように調整されます。VM起動時に「-client」オプションを付けて実行します。

サーバーモード

プログラム実行速度が最大になるように設計されている。VM起動時に「-server」オプションを付けて実行します。

Javaのヒープ領域のチューニング

iDempiereのServer起動時にJavaのオプションを指定してJavaのヒープ領域のチューニングを行います。使用するJVMによっていは初期値が小さく設定されており、iDempiereのパフォーマンス的に好ましくない設定になっている可能性があります。

Linux環境でiDempiereを”./idempiere-server.sh”で起動する場合には、直接idempiere-server.shに記述されている内容がオプション指定に使用されます。

idempiere-server.sh

◆初期設定

$JAVA -Dosgi.compatibility.bootdelegation=true -Dosgi.noShutdown=true -Dosgi.framework.activeThreadType=normal -XX:MaxPermSize=192m -jar plugins/org.eclipse.equinox.launcher_1.*.jar -console 12612 -application org.adempiere.server.application

◆チューニング例

$JAVA -Dosgi.compatibility.bootdelegation=true -Dosgi.noShutdown=true -Dosgi.framework.activeThreadType=normal -Xms1536m -Xmx1536m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=256m -jar plugins/org.eclipse.equinox.launcher_1.*.jar -console 12612 -application org.adempiere.server.application

赤字の部分がオプション指定になります。上記はあくまでも一例ですので、環境に応じて適切な設定を行って下さい。

 

【技術情報】Java8の「-XX:PermSize」と「-XX:MaxPermSize」

Java(HotSpot)8から「-XX:PermSize」と「-XX:MaxPermSize」は無視されるようになりました。そして、代わりのパラメータ設定として、「-XX:MetaspaceSize」と「-XX:MaxMetaspaceSize」が追加されています。詳しくは下記のサイトが参考になるかと思います。

パラメータの意味

◆-Xms

 ヒープ全体(New領域+Old領域)のメモリ割り当ての初期値を指定します。たとえば、割り当てるメモリの初期値を128MBに設定する場合、”-Xms128m”と指定します。メモリ割り当ての初期値のデフォルト値は、JDK/JRE、OS、実行モード(32ビットor64ビット)などの環境により異なりますが、概ねJDK/JRE6では、5MB~10MBに設定されているようです。

◆-Xmx

 ヒープ全体(New領域+Old領域)のメモリ割り当ての最大値を指定します。たとえば、割り当てるメモリの最大値を256MBに設定する場合、”-Xmx256m”と指定します。メモリ割り当ての最大値のデフォルト値は、JDK/JRE、OS、実行モード(32ビットor64ビット)などの環境により異なりますが、概ねJDK/JRE6では、64MB~84MBに設定されているようです。

◆-XX:NewSize

 New世代領域のヒープサイズを指定します。たとえば、New世代領域のヒープサイズを128MBに設定する場合、”-XX:NewSize=128m”と指定します。

◆-XX:MaxNewSize

 New世代領域の最大ヒープサイズを設定します。 たとえば、New世代領域の最大ヒープサイズを128MBに設定する場合、”-XX:MaxNewSize=128m”と指定します。

◆-XX:PermSize

 Permanent世代領域の初期値を指定します。たとえば、Permanent世代領域の初期値を32MBに設定する場合、”-XX:PermSize=32m”と指定します。Permanent世代領域の初期値のデフォルト値は、JDK/JRE、OS、実行モード(32ビットor64ビット)などの環境により異なりますが、概ねJDK/JRE6では、12MB~20MBに設定されているようです。

◆-XX:MaxPermSize

Permanent世代領域の最大値を指定します。 たとえば、Permanent世代領域の最大値を128MBに設定する場合、”-XX:MaxPermSize=128m”と指定します。Permanent世代領域の最大値のデフォルト値は、JDK/JRE、OS、実行モード(32ビットor64ビット)などの環境により異なりますが、概ねJDK/JRE6では、64MB~84MBに設定されているようです。

  • KB(キロバイト)を指定する場合:”k”または”K”
  • MB(メガバイト)を指定する場合:”m”または”M”

設定が反映されている事をコマンドラインで確認する

◆Linuxでの確認

 Ubuntu12.4LTSでの確認

$sudo jmap -heap <PID>

 上記コマンドを実行すると、Heap Configurationとして、各種値が表示されますので、設定が反映されているかどうか確認する事ができます。※PIDは、psコマンド(例:ps -alx)を使用して一覧表示されるプロセスの「COMMAND」の項目に、"java -Dosgi.compatiblity.bootdel…"と表示されているプロセスのIDになります。もしくは、jpsコマンド(例:sudo jps -mlvV)を使用して確認して下さい。

設定が反映されている事をiDempiereの画面上で確認する

 行った設定をiDempiereの画面上でも確認する事ができます。

AboutWindow
AboutWindow

PostgreSQLのチューニング

PostgreSQLのチューニングについては、最低限でも"shared_buffers"と"work_mem"の設定は意識していおた方が良いと思います。

共有バッファ(shared_buffers)

PostgreSQLのshared_buffesの初期値はかなり少なめに設定されているようです。この値は、サーバー構築後に適切な値に設定して下さい。よく「実メモリの20%~30%」とするのが一つの目安として言われています。

shared_buffersの設定は、postgresql.confで行います。

Linux の場合は /proc/sys/kernel/shmmax に shared_buffers で使用する共有メモリサイズより大きい値を設定する必要があります。

ワークメモリー(work_mem)

work_memはサイズが大きい方が好ましいとされていますが、大きくしすぎるとpostgresプロセスが多くなった場合にメモリ領域を圧迫してスワップを発生させる可能性があります。適切な値を設定してください。

参考サイト

Javaのヒープ領域のチューニング

PostgreSQLのチューニング