Servletサービスまたはサーブレット・コンテナの使用について
Linuxで、Servletサービスまたはサーブレット・コンテナを使用し、かつServletサービスまたはサーブレット・コンテナの起動・停止を高速に連続して行ったときに、Java VMがダウンし、coreおよびJava VMのログファイル(hs_err_pid***.logまたはfjvm_pid***.log (***はプロセスID))が生成される場合がありますので、コンテナの起動・停止を高速かつ連続して行わないようにしてください。
JNI(Java Native Interface)を使用したアプリケーションの開発について
下記パッケージがインストールされた開発環境で、JNI(Java Native Interface)を使用したアプリケーションを開発した場合、コンパイルの失敗や予期せぬ動作を引き起こすおそれがあります。JNIを使用したアプリケーションの開発時には、事前に必ずアンインストールしてください。
libgcj-devel
gcc-java
java.awt.Frame クラスの使用について
GNOME用ウィンドウマネージャのmetacityを使用している環境でJDK/JRE6を使用する場合において、java.awt.Frame クラスを使用した場合に、Frame.MAXIMIZED_HORIZ、Frame.MAXIMIZED_VERTがFrame.MAXIMIZED_BOTHと同じ動作となります。これはmetacityの仕様であり、ウィンドウマネージャを変更することで回避できます。
AwtRobot APIを使用したキーボード入力について
デスクトップ環境にGNOMEを使用している環境において、AwtRobot APIを使用しキーボード入力を行うとキーイベントが複数発生する場合があります。これはJavaアプリケーション以外でも発生する問題であり、デスクトップ環境を変更することで回避できます。
sigaltstack関数について
Linux版JDK/JREを使用するJNI処理モジュール(JNIインターフェースを使用するネイティブモジュール)においてsigaltstack関数を使用している場合、当該JNI処理モジュール内でメモリリークを引き起こす可能性があります。JNI処理モジュールでは、sigaltstack関数を使用しないでください。
メモリに関する処理で異常が発生した場合について
Linux版のJDK/JREにおいて、メモリ破壊などでOSのmalloc関数/free関数などのメモリに関する処理の中で何らかの異常が発生した場合、Javaプロセスがハングアップ状態となる場合があります。
XToolkit(Xlib-based Toolkit)について
Linux版JDK/JREでは、新しいツールキット(XToolkit(Xlib-based Toolkit)) がデフォルトで使用されます。
詳細は、JDKドキュメントの「機能ガイド」 > 「Abstract Window Toolkit」 > 「XAWT」を参照してください。
注意
MToolkit を使用する場合は、X Print Client Library(libXp)がインストールされている必要があります。
RHEL5ではlibXpは標準ではサポートされていません。RHEL5で、MToolkitを使用する場合は、X Print Client Library(libXp) がインストールされている必要があります。
RHEL5.4以前におけるtmpwatchについて
Javaプロセスの動作中に、Java VMは次の共有メモリファイルを生成します。
/tmp/hsperfdata_XXX/YYY (XXXはユーザ名、YYYはプロセスID)
tmpwatchシェルスクリプトがcronに登録されている場合、tmpwatchシェルスクリプトにより共有メモリファイルが削除され、本製品の動作(予兆監視機能など)に支障をきたす場合があります。また、jheap(Javaプログラムのヒープ使用状況を出力するツール)を使用した場合に、次のメッセージを出力して動作しない場合があります。
fatal error. cannot open perf file
そのようなときは、共有メモリファイルがtmpwatchの削除対象外となるように/etc/cron.daily/tmpwatchのシェルスクリプトを修正してください。
例
/etc/cron.daily/tmpwatchシェルスクリプトの修正例
/usr/sbin/tmpwatch XXX /tmp (XXXは時間を表す数字)に該当する処理を実行する前に以下の処理を行うように修正します。
for f in `echo /tmp/hsperfdata_*/*` ; do /bin/touch $f > /dev/null 2>&1 done
特に、Interstage管理コンソールに表示されるIJServerワークユニットのモニタ画面で、JavaVMのヒープ情報、および、JavaVMのPermanent世代領域情報が更新されなくなった場合、共有メモリファイルが削除されていないかどうかを確認してください。
文字入力フィールドでの文字入力について
RHEL5で、以下の条件の場合にTextFieldなどの文字入力フィールドで文字が入力できないことがあります。その場合、一度他の入力フィールドにフォーカスを移動してフォーカスを戻すことにより、文字入力が可能となります。
RHEL5を使用している。かつ、
入力メソッドの設定がSCIM(Smart Common Input Method)となっている。かつ、
TextFieldなどComoponentの派生クラスでenableInputMethods(false)により入力メソッドを使用不可に設定している場合。
DP(Dynamic Partitioning)機能について
DP(Dynamic Partitioning)機能を利用する場合、以下の注意が必要です。
DP(Dynamic Partitioning)機能によりシステム運用中にCPU数が変化するため,以下のJava APIを使用するJavaアプリケーションは,アプリケーション実行中にCPU数が動的に変化する可能性があることを考慮して各処理を実装する必要があります。(利用可能なCPU数に影響を受けるJavaアプリケーションは,ポーリング処理などにより処理を調整する必要があります)
java.lang.Runtime.availableProcessors()
java.lang.management.OperatingSystemMXBean.getAvailableProcessors()
JDK/JRE 5.0以降を利用する際,メモリ割り当てプールの省略値自動調整機能は使用しないでください。(JDK/JRE 5.0以降を利用する際には「-XX:+AutomaticallyJavaHeapSizeSetting」オプションを指定しないでください)
RHEL6(x86)/RHEL6(Intel64)におけるOSの仮想メモリ管理について
RHEL6(x86)/RHEL6(Intel64)におけるOSの仮想メモリ管理は、プロセス内のスレッドからmalloc()関数実行による仮想メモリ獲得要求があった場合、各スレッドごとに、以下の大きさを1単位とした「malloc()用領域」を確保(リザーブ)します。
32ビットモードのプロセスの場合:1Mバイト
64ビットモードのプロセスの場合:64Mバイト
そのため、RHEL6(x86)/RHEL6(Intel64)上において、malloc()関数を実行(他の関数の延長でmalloc()関数が間接的に実行された場合も含む)するスレッドの数が多いプロセスを実行した場合、OSの仮想メモリ管理によるスレッド数に依存した「malloc()用領域」の確保により、同一のプログラムを実行するプロセスの場合であったとしても、当該プロセスに対して確保される仮想メモリの大きさが、他のバージョンのOS上で実行された場合に比べて大きくなる場合があります。
特に64ビットモードのプロセスを実行した場合、この傾向が顕著になる場合があります。
そしてJavaアプリケーションを実行するプロセスは、マルチスレッドで動作するプロセスであるため、上記傾向が強くなります。
注意
確保された「malloc()用領域」のうち、実際に使用される仮想メモリ量(システム資源量)は、各スレッドにおいてmalloc()関数で指定された要求量と、OSによる仮想メモリ管理用制御域の大きさの総和です。
上記傾向は、psコマンドを使用した場合は、値として仮想メモリ量(VSZ値)を参照した際に確認されます。
SELinuxを有効とした時の注意事項について
RHEL6(x86)/RHEL6(Intel64)のSELinux環境において、SELinuxブーリアン値である allow_execstack を off に設定した場合、以下のようなエラーメッセージが標準エラー出力に表示され、実行できないコマンドがあります。
dl failure on line 719Error: failed /opt/FJSVawjbk/jdk6/jre/lib/i386/fjvm/libjvm.so, because /opt/FJSVawjbk/jdk6/jre/lib/i386/fjvm/libjvm.so: cannot enable executable stack as shared object requires: Permission denied
注意
上記メッセージは、 RHEL6(x86) JDK 6での出力例です。
「/opt/FJSVawjbk/jdk6/jre/lib/i386/fjvm/libjvm.so」の部分は、OSアーキテクチュア・JDK/JREのバージョンにより異なります。
SELinuxブーリアン値である allow_execstack を off で運用する場合は、以下の手順にしたがい、各コマンドを実行させる上で必要なファイルタイプへの変更を行ってください。
なお、ファイルタイプの変更後にリラベル処理を実施した場合、再度以下を実行してください。
JDK6の場合:
# chcon -R -t java_exec_t /opt/FJSVawjbk/jdk6/bin # chcon -R -t java_exec_t /opt/FJSVawjbk/jdk6/jre/bin # chcon -t bin_t /opt/FJSVawjbk/jdk6/bin/jvisualvm # chcon -t bin_t /opt/FJSVawjbk/jdk6/bin/unpack200 # chcon -t bin_t /opt/FJSVawjbk/jdk6/jre/bin/unpack200
JRE6の場合:
# chcon -R -t java_exec_t /opt/FJSVawjbk/jre6/bin # chcon -t bin_t /opt/FJSVawjbk/jre6/bin/unpack200
JDK7の場合:
# chcon -R -t java_exec_t /opt/FJSVawjbk/jdk7/bin # chcon -R -t java_exec_t /opt/FJSVawjbk/jdk7/jre/bin # chcon -t bin_t /opt/FJSVawjbk/jdk7/bin/jvisualvm # chcon -t bin_t /opt/FJSVawjbk/jdk7/bin/unpack200 # chcon -t bin_t /opt/FJSVawjbk/jdk7/jre/bin/unpack200
JRE7の場合:
# chcon -R -t java_exec_t /opt/FJSVawjbk/jre7/bin # chcon -t bin_t /opt/FJSVawjbk/jre7/bin/unpack200
また、スタートアップルーチンをC/C++等で記述し、Java Native Interface(JNI)を用いてJavaを使用しているプログラムについても、上記と同様に、chconコマンド等によりそのアプリケーションファイルのファイルタイプを java_exec_t へ変更する必要があります。