Comments
Description
Transcript
印刷版 ( 2.3 MB) - ソフトウェア
Interstage Application Server/ Interstage Web Server チューニングガイド Windows/Solaris/Linux B1WS-0946-04Z0(00) 2012年2月 まえがき 本書の目的 本書は、運用形態を変更したり、システム規模を変更する場合などに必要な環境設定のチューニングについて説明しています。 本書は、Interstage Application Serverの運用を行う方を対象に記述されています。 前提知識 本書を読む場合、以下の知識が必要です。 ・ C言語に関する基本的な知識 ・ C++言語に関する基本的な知識 ・ COBOLに関する基本的な知識 ・ Java言語に関する基本的な知識 ・ インターネットに関する基本的な知識 ・ オブジェクト指向技術に関する基本的な知識 ・ 分散オブジェクト技術(CORBA)に関する基本的な知識 ・ リレーショナルデータベースに関する基本的な知識 ・ 使用するOSに関する基本的な知識 本書の構成 本書は以下の構成になっています。 第1章 必要資源 Interstageの運用時に必要な資源について説明します。 第2章 Interstageのチューニング Interstageのモデルケースから、より詳細なシステム構築を行う場合に必要となるチューニングについて説明します。 第3章 システムのチューニング システムのチューニングについて説明しています。 第4章 ワークユニットのチューニング ワークユニットのチューニングについて説明しています。 第5章 Java EE機能のチューニング Java EE機能を運用する際のチューニングについて説明しています。 第6章 J2EEのチューニング J2EEアプリケーションの動作に必要なチューニングについて説明します。 第7章 業務構成管理機能のチューニング 業務構成管理機能が管理するリポジトリのチューニングについて説明します。 第8章 JDK/JREのチューニング JDK/JREのチューニングに関して、基本的な知識、Java VM、異常発生時の原因振り分け方法およびチューニング方法について説 明します。 第9章 データベース連携サービスのチューニング データベース連携サービスのiniファイルについて説明します。 付録A CORBAサービスの動作環境ファイル CORBAサービスの環境定義について説明しています。 付録B コンポーネントトランザクションサービスの環境定義 コンポーネントトランザクションサービスの環境定義について説明しています。 -i- 付録C データベース連携サービスの環境定義 データベース連携サービスの環境定義について説明しています。 付録D イベントサービスの環境定義 イベントサービスの環境定義について説明しています。 付録E Interstage HTTP Serverの環境定義 Interstage HTTP Serverの環境定義について説明します。 付録F Interstage シングル・サインオンの環境定義 Interstage シングル・サインオンを運用するための、環境定義のチューニングについて説明します。 付録G マルチサーバ管理の環境定義 マルチサーバ管理の環境定義について説明します。 付録H Portable-ORBの環境設定 Portable-ORBの環境設定について説明します。 付録I Webサーバ(Sun Java System Web Server)の環境定義 Webサーバ(Sun Java System Web Server)を使用する場合の環境定義について説明します。 輸出許可 本ドキュメントを非居住者に提供する場合には、経済産業大臣の許可が必要となる場合がありますので、ご注意ください。 著作権 Copyright 2011-2012 FUJITSU LIMITED 2012年2月 第4版 2011年7月 初版 - ii - 目 次 第1章 必要資源.........................................................................................................................................................................1 1.1 運用時に必要なディスク容量.............................................................................................................................................................1 1.1.1 サーバ機能を使用する場合........................................................................................................................................................1 1.1.2 マルチサーバ管理を使用する場合...........................................................................................................................................18 1.1.3 MQ連携サービスを使用する場合.............................................................................................................................................20 1.1.4 クライアント機能を使用する場合...............................................................................................................................................20 1.2 メモリ容量...........................................................................................................................................................................................21 1.2.1 サーバ機能を使用する場合......................................................................................................................................................21 1.2.2 マルチサーバ管理を使用する場合...........................................................................................................................................32 1.2.3 クライアント機能を使用する場合...............................................................................................................................................32 第2章 Interstageのチューニング..............................................................................................................................................34 2.1 想定するシステム形態......................................................................................................................................................................34 2.1.1 想定するシステム形態(Java EE)................................................................................................................................................34 2.1.2 想定するシステム形態(マルチ言語サービス).........................................................................................................................35 2.2 定義ファイルの設定値......................................................................................................................................................................36 2.3 チューニング方法..............................................................................................................................................................................39 2.3.1 チューニング方法(Java EE).......................................................................................................................................................39 2.3.2 チューニング方法(マルチ言語サービス)..................................................................................................................................39 2.3.2.1 チューニング方法(アプリケーション追加によるチューニング)...........................................................................................39 2.3.2.1.1 クライアントアプリケーションを追加した場合...............................................................................................................40 2.3.2.1.2 サーバアプリケーションを追加した場合......................................................................................................................40 2.3.2.1.3 クライアント、サーバ兼用アプリケーションを追加した場合.........................................................................................41 2.3.2.2 チューニング方法(Interstageの機能を使用するためのチューニング)..............................................................................41 2.3.2.2.1 データベース連携サービス..........................................................................................................................................42 2.3.2.2.2 ロードバランス...............................................................................................................................................................43 2.3.2.2.3 イベントサービス...........................................................................................................................................................43 2.3.2.2.4 サーバマシン状態監視................................................................................................................................................45 2.4 環境変数について............................................................................................................................................................................45 2.5 IPv6環境での運用について.............................................................................................................................................................47 2.6 ホスト情報(IPアドレス/ホスト名)の変更方法について......................................................................................................................49 第3章 システムのチューニング.................................................................................................................................................50 3.1 サーバ機能運用時に必要なシステム資源......................................................................................................................................50 3.1.1 CORBAサービスのシステム資源の設定...................................................................................................................................53 3.1.2 コンポーネントトランザクションサービスのシステム資源の設定...............................................................................................62 3.1.3 データベース連携サービスのシステム資源の設定..................................................................................................................67 3.1.4 イベントサービスのシステム資源の設定...................................................................................................................................71 3.1.5 J2EE互換のシステム資源の設定..............................................................................................................................................76 3.1.6 Interstage HTTP Serverのシステム資源の設定.........................................................................................................................76 3.1.7 MessageQueueDirectorのシステム資源の設定.........................................................................................................................78 3.1.8 Interstage シングル・サインオンのシステム資源の設定............................................................................................................80 3.1.9 Interstage ディレクトリサービスのシステム資源の設定..............................................................................................................85 3.1.10 Interstage管理コンソールのシステム資源の設定....................................................................................................................92 3.1.11 Interstage統合コマンドのシステム資源の設定........................................................................................................................92 3.1.12 Webサーバコネクタのシステム資源の設定.............................................................................................................................94 3.1.13 Java EEのシステム資源の設定................................................................................................................................................98 3.2 マルチサーバ管理機能を使用する時に必要なシステム資源........................................................................................................98 3.3 性能監視ツール使用時に必要なシステム資源...............................................................................................................................99 3.3.1 システム構成情報の見積もり方法 (Solarisの場合) ..................................................................................................................99 3.3.2 システム構成情報の見積もり方法 (Linuxの場合) .................................................................................................................100 3.3.3 共有メモリ量の見積もり方法....................................................................................................................................................100 3.4 TCP/IPパラメタのチューニング.......................................................................................................................................................101 3.5 IPC資源のカスタマイズ...................................................................................................................................................................102 - iii - 第4章 ワークユニットのチューニング.......................................................................................................................................104 4.1 ワークユニット数、オブジェクト数、プロセス数のチューニング......................................................................................................104 4.2 プロセス強制停止時間のチューニング..........................................................................................................................................105 4.3 CORBAワークユニットのチューニング...........................................................................................................................................106 4.4 IJServerワークユニットのチューニング............................................................................................................................................106 4.5 トランザクションアプリケーションのチューニング............................................................................................................................106 4.6 ラッパーワークユニットのチューニング...........................................................................................................................................106 4.7 ユーティリティワークユニットのチューニング..................................................................................................................................106 第5章 Java EE機能のチューニング........................................................................................................................................108 5.1 Interstage Java EE DASサービスのチューニング...........................................................................................................................108 5.2 Interstage Java EE Node Agentサービスのチューニング...............................................................................................................111 5.3 IJServerクラスタのチューニング......................................................................................................................................................112 5.3.1 複数プロセス運用.....................................................................................................................................................................112 5.3.2 Java VMのヒープ領域サイズ/Perm領域サイズ.......................................................................................................................112 5.3.3 ガーベジコレクション発生回数................................................................................................................................................113 5.3.4 アプリケーション最大処理時間................................................................................................................................................113 5.3.5 グループ管理サービスの設定.................................................................................................................................................113 5.4 Interstage Java EE管理コンソールのチューニング.........................................................................................................................114 5.4.1 セッションタイムアウト................................................................................................................................................................114 5.4.2 アップロードファイルの最大サイズのチューニング.................................................................................................................115 5.4.3 ポート番号................................................................................................................................................................................116 5.4.4 SSL通信の利用........................................................................................................................................................................116 5.5 配備時のチューニング....................................................................................................................................................................117 5.6 Webコンテナのチューニング..........................................................................................................................................................117 5.7 EJBコンテナのチューニング...........................................................................................................................................................121 5.7.1 スレッドプーリング.....................................................................................................................................................................121 5.7.2 Enterprise Beanインスタンスのキャッシング.............................................................................................................................124 5.7.3 Enterprise Beanインスタンスのプーリング................................................................................................................................126 5.7.4 同一Java VM内のリモートアクセスでデータコピーを防ぐ機能..............................................................................................127 5.8 JPAのチューニング.........................................................................................................................................................................127 5.8.1 永続性コンテキストキャッシュ...................................................................................................................................................127 5.8.2 永続性ユニットの共有キャッシュ..............................................................................................................................................129 5.9 Webサービスのチューニング..........................................................................................................................................................132 5.10 データベース連携環境のチューニング........................................................................................................................................132 5.10.1 プール内の接続数.................................................................................................................................................................132 5.10.2 接続検証................................................................................................................................................................................134 5.10.3 トランザクション管理...............................................................................................................................................................135 5.10.4 詳細属性................................................................................................................................................................................136 5.11 コネクタのチューニング.................................................................................................................................................................137 5.11.1 プール内の接続数.................................................................................................................................................................137 5.11.2 接続検証................................................................................................................................................................................139 5.11.3 トランザクション管理...............................................................................................................................................................140 5.11.4 シャットダウンタイムアウト.......................................................................................................................................................140 5.12 トランザクションサービスのチューニング......................................................................................................................................141 5.13 ORBのチューニング......................................................................................................................................................................142 5.13.1 ORB........................................................................................................................................................................................142 5.13.2 通信データサイズに関する注意事項....................................................................................................................................144 5.14 予兆監視機能から警告が通知された場合の対処......................................................................................................................145 5.14.1 予兆監視警告メッセージ(Javaヒープ)...................................................................................................................................146 5.14.2 予兆監視警告メッセージ(ガーベジコレクション)...................................................................................................................147 5.15 Interstage Java EE DASサービスのヒープ領域サイズとアドレス空間..........................................................................................149 5.16 時間監視機能の相関関係............................................................................................................................................................153 5.17 モニタリング情報の監視................................................................................................................................................................157 5.17.1 注意事項................................................................................................................................................................................158 5.18 モニタロギング...............................................................................................................................................................................158 5.18.1 モニタロギングの操作手順....................................................................................................................................................159 - iv - 5.18.2 モニタロギングのログファイル................................................................................................................................................161 5.18.3 性能情報の分析.....................................................................................................................................................................163 5.19 プロファイラ設定............................................................................................................................................................................172 5.19.1 プロファイラ設定の運用方法.................................................................................................................................................172 第6章 J2EEのチューニング....................................................................................................................................................174 第7章 業務構成管理機能のチューニング................................................................................................................................175 7.1 リポジトリのチューニング.................................................................................................................................................................175 第8章 JDK/JREのチューニング..............................................................................................................................................176 8.1 基礎知識.........................................................................................................................................................................................176 8.1.1 JDK関連のドキュメント.............................................................................................................................................................176 8.1.2 Java VM....................................................................................................................................................................................177 8.1.3 FJVM........................................................................................................................................................................................178 8.1.4 仮想メモリと仮想アドレス空間..................................................................................................................................................178 8.1.5 スタック......................................................................................................................................................................................180 8.1.6 Javaヒープとガーベジコレクション............................................................................................................................................181 8.1.7 FJVMに対して指定可能なチューニング用オプション...........................................................................................................183 8.1.8 Java Native Interface(JNI)........................................................................................................................................................184 8.2 ガーベジコレクション(GC)...............................................................................................................................................................185 8.2.1 FJVMでサポートされるガーベジコレクション処理..................................................................................................................185 8.2.2 標準GC(シリアルGC)..............................................................................................................................................................187 8.2.3 New世代領域サイズ自動調整機能付きGC(FJGC)..............................................................................................................188 8.2.4 New世代領域用制御処理並列化機能付きGC(パラレルGC)..............................................................................................190 8.2.5 コンカレント・マーク・スイープGC付きパラレルGC(CMS付きパラレルGC)..........................................................................193 8.2.6 オブジェクト参照の圧縮機能...................................................................................................................................................196 8.2.7 ガーベジコレクションのログ出力..............................................................................................................................................196 8.2.7.1 ガーベジコレクション処理の結果ログ出力機能の強化...................................................................................................198 8.3 動的コンパイル................................................................................................................................................................................204 8.3.1 コンパイラ異常発生時の自動リカバリ機能..............................................................................................................................205 8.3.2 長時間コンパイル処理の検出機能.........................................................................................................................................206 8.3.3 動的コンパイル発生状況のログ出力機能..............................................................................................................................207 8.4 チューニング方法............................................................................................................................................................................209 8.4.1 Javaヒープのチューニング.......................................................................................................................................................209 8.4.2 スタックのチューニング.............................................................................................................................................................214 8.4.3 暖機運転..................................................................................................................................................................................215 8.5 チューニング/デバッグ技法............................................................................................................................................................218 8.5.1 スタックトレース.........................................................................................................................................................................218 8.5.1.1 スタックトレースの解析方法(その1)..................................................................................................................................219 8.5.1.2 スタックトレースの解析方法(その2)..................................................................................................................................220 8.5.1.3 スタックトレースの解析方法(その3)..................................................................................................................................221 8.5.2 例外発生時のスタックトレース出力.........................................................................................................................................222 8.5.3 スレッドダンプ...........................................................................................................................................................................222 8.5.4 クラスのインスタンス情報出力機能..........................................................................................................................................230 8.5.5 java.lang.System.gc()実行時におけるスタックトレース出力機能............................................................................................231 8.5.6 Java VM終了時における状態情報のメッセージ出力機能.....................................................................................................232 8.5.7 ログ出力における時間情報のフォーマット指定機能..............................................................................................................233 8.5.8 FJVMログ..................................................................................................................................................................................234 8.5.8.1 異常終了箇所の情報........................................................................................................................................................234 8.5.8.2 異常終了時のシグナルハンドラ情報 ..............................................................................................................................235 8.5.8.3 異常終了時のJavaヒープに関する情報...........................................................................................................................236 8.5.8.4 出力例と調査例.................................................................................................................................................................236 8.5.9 クラッシュダンプ・コアダンプ....................................................................................................................................................239 8.5.9.1 クラッシュダンプ.................................................................................................................................................................239 8.5.9.2 コアダンプ(Solaris)...........................................................................................................................................................240 8.5.9.3 コアダンプ(Linux)............................................................................................................................................................240 8.5.10 JNI処理異常時のメッセージ出力..........................................................................................................................................241 -v- 8.6 異常発生時の原因振り分け...........................................................................................................................................................244 8.6.1 java.lang.OutOfMemoryErrorがスローされた場合..................................................................................................................244 8.6.1.1 メモリ領域不足事象発生時のメッセージ出力機能の強化..............................................................................................245 8.6.2 EXTP4435メッセージまたはISJEE_OM1018メッセージが出力された場合...........................................................................247 8.6.3 java.lang.StackOverflowErrorがスローされた場合.................................................................................................................250 8.6.3.1 スタックオーバーフロー検出時のメッセージ出力機能....................................................................................................250 8.6.4 SIGBUS発生により異常終了した場合....................................................................................................................................251 8.6.5 プロセスが消滅(異常終了)した場合.......................................................................................................................................251 8.6.6 ハングアップ(フリーズ)した場合..............................................................................................................................................253 8.6.7 スローダウンが発生した場合...................................................................................................................................................253 8.7 Javaツール機能...............................................................................................................................................................................254 第9章 データベース連携サービスのチューニング....................................................................................................................255 9.1 データベース連携サービスのiniファイル設定情報.......................................................................................................................255 9.2 iniファイルの設定例........................................................................................................................................................................256 9.3 セマフォ資源...................................................................................................................................................................................256 9.4 Windows(R)固有パラメタ................................................................................................................................................................257 付録A CORBAサービスの動作環境ファイル...........................................................................................................................258 A.1 config..............................................................................................................................................................................................259 A.2 gwconfig.........................................................................................................................................................................................276 A.3 inithost/initial_hosts........................................................................................................................................................................278 A.4 queue_policy...................................................................................................................................................................................280 A.5 nsconfig...........................................................................................................................................................................................282 A.6 irconfig............................................................................................................................................................................................283 付録B コンポーネントトランザクションサービスの環境定義......................................................................................................287 B.1 記述形式.........................................................................................................................................................................................287 B.1.1 ステートメント............................................................................................................................................................................287 B.1.2 セクション..................................................................................................................................................................................289 B.1.3 コメント行..................................................................................................................................................................................290 B.1.4 空行..........................................................................................................................................................................................290 B.2 環境定義ファイルの制御文............................................................................................................................................................290 B.2.1 [SYSTEM ENVIRONMENT]セクション.................................................................................................................................290 B.2.2 [WRAPPER]セクション ...........................................................................................................................................................292 付録C データベース連携サービスの環境定義........................................................................................................................294 C.1 configファイル.................................................................................................................................................................................294 C.2 セットアップ情報ファイル................................................................................................................................................................299 C.2.1 MODE: セットアップ種別.........................................................................................................................................................299 C.2.2 LOGFILE: システムログファイルのパス..................................................................................................................................300 C.2.3 TRANMAX: 最大トランザクション多重度..............................................................................................................................301 C.2.4 PARTICIPATE: 1トランザクションに参加するリソース数.......................................................................................................301 C.2.5 OTS_FACT_THR_CONC: OTSシステムのスレッド多重度...................................................................................................302 C.2.6 OTS_RECV_THR_CONC: リカバリプロセスのスレッド多重度..............................................................................................302 C.2.7 JTS_RMP_PROC_CONC: JTS用のリソース管理プログラムのプロセス多重度....................................................................302 C.2.8 JTS_RMP_THR_CONC: JTS用のリソース管理プログラムのスレッド多重度........................................................................303 C.2.9 HOST: OTSシステムが動作するホスト名................................................................................................................................303 C.2.10 PORT: OTSシステムが動作するホストのCORBAサービスのポート番号............................................................................303 C.3 RMPプロパティ...............................................................................................................................................................................303 C.4 リソース定義ファイル.......................................................................................................................................................................305 C.5 OTSシステム用業務システム情報定義ファイル............................................................................................................................309 C.6 アプリケーション用業務システム情報定義ファイル.......................................................................................................................310 付録D イベントサービスの環境定義........................................................................................................................................311 D.1 traceconfig.......................................................................................................................................................................................311 D.2 サプライヤ・コンシューマ総数の見積もり方法...............................................................................................................................314 付録E Interstage HTTP Serverの環境定義...........................................................................................................................315 - vi - E.1 タイムアウト時間..............................................................................................................................................................................315 E.2 クライアントの同時接続数...............................................................................................................................................................317 付録F Interstage シングル・サインオンの環境定義.................................................................................................................319 F.1 1台のサーバにリポジトリサーバを構築する場合のチューニング..................................................................................................319 F.2 1台のサーバに認証サーバを構築する場合のチューニング........................................................................................................320 F.3 1台のサーバにリポジトリサーバと認証サーバを構築する場合のチューニング...........................................................................320 F.4 業務サーバを構築する場合のチューニング.................................................................................................................................321 付録G マルチサーバ管理の環境定義.....................................................................................................................................324 G.1 マルチサーバ管理定義ファイル....................................................................................................................................................324 付録H Portable-ORBの環境設定.......................................................................................................................................... 325 付録I Webサーバ(Sun Java System Web Server)の環境定義.............................................................................................. 326 索引...................................................................................................................................................................................... 327 - vii - 第1章 必要資源 1.1 運用時に必要なディスク容量 運用時に必要なディスク容量は次のとおりです。 1.1.1 サーバ機能を使用する場合 以下の各機能を使用する場合のディスク容量を示します。 ・ Interstage動作環境 ・ Interstage管理コンソール ・ 業務構成管理 ・ Interstage HTTP Server ・ Interstage JMXサービス ・ Interstage シングル・サインオン ・ Interstage ディレクトリサービス ・ J2EE ・ IJServerワークユニット ・ Interstage JMS ・ Servletサービス(OperationManagement) ・ ワークユニット ・ CORBAサービス ・ イベントサービス ・ Portable-ORB ・ コンポーネントトランザクションサービス ・ データベース連携サービス ・ ロードバランス ・ 性能監視ツール ・ MessageQueueDirector ・ フレームワーク ・ Java EE 機能: Interstage動作環境 ディレクトリ コンポーネントトランザクションサービスのイ ンストールディレクトリ\var\td001 (Interstage動作環境定義ファイルの“TD path for system”で指定) ディスク容量 (単位:Mバイト) 60 以上 備考(用途) Interstage動作環境作成 時 機能: Interstage管理コンソール -1- ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) ログ情報 (注) Interstage管理コンソールのインストールディ レクトリ\isAdmin\var\download /var/opt/FJSVisgui/tmp/download 注) Interstage管理コンソールの以下の画面において、ログファイルをダウンロードする場合、同時にダウンロードするログファイルのサ イズ分のディスク容量が一時的に必要となります。 機能 Interstage HTTP Server 画面(スタンドアロン) [システム] > [サービス] > [Webサーバ] > [Webサーバ名] > [ロ グ参照]タブ [システム] > [サービス] > [Webサーバ] > [Webサーバ名] > [バー チャルホスト] > [バーチャルホスト名] > [ログ参照]タブ Webサーバコネクタ [システム] > [サービス] > [Webサーバ] > [Webサーバ名] > [Web サーバコネクタ] > [ログ参照]タブ IJServerワークユニット [システム] > [ワークユニット] > [ワークユニット名] > [ログ参照]タ ブ ログファイルのサイズについては、各機能のログ情報のディスク容量を参照し、運用の内容により必要とするサイズを検討してください。 なお、ログファイルのサイズが大きいため、ディスク容量の不足によりログファイルのダウンロードに失敗する場合は、FTPなどを使 用してダウンロードしてください。 機能: 業務構成管理 ディレクトリ 業務構成管理のリポジトリ Interstage JMXサービスのインストールディ レクトリ\var\repository ディスク容量 (単位:Mバイト) 備考(用途) 運用の内容により、必要と するサイズを検討してくだ さい。 (注) デフォルトから変更した場 合は、変更先 /var/opt/FJSVisas/repository 注) 業務構成管理のリポジトリの格納先のサイズは、“Interstage Application Server 運用ガイド(基本編)”の“業務構成管理機能”を参 照してください。 機能: Interstage HTTP Server ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) アクセスログ、エラーログ、トレースログ格納 ディレクトリ 運用の内容により、必要と するサイズを検討してくだ さい。 アクセスログ、エラーログ、 トレースログ 2 オペレーションログ 10 保守ログ Interstage HTTP Serverのインストールディ レクトリ\var\opelog /var/opt/FJSVihs/var/opelog Interstage HTTP Serverのインストールディ -2- ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) 運用の内容により、必要と するサイズを検討してくだ さい。 コンテンツ(HTML文書な ど) ディスク容量 (単位:Mバイト) 備考(用途) レクトリ\var\.ihsapi /var/opt/FJSVihs/var/.ihsapi コンテンツ格納するディレクトリ 機能: Interstage JMXサービス ディレクトリ Interstage JMXサービスのインストールディ レクトリ 14以上 (注) ディレクトリ ディスク容量 (単位:Mバイト) /var/opt 14 以上 (注) /var/opt 32 以上 (注) /etc/opt 0.1 以上 備考(用途) 注) Interstage JMXサービスのカスタマイズでログインログのファイルサイズの上限値を変更している場合、以下のディスク所要量が必 要となります。 - ログインログ ログインログのファイルサイズの上限値 × 2 (Mバイト) 上限値を変更していない場合、ログインログのファイルサイズの上限値は1に設定されています。 機能: Interstage シングル・サインオン Interstage シングル・サインオンの業務サーバ機能 ディレクトリ Interstage シングル・サインオンのインス トールディレクトリ\ssoatzag\log ディスク容量 (単位:Mバイト) 備考(用途) 運用の内容により、必要と するサイズを検討してくだ さい。 (注1) アクセスログなどのログ情 報 (アクセスログファイルの出 力先ディレクトリ) /var/opt/FJSVssoaz/log 2 Interstage シングル・サインオンのインス トールディレクトリ\ssocm\etc /var/opt/FJSVssocm/etc Interstage シングル・サインオンのインス トールディレクトリ 運用の内容により、必要と するサイズを検討してくだ さい。 /etc/opt -3- アクセス制御情報 Interstage シングル・サインオンの認証サーバ機能 ディレクトリ Interstage シングル・サインオンのインス トールディレクトリ\ssoatcag\log ディスク容量 (単位:Mバイト) 備考(用途) 運用の内容により、必要と するサイズを検討してくだ さい。 (注1) アクセスログなどのログ情 報 (アクセスログファイルの出 力先ディレクトリ) /var/opt/FJSVssoac/log Interstage シングル・サインオンのインス トールディレクトリ\ssofsv\log 運用の内容により、必要と するサイズを検討してくだ さい。 (注1)(注2) /var/opt/FJSVssofs/log 2 (注3)(注4) Interstage シングル・サインオンのインス トールディレクトリ\ssocm\etc /var/opt/FJSVssocm/etc Interstage シングル・サインオンのリポジトリサーバ機能 ディレクトリ Interstage シングル・サインオンのインス トールディレクトリ\ssoatcsv\log ディスク容量 (単位:Mバイト) 備考(用途) 運用の内容により、必要と するサイズを検討してくだ さい。 (注1)(注5) アクセスログなどのログ情 報 (アクセスログファイル、お よびセション管理ログファ イルの出力先ディレクトリ) /var/opt/FJSVssosv/log 2 Interstage シングル・サインオンのインス トールディレクトリ\ssocm\etc /var/opt/FJSVssocm/etc 注1) デフォルト設定のままでは使用ディスクサイズの上限なしにログが採取されます。ディスク不足発生を防止するために、定期的に 不要になったログファイルを削除するか、ログの採取方法を変更してください。 注2) 認証サーバ間連携を行わない場合は、0Mバイトです。 注3) 統合Windows認証を行う場合には、2Mバイトを加算してください。 注4) 認証サーバ間連携を行う場合には、2Mバイトを加算してください。 注5) セション管理を行うリポジトリサーバをクラスタシステム上で運用する場合には、52Mバイトを加算してください。 機能: Interstage ディレクトリサービス ディレクトリ Interstage ディレクトリサービスのインストー ルディレクトリ\var ディスク容量 (単位:Mバイト) 20 × リポジトリ作成数 + 20 -4- 備考(用途) ログ情報 ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) /var/opt 0.5 × リポジトリ作成数 環境定義 Interstage ディレクトリサービスのアクセスロ グ作成ディレクトリ Interstage管理コンソール のアクセスログの設定値に 依存 サイズ × 世代管理数 アクセスログ Interstage ディレクトリサービスのデータベー ス格納先ディレクトリ (注1) データベース格納先 (リポジトリのデータベース として標準データベースを 使用する場合) Interstage ディレクトリサービス SDKのイン ストールディレクトリ\var プロセス数 × 8 /var/opt/FJSVirepc 同時接続数 × 8 (注2) Interstage ディレクトリサービスのインストー ルディレクトリ\etc /etc/opt Interstage ディレクトリサー ビス SDKのログ情報 注1) 1つのリポジトリあたりで、以下のディスク所要量が必要です。 - レプリケーション環境のマスタのリポジトリ 0.2 × n × s ÷ 500 + 200 - 上記以外 0.1 × n × s ÷ 500 + 200 n: エントリ数 s: 1エントリをLDIFで記述したときのサイズ(単位:バイト) 計算式は目安です。ディスク容量は十分に余裕を持たせてください。 データベース格納先に指定したディスク領域が不足すると、メッセージirep30023を表示し、リポジトリを強制終了します。メッセー ジirep30023の対処は、“メッセージ集”の“メッセージ番号がirepで始まるメッセージ”を参照してください。 注2) 同時接続数には、以下の必要数の総和を指定して見積もってください。 - スレッド多重のアプリケーションを使用してリポジトリにアクセスする場合の、アプリケーションのプロセス数 - プロセス多重のアプリケーションを使用してリポジトリにアクセスする場合の、アプリケーションのプロセス多重度 - Interstage シングル・サインオン機能を使用する場合の、Interstage シングル・サインオンのリポジトリサーバ機能を組み込んだ Webサーバのクライアント同時接続数 機能: J2EE ディレクトリ J2EE共通ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) 運用の内容により、必要と するサイズを検討してくだ さい。 J2EEアプリケーションの資 産一式 /var/opt/FJSVj2ee/deployment 機能: IJServerワークユニット -5- ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) 24 以上 (注1) J2EE共通ディレクトリ\ijserver\IJServer名\logディレクトリ J2EE共通ディレクトリ/ijserver/IJServer名/logディレクトリ 2 以上 (注2) Interstageのインストールディレクトリ\F3FMjs5\logs\jk2 /var/opt/FJSVjs5/logs/jk2 (注3) Servletサービスのセション リカバリ機能使用時 セションの永続化有効時、 Session Registry Serverを 運用する環境で必要で す。 J2EE共通ディレクトリ\ijserver\Session Registry Server(IJServer)名\apps\srs.ear\srs.war\serializedata \sessionrecovery J2EE共通ディレクトリ/ijserver/Session Registry Server(IJServer) 名/apps /srs.ear/srs.war/serializedata/sessionrecovery 注1) IJServerワークユニット1つにつき以下を加算してください。 プロセス多重度 × 4(コンテナログとコンテナ情報ログのデフォルトディスク使用量) × 6(世代分のバックアップ) 以上 アプリケーションのタイムアウトが多発する場合、アプリケーションで短時間に大量のメッセージを出力する場合、およびデバッグ 情報出力を行う場合は、“J2EE共通ディレクトリ/ijserver/IJServer名/log”配下のコンテナ情報ログのディスク使用量が大きくなりま す。このような操作が想定される場合は、十分なディスク容量をご用意ください。 注2) Webサーバ1つにつきデフォルトで2Mバイトです。アプリケーションで短時間に大量のメッセージを出力する場合、デバッグ情報 出力を行う場合は、ディスク使用量が大きくなります。このような操作が想定される場合は、十分なディスク容量をご用意ください。 注3) セションリカバリ機能を使用して、セションの永続化を有効にした場合は、Session Registry Server環境定義ファイルで指定したセ ションの永続化ファイルの保存先にセションの永続化ファイルが生成されます。配備するWebアプリケーション1つについて、次の ディスク容量が必要です。(単位:Mバイト) (0.005 + (0.005 + セションの保持するデータ容量) × セション数) × 2 (0.001 + (0.002 + セションの保持するデータ容量) × セション数) × 2 (0.008 + (0.008 + セションの保持するデータ容量) × セション数) × 2 “セションの保持するデータ容量”は、Webアプリケーションでセションの属性(Attribute)にセットするオブジェクトおよびキーのサイ ズの合計値です。 上記の値は、利用しているファイルシステムによっては値が増減する場合があります。 なお、Session Registry Serverは、Interstage Application Server Enterprise Editionで運用可能です。 機能: Interstage JMS ディレクトリ Interstage JMSのインストールディレクトリ \etc ディスク容量 (単位:Mバイト) 0.01 + (durable Subscriber数 × 0.002) /etc/opt -6- 備考(用途) 定義情報 ディレクトリ ディスク容量 (単位:Mバイト) 10 以上 備考(用途) コンソールファイル Interstage JMSのインストールディレクトリ \var /var/opt 機能: Servletサービス(OperationManagement) ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) ログ情報 12 Servletサービス(OperationManagement) インストールディレクトリ\log /var/opt/FJSVjs2su/log 機能: ワークユニット ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) Interstage動作環境定義の定義項目“TD path for system”で指定 1つのワークユニット定義 サイズ × ワークユニット定 義数 (注) ワークユニット定義登録時 1つのワークユニット定義 サイズ × ワークユニット起 動数 (注) ワークユニット運用時 注) 1つのワークユニット定義サイズ = 1000 + (500 × “[Application Program]セクション定義数”) + (500 × “[Resource Manager]セクション定義数”) + (500 × “[Nonresident Application Process]セクション定義数”) + (500 × “[Multiresident Application Process]セクション定義数”) + ユーザ任意指定文字列データ長 機能: CORBAサービス Interstage Application Server Standard-J Editionの場合 Interstage Application Server Enterprise Editionの場合 ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) 0.1 以上 インプリメンテーション情 報、ネーミングサービス、 インタフェースリポジトリの データサイズに依存しま す。 4.1 以上 (注1) ネーミングサービス情報 CORBAサービスのインストールディレクト リ\etcフォルダ /etc/opt 8 以上 CORBAサービスのインストールディレクト リ\varフォルダ ログ情報 42.0 -7- ディレクトリ /var/opt ディスク容量 (単位:Mバイト) 備考(用途) 24.0 (デフォルト時の最大サイ ズ) (注2) 2.0 以上 (注3) 内部ログ採取時(プレイン ストール型Javaライブラリ 以外の場合) 4.0 以下 (注1) ネーミングサービスのユー ザ例外ログ情報 4.0 以下 (注1) ネーミングサービスの実行 トレース情報(サービス動 作時のみ) 32.3 以下 インタフェースリポジトリ サービスのログ情報(サー ビス動作時のみ) 10.4 (注4) トレース情報 10.3 以上 (注5) インタフェースリポジトリ サービス情報 1.0 以上 IDL定義の量に依存 C/C++コンパイラ動作時に は、別途作業用のディスク 容量が必要 IDLコンパイラ動作時 Java VMのシステムプロパティのuser.dirで 指定 (注6) 内部ログ採取時(プレイン ストール型Javaライブラリの 場合) 環境変数OD_HTTPGW_HOMEまたは OD_HOMEで指定されたvarディレクトリ 2.0 以上 (注7) HTTP-IIOPゲートウェイの 内部ログ採取時 CORBAサービスのインストールディレクト リ\var\traceフォルダ /var/opt/FSUNod/trace /var/opt/FJSVod/trace コンポーネントトランザクションサービスイ ンストールディレクトリ\var\IRDB コンポーネントトランザクションサービスイ ンストールディレクトリ/var/IRDB (Interstage統合コマンド使用時のデフォル ト) /tmp Interstage Web Serverの場合 ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) 8.0 以上 CORBAサービスのインストールディレクト リ\varフォルダ ログ情報 42.0 /var/opt -8- ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) 24.0 (デフォルト時の最大サイ ズ) (注2) 2.0 以上 (注3) 内部ログ採取時(プレイン ストール型Javaライブラリ 以外の場合) 10.4 (注4) トレース情報 (注6) 内部ログ採取時(プレイン ストール型Javaライブラリの 場合) CORBAサービスのインストールディレクト リ\var\traceフォルダ /var/opt/trace Java VMのシステムプロパティのuser.dirで 指定 注1) CORBAサービスのサーバマシンにネーミングサービスを構築する場合に、必要となるディスク容量について以下に示します。 - ディスク容量 用途 ネーミングサー ビス情報 容量 オブジェクトリポジトリ (固定)16Kバイト 制御ファイル (固定)2056Kバイト データファイル (可変)2048(Kバイト) × コンテキスト数 + (オブジェクトリファレンス長 × オブジェクト数 × 2) 実行トレース情報 (最大)4096Kバイト ユーザ例外ログ情報 (最大)4096Kバイト 注2) CORBAサービスのログ採取機能を使用している場合、最大で以下のディスク容量を使用します。(各パラメタはconfigファイルで 定義) access_log_size × 2 + error_log_size × 2 + process_log_size × 2 + info_log_size × 2 Windowsでは、上記に加えてさらに以下のディスク容量を使用します。 error_log_size × 2 + process_log_size × 2 + info_log_size × 2 ログ採取機能については“トラブルシューティング集”の“CORBAサービスのログ情報の採取”を、上記パラメタについては“A.1 config”(CORBAサービス)を参照してください。 注3) 以下のディスク所要量(単位:バイト)が必要です。 (max_processes(*) + 2) × log_file_size(*) × 2 *: CORBAサービスのインストールフォルダ\etc\configファイルのパラメタ log_file_size(*)×2 *: configファイルで定義 なお、ログファイルは、不要になった時点で、削除してください。 採取されるログファイルはlog、log.old以外にサーバアプリケーションごとに“appNNNN.log”、“appNNNN.old”(NNNNは英数字) -9- の名前で採取されます。 自ホストでネーミングサービス、インタフェースリポジトリを動作させる場合には、それぞれ、4Mバイト、32Mバイトの領域が必要で す。 注4) CORBAサービスのトレース情報の採取機能を使用している場合、最大で以下のディスク容量を使用します。(各パラメタはconfig ファイルで定義) trace_size_per_process× max_processes × 2 + trace_size_of_daemon × 2 トレース情報の採取機能については“トラブルシューティング集”の“CORBAサービスのトレース情報の採取”を、上記パラメタに ついては“A.1 config”(CORBAサービス)を参照してください。 注5) インタフェースリポジトリを使用する場合のディスク容量について以下に示します。インタフェースリポジトリのデータベースのサイ ズは、以下の計算式に従って見積もり、ディスクを確保してください。 なお、インタフェースリポジトリのデータベースは、初期値(10240Kバイト)から自動拡張します。 - ディスク容量 用途 インタフェース リポジトリサー ビス情報 容量 管理域 (固定)220Kバイト 利用者定義領域 (初期値:可変)10240Kバイト 実行トレース情報 (最大)33000Kバイト - 見積り式 利用者定義領域(オブジェクトに要するディスク容量)の見積り式を以下に示します。 項 番 IDL定義 1 モジュール宣言 1708 + ((a-1)÷32+1)×176 2 インタフェース宣言 1712 + ((a-1)÷32+1)×176 + ((b-1)÷32+1)×176 + 512×b 3 オペレーション宣言 2304 + ((e-1)/32+1)×176 + ((f-1)÷32+1)×176 + ((g-1)÷32+1)×176 4 属性宣言 2224 5 定数宣言 2160 + c 6 例外宣言 1712 + ((d-1)÷32+1)×176 + 836×d 7 データ型宣言 2220 8 文字列型宣言(ワイド 文字列を含む) 1716 9 列挙型宣言 1824 + ((j-1)÷32+1)×176 + 64×j 10 シーケンス型宣言 2228 11 構造体宣言 1712 + ((h-1)÷32+1)×176 + 836×h 12 共用体宣言 2436 + ((i-1)÷32+1)×176 + 972×i 13 固定小数点型宣言 1716 14 配列宣言 2228 記 号 a 計算式(単位:バイト) 項目 包含数 意味 包含する型宣言数 - 10 - 記 号 項目 意味 b 継承数 インタフェース宣言が継承するインタフェース数 c 定数値長 定数宣言の値の長さ d 例外構造体メンバ数 例外宣言の構造体のメンバ数 e パラメタ数 オペレーション宣言でのパラメタ数 f コンテキスト数 オペレーション宣言でのコンテキスト数 g 例外数 オペレーション宣言での例外数 h 構造体メンバ数 構造体宣言でのメンバ数 i 共用体メンバ数 共用体宣言でのメンバ数 j 列挙型メンバ数 列挙型宣言でのメンバ数 注6) ログファイルのサイズの上限値は、CORBAサービスのconfigファイルのlog_file_sizeで設定することができます。アプリケーション ごとにJVxxxxxxxxxx.log/JVxxxxxxxxxx.old(xxxxxxxxxxは一意の数字)の名前で採取されます。なお、ログファイルは、不要になっ た時点で、削除してください。 注7) ログファイルのサイズの上限値は、HTTPトンネリングの“gwconfigファイル”の“max_log_file_size”で設定することができます。ディ スク容量は、バックアップファイルを1つ残すため“max_log_file_sizeで指定した値×2”となります。また、SolarisまたはLinuxで、Web サーバにInterstage HTTP Serverを使用している場合は、Interstage HTTP Serverの通信プロセスごとにログファイルが作成されま す。なお、ログファイルは、不要になった時点で、削除してください。 機能: イベントサービス ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) チャネル情報 イベントサービスのインストールディレクトリ \etc 0.1 以上 /etc/opt 1.0 以上 イベントサービスのインストールディレクトリ \var 61(Mバイト) + essetcnfコマンドの-s logsizeオプションの指定 値×2(Kバイト)以上 /var/opt ログ情報 トレース情報 traceconfigファイルの trace_size × トレースファ イルの世代数 トレースの採取方法によっ て異なります。 (注1) Interstage管理コンソールで保存先(新規作 成)の格納ディレクトリで指定、またはイベ ントサービスのユニット定義ファイルの “trandir”、“sysdir”、“userdir”で指定 不揮発チャネル運用時 38 × イベントサービスで 作成したユニット数以上 (注2) 運用の内容により、必要と するサイズを検討してくだ さい。 (注2) - 11 - 注1) - プロセス単位で内部トレースを採取する (traceconfigファイルのtrace_buffer = process)場合 traceconfigファイルのtrace_size × イベントチャネルのプロセス数 × トレースファイルの世代数 イベントチャネルのプロセス数 = 静的イベントチャネルグループ数 + 動的イベントチャネルのプロセス数 動的イベントチャネルのプロセス数: isinitコマンドでInterstage初期化時に設定したInterstage動作環境定義の定義“Event maximum Process”の指定値。 ノーティフィケーションサービスを使用している場合は、“動的イベントチャネルのプロセス数×2”としてください。 - イベントサービス単位で内部トレースを採取する (traceconfigファイルのtrace_buffer = system)場合 traceconfigファイルのtrace_size × トレースファイルの世代数 注2) Interstage管理コンソールで設定した場合は、保存先(新規作成)の格納ディレクトリには、以下の容量が必要となります。 - イベントデータ用ファイル容量 - システム用ファイル容量 - トランザクション用ファイル容量: ((トランザクション多重度 × 4) + 256 + (1トランザクション内最大メッセージサイズ × 2)) × 16 (KB) ユニット定義ファイルで設定した場合は、各ユニット定義ファイルで指定した以下の容量が必要となります。 - “sysdir”で指定したディレクトリには、“syssize”で指定したサイズ - “userdir”で指定したディレクトリには、“usersize”で指定したサイズ - “trandir”で指定したディレクトリには、 ((tranmax×4) + 256 + (tranunitmax × 2)) × 16 (Kバイト) 機能: Portable-ORB ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) ログ情報 (注2) Portable-ORBインストールディレクトリ (注1) /var/opt (注1) 注1) アプレットとして動作する場合は、アプレットが動作するクライアントマシン上のローカルディスクに、porbeditenvコマンドで“ログ格 納ディレクトリ”として指定したディレクトリとなります。 注2) porbeditenvコマンドで“ログ情報を採取”を指定した場合、 設定した“ログファイルサイズ” × 2 × 動作するアプリケーション/アプレット数 機能: コンポーネントトランザクションサービス ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) ログトレースファイル 25以上 コンポーネントトランザクションサービスの インストールディレクトリ\var - 12 - ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) /var/opt/FSUNtd/ 15.0 以上 動作環境 運用の内容により、必要と するサイズを検討してくだ さい。 (注) 異常終了した場合に採取 されるcoreファイル /opt/FSUNtd/etc/isreg(Interstageの動作環 境ディレクトリ) /opt/FJSVtd/etc/isreg(Interstageの動作環 境ディレクトリ) /var 注) ディスク所要量の算出方法は以下のとおりです。 CORBAサービス関連の共有メモリサイズ(*1) × 3 + コンポーネントトランザクションサービスの共有メモリサイズ(*2) + ワークユニット数 × 0.26 + ワークユニットに含まれるIDL定義のパラメタ数(*3) × 0.00005 + 基本サイズ(*4) - *1:CORBAサービス関連の共有メモリサイズ CORBAサービスのconfigファイル(/opt/FJSVod/config)中の各パラメタから以下の式で算出します。 limit_of_max_IIOP_resp_con × 0.016 + limit_of_max_IIOP_resp_requests × 0.016 + max_impl_rep_entries × 0.006 + 0.01 - *2: コンポーネントトランザクションサービスの共有メモリサイズ クライアント数 × 0.1 + 100 クライアント数とは、Interstageシステム定義を生成するために、isgendefコマンドで指定したシステム規模により次のとおり見積 もってください。 small : 50 moderate : 100 large : 500 super : 1000 - *3: ワークユニットに含まれるIDL定義のパラメタ数 ワークユニット数やIDL定義内のパラメタ数が多い場合に加算してください。 各オペレーションのパラメタに構造体がある場合、パラメタごとに構造体のメンバ数を加算してください。 - *4: 基本サイズ コンポーネントトランザクションサービスの環境定義ファイル(/var/opt/FJSVtd/etc/sysdef)のSystem Scale: ステートメントに指定し た値に応じて、以下のようになります。 small : 250 moderate : 330 large : 840 super : 1400 small : 270 moderate : 350 - 13 - large : 860 super : 1420 機能: データベース連携サービス ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) (注) システムログファイル トランザクション数 × 0.008 + 0.001 データベース連携サービ ス運用時 - ログファイル格納ディレクトリ トレースログファイル格納ディレクトリ 運用環境の OTS_TRACE_SIZE × 0.001 リソース管理トレースログファイル格納ディ レクトリ 運用環境の RESOUCE_TRACE_SIZ E × 0.001 リカバリトレースログファイル格納ディレクト リ 運用環境の RECOVERY_TRACE_S IZE × 0.001 監視プロセストレースログファイル格納ディ レクトリ 運用環境の OBSERVE_TRACE_SIZ E × 0.001 リソース定義ファイル格納ディレクトリ 登録したリソース定義ファ イル数 × 0.001 5.0 以上 /opt/FSUNots/var (otsgetdumpコマンドによるダンプファイル 格納ディレクトリ) 注) データベース連携サービスのシステムログファイルは、isgendefコマンドで指定したシステム規模により異なりますので、以下のと おり見積もってください。 small : 1Mバイト以上 moderate : 2Mバイト以上 large : 8Mバイト以上 super : 16Mバイト以上 機能: ロードバランス ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) データファイル (注) CORBAサービスのインストールディレクトリ \etcフォルダ /etc/opt 注) 以下のディスク所要量が必要です。 ロードバランスグループ数 × ((1ロードバランスグループあたりのオブジェクトリファレンス数 × オブジェクトリファレンス長) + 0.0005) 初期量として、8256Kバイトを、初回起動時に獲得します。 これを超過した場合、1024Kバイト単位で拡張します。 - 14 - 機能: 性能監視ツール ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) 格納ディレクトリ 1.0以上 (注1) 性能ログファイル /var 6.4 × 性能監視ツールの 共有メモリサイズ(注2) × 6 異常終了した場合に採取 されるcoreファイル 注1) 所要量 = ispmakeenvで指定する共用メモリサイズ × (測定時間 ÷ インターバル時間) 注2) ispmakeenvコマンドの-mオプションで指定する共有メモリサイズです。 機能: MessageQueueDirector ディレクトリ - ディスク容量 (単位:Mバイト) 備考(用途) 運用の内容により、必要と するサイズを検討してくだ さい 詳細は “MessageQueueDirector 説 明書”の“ファイル容量の見 積り”を参照してください ディスク容量 (単位:Mバイト) 備考(用途) 機能: フレームワーク ディレクトリ Java VMのシステムプロパティの java.io.tmpdirで指定 クライアント(Webブラウ ザ)からアップロードされる ファイルサイズ ファイルアップロード機能 の使用時 (注) 運用の内容により、必要 とするサイズを検討してく ださい。 フレームワークのログ機能で指定したファ イルが格納されるディレクトリ 運用の内容により、必要と するサイズを検討してくだ さい。 フレームワークのログ機能 の使用時 注) このディレクトリには、WebブラウザからアップロードされたファイルのサイズがWebアプリケーションの指定したファイル転送用メモ リサイズを超えた場合に、アップロードされたファイルが格納されます。 機能: Java EE ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) 配備ファイルのサイズ × 2 配備時に使用する一 時領域 配備ファイルを展開した資産のサイ ズ×2 Java EEアプリケーショ ンの資産一式 [Java EE共通ディレクトリ]\work [Java EE共通ディレクトリ]/work [Java EE共通ディレクトリ] - 15 - ディレクトリ ディスク容量 (単位:Mバイト) 配備モジュールの誤りに依存 [Java EE共通ディレクトリ]\domains\interstage\logs \verifier-results [Java EE共通ディレクトリ]/domains/interstage/logs/verifierresults ・ 時間によるローテーションを指定 した場合 1回あたりの出力サイズ × 1日あ たりの採取回数 × (保存するロ グファイルの世代数 + 1) [Java EE共通ディレクトリ]\nodeagents\ijna\サーバーイン スタンス名\logs [Java EE共通ディレクトリ]/nodeagents/ijna/サーバーインス タンス名/logs ・ サイズによるローテーションを指 定した場合 ログファイルのサイズ × (保存す るログファイルの世代数 + 1) ※1回あたりの出力サイズは、ログファ イル1つにつき約0.0001Mバイト~ 0.0005Mバイトです。 ※1日あたりの採取回数は、コマンド 起動時に指定された採取間隔により 決まります。 採取間隔の指定単位は1分のため、 「1440÷採取間隔」で1日あたりの採 取回数を求めることができます。 ※ログファイルのサイズは、ログ設定 で指定したログファイルのサイズで す。 ※保存するログファイルの世代数 は、ログ設定で指定したログファイル の世代数です。 [Java EE共通ディレクトリ]\domains\interstage\applications \j2ee-apps 配備するエンタープライズアプリケー ション(.ear)を展開した資産のサイズ [Java EE共通ディレクトリ]/domains/interstage/applications/ j2ee-apps [Java EE共通ディレクトリ]\domains\interstage\applications \j2ee-modules [Java EE共通ディレクトリ]/domains/interstage/applications/ j2ee-modules 配備する下記アプリケーションを展 開した資産のサイズ ・ Webアプリケーション(.war) ・ EJBモジュール(.jar) ・ コネクタモジュール(.rar) ・ アプリケーションクライアント(.jar) [Java EE共通ディレクトリ]\domains\interstage\generated [Java EE共通ディレクトリ]/domains/interstage/generated 配備するアプリケーションの構成に 依存します。 なお、大容量、および多数の配備モ ジュールを配備する場合、開発環境 でアプリケーションの配備を行い、生 - 16 - 備考(用途) 配備モジュールの検 証結果を格納する領 域 ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) 成物の容量を事前に確認することを 推奨します。 最大4Mバイト [Java EE共通ディレクトリ]\commands [Java EE共通ディレクトリ]/commands [Java EE共通ディレクトリ]\domains\interstage\imq \instances\ブローカインスタンス名 初期値1MBに下記で算出した値を 加算してください。 ・ 物理格納先ごとに以下の値を算 出し、合計してください。 最大蓄積件数×(メッセージボ ディに設定する最大サイズ+メッ セージプロパティに設定する最 大サイズ+0.0003)×2 [Java EE共通ディレクトリ/domains/interstage/imq/instances/ ブローカインスタンス名 メッセージブローカを 複数起動する場合に は、メッセージブローカ ごとに左記の値を算出 し、各値を合計して ディスク容量を算出し てください。 ・ imq.log.file.rolloverbytesプロパ ティに設定したサイズ×10 (トランザクションを使用する場合) ・ トランザクションの合計数×0.002 ・ トランザクション中に受信するメッ セージの最大数をnとして、n× (512+32×n)×トランザクション の合計数×0.000001 (Durable Subscription機能を使用 する場合) ・ durable Subscriberの最大数× 0.003 [Java EE共通ディレクトリ]\nodeagents\ijna\サーバーイン スタンス名\logs\iiop IIOPアクセスログのログサイズ × (保 存するログファイルの世代数 + 1) [Java EE共通ディレクトリ]/nodeagents/ijna/サーバーインス タンス名/logs/iiop [トランザクションログの位置] キーポイント間隔の設定値 × 0.0005Mバイト + 0.15Mバイト トランザクションログファ イルの格納先 [セッション格納位置] passivateされたBeanインスタンスの ファイルサイズ × passivateされた Beanインスタンス数 「5.7.2 Enterprise Bean インスタンスのキャッシ ング」を参照しEJBコン テナ定義のチューニン グを実施したり、負荷 試験や運用リハーサ ルを実施したりしてど の程度のディスク容量 が必要になるかどうか 事前に想定し、見積も ることを推奨します。 Beanインスタンスのファイルサイズや passivateされる数量は、配備するア プリケーションやアプリケーションの 運用方法に依存します。 IJServerクラスタのHTTPトレースログ HTTPトレースログのログサイズ × (保存するログファイルの世代数 + 1) - 17 - ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) [Java EE共通ディレクトリ]\nodeagents\ijna\サーバーインス タンス名\logs\http [Java EE共通ディレクトリ]/nodeagents/ijna/サーバーインスタ ンス名/logs/http Interstage Java EE DASサービスのHTTPトレースログ [Java EE共通ディレクトリ]\domains\interstage\logs\http [Java EE共通ディレクトリ]/domains/interstage/logs/http IJServerクラスタのHTTPアクセスログ ・ サイズによるローテーションを指 定した場合 ログファイルのサイズ × (保存す るログファイルの世代数 + 1) [Java EE共通ディレクトリ]\nodeagents\ijna\サーバーインス タンス名\logs\http ・ 時間によるローテーションを指定 した場合 1回あたりの出力サイズ × 1日あ たりの採取回数 × (保存するロ グファイルの世代数 + 1) [Java EE共通ディレクトリ]/nodeagents/ijna/サーバーインスタ ンス名/logs/http Interstage Java EE DASサービスのHTTPアクセスログ [Java EE共通ディレクトリ]\domains\interstage\logs\http [Java EE共通ディレクトリ]/domains/interstage/logs/http ※1回あたりの出力サイズは、形式で 指定した項目によって変動しますが、 通常は、ログファイル1つにつき約 0.0001Mバイト~0.0010Mバイト程度 です。 ※1日あたりの採取回数は、コマンド 起動時に指定された採取間隔により 決まります。 採取間隔の指定単位は1分のため、 「1440÷採取間隔」で1日あたりの採 取回数を求めることができます。 ※ログファイルのサイズは、ログ設定 で指定したログファイルのサイズで す。 ※保存するログファイルの世代数 は、ログ設定で指定したログファイル の世代数です。 1.1.2 マルチサーバ管理を使用する場合 マルチサーバ管理を使用する場合、以下に示すディスク容量が追加で必要です。 ■管理サーバ機能を使用する場合 管理サーバ機能を使用する場合は以下にあげる項目に関するディスク容量が必要です。ディレクトリおよび容量については“1.1.1 サーバ機能を使用する場合”の同一項目名の記述を参照してください。 ・ Interstage管理コンソール - 18 - ・ Interstage HTTP Server ・ Interstage ディレクトリサービス ・ Interstage JMXサービス ・ 業務構成管理 また、以下のディスク容量も必要です。 ディレクトリ (デフォルト) ディスク容量 (単位:Mバイト) Interstage JMXサービスのインストールディ レクトリ\var\ssv_ijs 備考(用途) 配備するアプリケーションのサイ ズ×2 Interstage管理コン ソールからのアプリ ケーションの配備 (注) Interstage管理コン ソールからのログ参照 /var/opt/FJSVisjmx/ssv_ijs Interstage管理コンソールのインストールディ レクトリ\isAdmin\var\download /var/opt/FJSVisgui/tmp/download 注) Interstage管理コンソールの以下の統合管理画面において、ログファイルをダウンロードする場合、同時にダウンロードするログファイ ルのサイズ分のディスク容量が一時的に必要となります。 機能 Interstage HTTP Server 画面(スタンドアロン) [統合管理] > [Interstage管理コンソール] > [Interstage Application Server] > [サーバグループ名] > [サーバ名] > [システム] > [サービス] > [Webサーバ] > [FJapache] > [ログ参照]タブ [統合管理] > [Interstage管理コンソール] > [Interstage Application Server] > [サーバグループ名] > [サーバ名] > [システム] > [サービス] > [Webサーバ] > [FJapache] > [バーチャルホスト] > [バーチャルホスト 名] > [ログ参照]タブ Webサーバコネクタ [統合管理] > [Interstage管理コンソール] > [Interstage Application Server] > [サーバグループ名] > [サーバ名] > [システム] > [サービス] > [Webサーバ] > [FJapache] > [Webサーバコネクタ] > [ログ参照]タブ IJServerワークユニット [統合管理] > [Interstage管理コンソール] > [Interstage Application Server] > [サーバグループ名] > [サーバ名] > [システム] > [ワークユ ニット] > [ワークユニット名] > [ログ参照]タブ ログファイルのサイズについては、各機能のログ情報のディスク容量を参照し、運用の内容により必要とするサイズを検討してください。 なお、ログファイルのサイズが大きいため、ディスク容量の不足によりログファイルのダウンロードに失敗する場合は、FTPなどを使用 してダウンロードしてください。 注意 管理サーバ機能は、以下の製品で利用可能です。 ・ Interstage Application Server Enterprise Edition - 19 - ■管理対象サーバとして運用する場合 管理対象サーバとして運用する場合は、使用する機能に関するディスク容量が必要です。ディレクトリおよび容量については“1.1.1 サーバ機能を使用する場合”の同一項目名の記述を参照してください。 また、以下のディスク容量も必要です。 ディレクトリ (デフォルト) ディスク容量 (単位:Mバイト) 備考(用途) サイトへ追加される場 合 1 Interstage JMXサービスのインストールディ レクトリ\etc /etc/opt/FJSVisjmx ■共存サーバとして運用する場合 共存サーバでは管理サーバ機能とInterstageのサーバ機能(管理対象サーバ)が同一マシン上で動作しています。上記の記事を参照 して、管理サーバ機能とInterstageのサーバ機能で使用するサービスを列挙してください。各サービスが必要とするディスク容量は“1.1.1 サーバ機能を使用する場合”の同一項目名の記述を参照してください。 注意 管理サーバ機能とInterstageのサーバ機能で同一サービスを使用する場合、そのサービスの必要資源量を2倍する必要はありませ ん。 1.1.3 MQ連携サービスを使用する場合 本ソフトウェアの動作時に必須となる動的ディスク所要量の詳細は、“MQ連携サービス 説明書”の“MQDBRIDGEシステム向け Interstage環境の作成”を参照してください。 1.1.4 クライアント機能を使用する場合 本ソフトウェアを以下の運用で動作させるとき、各ディレクトリにはインストールに必要な“静的ディスク資源”に加えて以下のディスク 容量が必要です。空き容量が足りない場合は、該当するファイルシステムのサイズを拡張してください。 機能: CORBAサービス 注) Interstage Web Serverでは、本機能を使用できません。 ディレクトリ ディスク容量 (単位:Mバイト) 備考(用途) /var/opt (注1) ログ情報(プレインストール型 Javaライブラリ以外の場合) 任意(Java VMのシステムプロパ ティのuser.dirで指定) (注2) ログ情報(プレインストール型 Javaライブラリの場合) /tmp 1.0 以上 IDL定義の量に依存 IDLコンパイラ動作時 注1) ログファイルのサイズの上限値は、CORBAサービスのconfigファイルのlog_file_sizeで設定することができます。ディスク容量は、 バックアップファイルを1つ残すため“ログファイルサイズの上限値×2”となります。configファイルの詳細については、“CORBAサー ビスの動作環境ファイル”-“A.1 config”を参照してください。なお、ログファイルは、不要になった時点で、削除してください。 注2) ログファイルのサイズの上限値は、CORBAサービスのconfigファイルのlog_file_sizeで設定することができます。アプリケーション - 20 - ごとにJVxxxxxxxxxx.log/JVxxxxxxxxxx.old(xxxxxxxxxxは一意の数字)の名前で採取されます。なお、ログファイルは、不要になっ た時点で、削除してください。 機能: Portable-ORB 注) Interstage Web Serverでは、本機能を使用できません。 ディレクトリ /var/opt (注) ディスク容量 (単位:Mバイト) 備考(用途) “ログファイルサイズ”×2×動作 するアプリケーション/アプレット 数 porbeditenvコマンドで“ログ情報 を採取”を指定した場合のログ 情報 注) アプレットとして動作する場合は、アプレットが動作するクライアントマシン上のローカルディスクに、porbeditenvコマンドで“ログ格 納ディレクトリ”として指定したディレクトリとなります。 1.2 メモリ容量 本ソフトウェアを動作させるために必要なメモリ容量は次のとおりです。 注意 動作させるために必要なメモリ容量が確保されていない場合、動作に不具合が生じる場合があります。 1.2.1 サーバ機能を使用する場合 注) Interstage Web Serverでは、以下の機能を使用できます。 ・ Interstage管理コンソール ・ Interstage HTTP Server ・ IJServerワークユニット(“Webアプリケーションのみ運用”) ・ CORBAサービス 以下の各機能を使用する場合のメモリ所要量を示します。 ・ Interstage管理コンソール ・ Interstage HTTP Server ・ Interstage JMXサービス ・ Interstage シングル・サインオン ・ Interstage ディレクトリサービス ・ IJServerワークユニット ・ Session Registry Server ・ CORBAサービス(Interstage Web Serverの場合) ・ CORBAサービス ・ イベントサービス/ノーティフィケーションサービス ・ Portable-ORB ・ コンポーネントトランザクションサービス ・ データベース連携サービス - 21 - ・ ロードバランス ・ セション情報管理機能 ・ MessageQueueDirector ・ フレームワーク ・ Java EE 機能: Interstage管理コンソール 備考 メモリ所要量(単位:Mバイト) 121.0 以上 機能: Interstage HTTP Server 備考 メモリ所要量(単位:Mバイト) HTMLファイルを複数クラ イアント同時アクセス時 22.7 + (0.05 × m) + (0.06 × n) 以上 25.2 + (0.04 × m) + (0.12 × n) 以上 17.0 + (3.5 × n) 以上 8.0 + (3.0 × n) 以上 m: 環境定義ファイルで指定した最大リクエスト同時処理数(httpd.conf ファイルのThreadsPerChildディレクティブの設定値) n: クライアントからのHTMLファイル同時アクセス数 機能: Interstage JMXサービス 備考 メモリ所要量(単位:Mバイト) (注) 90.0 以上 81.3 以上 270.0 以上 130.0 以上 200.0 以上 注) 下段はWindows Server(R) 2003 x64 Editionsを使用した場合の所要量です。 機能: Interstage シングル・サインオン 備考 メモリ所要量(単位:Mバイト) 10.0 以上 (注1) 業務サーバ機能 10.0 以上 (注2) 認証サーバ機能 10.0 以上 (注3) リポジトリサーバ機能 注1) 運用に応じて以下の式で見積もった値を加算してください。(単位:バイト) - (2,400 + (ロール数 + ロールセット数 + (ロールセット数 × ロール数)) × 2,048以上) × パス定義数 + 業務サーバ数 × (2,000,000 + キャッシュサイズ × キャッシュ数) ロール数 : SSOリポジトリに定義した保護リソースの、チューニングを行う業務サーバのパス定義に設定したロールの総数 ロールセット数 : SSOリポジトリに定義した保護リソースの、チューニングを行う業務サーバのパス定義に設定したロールセットの総数 パス定義数 : SSOリポジトリに定義した保護リソースの、チューニングを行う業務サーバのパス定義の総数 - 22 - キャッシュサイズ: “F.4 業務サーバを構築する場合のチューニング”を参照してください。 キャッシュ数 : “F.4 業務サーバを構築する場合のチューニング”を参照してください。 注2) セション管理を行わない場合は、運用に応じて以下の式で見積もった値を加算してください。(単位:バイト) - ((サイト定義数 × 1,024) + (パス定義数 × 1,024)) × 2 サイト定義数: SSOリポジトリに定義したサイト定義の総数 パス定義数 : SSOリポジトリのすべてのサイト定義に定義したパス定義の総数 統合Windows認証を行う場合は、256Mバイトを加算してください。 認証サーバ間連携を行う場合は、256Mバイトを加算してください。 注3) 運用に応じて以下の式で見積もった値を加算してください。(単位:バイト) - ((ロール数 + ロールセット数 + ロールセット数 × ロール数) × 2,048以上) × 2 ロール数 : SSOリポジトリに定義したロールの総数 ロールセット数: SSOリポジトリに定義したロールセットの総数 セション管理を行う場合は、上記の算出値に、以下の式から算出される値を加算してください。 - 23,500,000 + ((同時にシングル・サインオンシステムを使用する利用者数 × (2,560 + α)) × 2) 【α:拡張ユーザ情報】 通知する拡張ユーザ情報の数に応じて、以下の値を加算する。 通知する拡張ユーザ情報のサイズ × 2 ユーザ情報を登録するディレクトリサービスにActive Directoryを使用し、シングル・サインオンの拡張スキーマを使用しない場合 は、上記の算出値に、以下の式から算出される値を加算してください。 - Active Directoryのロール/ロールセットに使用する属性の総数 × 524 × 2 機能: Interstage ディレクトリサービス 備考 メモリ所要量(単位:Mバイト) 340.0 以上 (注1) 150.0 以上 (注1) 217.0以上 (注1) スタンドアロン、データ ベース共用、またはスレー ブで運用する場合 (注2) 50.0 以上 (前項のスタンドアロンで運用する場合に加えて必要となる値) マスタで運用する場合 (注 2) 2.0 以上 エントリ管理コマンドを使 用する場合 22.0 以上 60.0 以上 60.0 以上 m×n×3 m: 1エントリの登録に使用したLDIFファイルのサイズ n: 検索により通知されるエントリ数 エントリ管理ツールを使用 する場合 Interstage ディレクトリサー ビス SDK 検索時 注1) リポジトリを複数作成して運用する場合は、リポジトリ数を乗算してください。 注2) 表中の“マスタ”、および“スレーブ”は、リポジトリのデータベースに標準データベースを使用したレプリケーション形態で運用する 場合の、マスタ、およびスレーブサーバについて説明しています。 リポジトリのデータベースにRDBを使用したレプリケーション形態で運用する場合の、マスタ、およびスレーブサーバのメモリ所要 量は、スタンドアロンで運用する場合と同じです。 - 23 - 機能: IJServerワークユニット “WebアプリケーションとEJBアプリケーションを同一JavaVMで運用”時 (注1)(注2) メモリ所要量(単位:Mバイト) (*) 59.6 以上 56.5 以上 107.4 以上 90.2 以上 備考(以下のサンプルアプリケーションを 運用した場合) EjbBmp(Web,Session,BMP) 114.3 以上 62.1 以上 56.6 以上 108.7 以上 65.8 以上 EjbCmp11(Web,Session,CMP1.1) 115.1 以上 65.8 以上 61.2 以上 114.7 以上 89.9 以上 EjbCmp20(Web,Session,CMP2.0) 118.8 以上 71.6 以上 66.2 以上 119.2 以上 99.6 以上 EjbMessageDriven(Web,Session,MDB) 125.3 以上 *) 下段はWindows Server(R) 2003 x64 Editionsを使用した場合の所要量です。 “Webアプリケーションのみ運用”時 (注1) メモリ所要量(単位:Mバイト) (*) 51.6 以上 53.1 以上 97.7以上 81.4 以上 備考(以下のサンプルアプリケーションを 運用した場合) HelloServlet(Web) 94.4 以上 *) 下段はWindows Server(R) 2003 x64 Editionsを使用した場合の所要量です。 “EJBアプリケーションのみ運用”時 (注2) メモリ所要量(単位:Mバイト) (*) 54.3 以上 55.8 以上 98.2 以上 87.7 以上 備考(以下のサンプルアプリケーションを 運用した場合) EjbBmp(Session,BMP) 106.3 以上 55.8 以上 55.9 以上 100.9 以上 86.4 以上 EjbCmp11(Session,CMP1.1) 107.6 以上 57.9 以上 58.6 以上 107.9 以上 86.4 以上 EjbCmp20(Session,CMP2.0) - 24 - メモリ所要量(単位:Mバイト) (*) 備考(以下のサンプルアプリケーションを 運用した場合) 111.8 以上 59.8 以上 60.2 以上 109.9 以上 96.9 以上 EjbMessageDriven(Session,MDB) 118.3 以上 *) 下段はWindows Server(R) 2003 x64 Editionsを使用した場合の所要量です。 注1) 詳細は以下の式で見積もってください。(単位:Mバイト) ・ Webサーバコネクタ 0.2 × k + 2.0 1.9 × k + 30.0 1.0 × k + 30.0 k: Servletサービスへの同時アクセス数 ・ IJServerワークユニット:(プロセス多重度1当り) - “WebアプリケーションとEJBアプリケーションを運用”の場合 48.0 + (1.4 × k) + (0.7 × w) + (P1+P2+P3+..+Pn) 121.0 + (2.1 × k) + (0.7 × w) + (P1+P2+P3+..+Pn) 28.0 + (1.5 × k) + (0.7 × w) + (P1+P2+P3+..+Pn) - “Webアプリケーションのみ運用”の場合 47.0 + (1.3 × k) + (0.7 × w) + (P1+P2+P3+..+Pn) 84.0 + (2.5 × k) + (0.7 × w) + (P1+P2+P3+..+Pn) 27.0 + (1.3 × k) + (0.7 × w) + (P1+P2+P3+..+Pn) k: Servletコンテナへの同時アクセス数 w: Webアプリケーションの数 Pn: 各ServletまたはJSPの実行サイズ。上記表では1Mバイトとして計算 セションリカバリ機能(Session Registry Client)を使用する場合は、以下の値を加算してください。 - (0.002 + セションの保持するデータ容量(※)) × 想定されるセション数 ※: Webアプリケーションでセションの属性(Attribute)にセットするオブジェクトおよびキーのサイズの合計値 なお、セションリカバリ機能(Session Registry Client)は、Interstage Application Server Enterprise Edition、Interstage Application Server Standard-J Editionで運用可能です。 ServletはJava VM上で動作するため、実際のメモリ使用量(ヒープ領域を含む)は、以下に示す要因により異なります。 - newするクラス型 - newするインスタンスの個数 - インスタンスのライフサイクル - 25 - - GCの動作状況 - IJServerワークユニットの各種定義 - 使用するJava VM そのため正確なメモリ使用量(ヒープ領域、Perm領域)は次のようにして実測することにより見積もることを推奨します。 - 本番運用のピーク時と同一条件で動作させます。Java VMが使用するメモリが不足すると、イベントログにメッセージが出力さ れますので、ヒープ領域やPerm領域の最大値を増やして、最適な値としてください。求めたヒープ領域やPerm領域の最大値 をそのまま本番運用時の値として利用します。 注2) 以下を参考に、EJBサービス運用時のメモリ所要量を見積もってください。 EJBアプリケーション運用時、Java VMが使用するメモリ量(初期値、最大値)および1プロセスで必要な全メモリ量は、以下に示す 要因により異なります。 - newするクラス型 - newするインスタンスの個数 - インスタンスのライフサイクル - GCの動作状況 - EJBアプリケーションの各種定義 いずれのメモリ量も簡単には算出できないので、次のようにして実測することにより見積もってください。 1. Java VMが使用するメモリ量の初期値(javaコマンドの-Xmsオプションで指定する値) EJBアプリケーションを、本番運用の通常時(ピーク時ではない)と同一条件で動作させます。Java VMが使用するメモリ量(最 大値)が不足すると、IJServer21033またはEJB1033メッセージが出力されますので、試行錯誤によりメモリ量(最大値)を最適 な値としてください。このようにして求めたメモリ量(最大値)を本番運用時のメモリ量(初期値)として利用します。メモリ量(初期 値)の省略値は2Mバイトです。 2. Java VMが使用するメモリ量の最大値(javaコマンドの-Xmxオプションで指定する値) EJBアプリケーションを、本番運用のピーク時と同一条件で動作させます。Java VMが使用するメモリ量(最大値)が不足する と、IJServer21033またはEJB1033メッセージが出力されますので、試行錯誤によりメモリ量(最大値)を最適な値としてくださ い。このようにして求めたメモリ量(最大値)をそのまま本番運用時のメモリ量(最大値)として利用します。メモリ量(最大値)の 省略値は64Mバイトです。 3. 1プロセスで必要な全メモリ量 1)と2)でJava VMが使用するメモリ量を見積り時、同時に1プロセスで必要な全メモリ量も実測して見積もってください。 機能: Session Registry Server 備考 メモリ所要量(単位:Mバイト) (例)254 (注) (例)120 (注) 注) 詳細は以下の式で見積もってください。(単位:Mバイト) 85.7 + (2.5 × k) + (0.01 × a) + ((0.002 + d) × s) × 2 28.7 + (1.3 × k) + (0.01 × a) + ((0.002 + d) × s) × 2 k: Session Registry Serverの同時処理数 a: (IJServerに配備している)Webアプリケーションの数 d: セションの保持するデータ容量 = Webアプリケーションでセションの属性(Attribute)にセットするオブジェクトおよびキーのサイズの合計値。 s: セション数 - 26 - 例: 対象とするIJServerは同時処理数64、アプリケーション1つ、セションに格納するデータ量が2KB、セション数が1000の場合。 85.7 + (2.5 × 64) + (0.01 × 1) + ((0.002 + 0.002) × 1000) × 2 = 85.7 + 160 + 0.01 + 8 ≒ 254 28.7 + (1.3 × 64) + (0.01 × 1) + ((0.002 + 0.002) × 1000) × 2 = 28.7 + 83.2 + 0.01 + 8 ≒ 120 Session Registry ServerはJava VM上で動作するため、実際のメモリ使用量(ヒープ領域を含む)は、負荷やGCの動作状況により 異なります。 そのため正確なメモリ使用量は次のようにして実測することにより見積もることを推奨します。 - 本番運用のピーク時と同一条件で動作させます。Java VMが使用するメモリが不足すると、イベントログにメッセージが出力さ れますので、ヒープ領域の最大値を増やして、最適な値としてください。求めたヒープ領域の最大値をそのまま本番運用時の 値として利用します。 なお、Session Registry Serverは、Interstage Application Server Enterprise Editionで運用可能です。 機能: CORBAサービス(Interstage Web Serverの場合) メモリ所要量(単位:Mバイト) 備考 メモリ所要量(単位:Mバイト) 備考 32.0 以上 機能: CORBAサービス 16.0 以上 (注1) 8.0 以上 ネーミングサービス運用時 45.6 以上 (注2) インタフェースリポジトリ運 用時 2.4 COBOL Webサブルーチ ン使用時 注1) CORBAサービスの動作環境定義(configファイル)の設定により、16Mバイト + 加算値(下表)が必要です。 運用形態 必要数(加算値)(単位:Kバイト) CORBAサービス運用時 100.0 + limit_of_max_IIOP_resp_con × 16.0 + limit_of_max_IIOP_resp_requests × 16.0 + max_impl_rep_entries × 6.0 (以上) トレース機能を使用する 場合 (CORBAサービス運用時) + 20.0 + max_processes × trace_size_per_process (以上) スナップショット機能を使 用する場合 (CORBAサービス運用時) + 10.0 + snap_size (以上) なお、上記のlimit_of_[パラメタ名]のデフォルト値は以下となります。0が指定された場合も、以下と同様になります。 [パラメタ名] × 1.3 (小数部分切り捨て) isconfig.xmlファイルの定義項目AutoConfigurationModeにMANUALを指定し、自動拡張を行わない設定にした場合は、[パラメ タ名]となります。 また、CORBAアプリケーションを動作させる場合、1プロセスあたり1.5 Mバイト以上のメモリが必要となります。 - 27 - 注2) インタフェースリポジトリは、起動時にデータベースに格納されているオブジェクトをメモリ上に展開します。インタフェースリポジトリ を使用する場合のメモリ容量について説明します。 - 固定使用領域 45.6 Mバイト - 可変使用領域 インタフェースリポジトリでは、オブジェクトごとにメモリが使用されます。 以下の計算式より、オブジェクトごとの使用メモリを算出することができます。 項番 計算式(単位:バイト) IDL定義 1 モジュール宣言 3902+a×(2×b+2) 2 インタフェース宣言 3902+a×(2×b+2)+a×b×c 3 オペレーション宣言 3934+a×(3×b+2+f)+a×b×g+h×(12+a+a×b) 4 属性宣言 3910+a×(3×b+2) 5 定数宣言 7704+a×(3×b+3)+d 6 例外宣言 3836+a×(2×b+e+1)+e×(78+a+a×b) 7 文字列型宣言(ワイド 文字列を含む) 3882+a×(b+1) 8 列挙型宣言 3918+a×(2×b+k+2) 9 シーケンス型宣言 3882+a×(2×b+1) 10 構造体宣言 3766+a×(2×b+i+1)+i×(78+a+a×b) 11 共用体宣言 3840+a×(3×b+j+1)+j×(3880+2×a+a×b) 12 固定小数点型宣言 3882+a×(b+1) 13 配列宣言 3886+a×(2×b+1) 記号 項目 意味 a 識別子長 対象オブジェクトの識別子の長さ b 階層数 対象オブジェクトの存在する階層 c 継承数 インタフェース宣言が継承するインタフェース数 d 定数値長 定数宣言の値の長さ e 例外構造体メンバ数 例外宣言の構造体のメンバ数 f コンテキスト数 オペレーション宣言でのコンテキスト数 g 例外数 オペレーション宣言での例外数 h パラメタ数 オペレーション宣言でのパラメタ数 i 構造体メンバ数 構造体宣言でのメンバ数 j 共用体メンバ数 共用体宣言でのメンバ数 k 列挙型メンバ数 列挙型宣言でのメンバ数 機能: イベントサービス/ノーティフィケーションサービス 備考 メモリ所要量(単位:Mバイト) 16.0 以上 8.0 以上 8.0 以上 ユニット数 × 100 + イベントサービスのユニット定義ファイルのshmmaxの合計 不揮発チャネル運用時 - 28 - 備考 メモリ所要量(単位:Mバイト) (a+b)×c (Kバイト) (注1) essetcnfコマンド実行時に静的 生成のイベントチャネルのコン シューマ数・サプライヤ数を拡 張する場合 (a+b)×d (Kバイト) (注1) essetcnfコマンド実行時に動的 生成のイベントチャネルのコン シューマ数・サプライヤ数を拡 張する場合 (a+b)×(c-e)+(f+g)×e (Kバイト) (注1) essetcnfおよびessetcnfchnlコマ ンドを併用して静的生成のイベ ントチャネルのコンシューマ数・ サプライヤ数を拡張する場合 メッセージ本文のサイズ×蓄積メッセージ数 イベントチャネルに蓄積するイ ベントデータの形式に、any型を 使用する場合 (注2) (メッセージ本文のサイズ+(QoSプロパティ項目数×4Kバイト))× 蓄積メッセージ数 イベントチャネルに蓄積するイ ベントデータの形式に、 StructuredEvent型を使用する 場合 (注2) 注1) a:essetcnfコマンドの-coninitオプションで指定するコンシューマ数の初期値の拡張数(初期設定値からの差分) b:essetcnfコマンドの-supinitオプションで指定するサプライヤ数の初期値の拡張数(初期設定値からの差分) c:イベントチャネルのグループ数 d:essetcnfコマンドの-dchmaxオプションで指定するイベントチャネルの最大起動数 e:essetcnfchnlコマンドで設定するイベントチャネルのグループの数 f:essetcnfchnlコマンドの-coninitオプションで指定するコンシューマ数の初期値の拡張数(初期設定値からの差分) g:essetcnfchnlコマンドの-supinitオプションで指定するサプライヤ数の初期値の拡張数(初期設定値からの差分) essetcnfコマンドおよびessetcnfchnlコマンドの詳細については、“リファレンスマニュアル(コマンド編)”を参照してください。 注2) イベントサービスの形式については、“アプリケーション作成ガイド(イベントサービス編)”の“イベントデータの形式”を参照してく ださい。 機能: Portable-ORB 備考 メモリ所要量(単位:Mバイト) 1.5 以上 3.0 以上 機能: コンポーネントトランザクションサービス 備考 メモリ所要量(単位:Mバイト) 48.0 以上 (注1) 50.0 以上 (注2) - 4.0 以上 (注3) サービスの起動 注1) この値はCORBAサービスのメモリ容量を含んでいませんので、加算してください。 注2) ユーザ認証機能を使用する場合は、0.9Mバイト加算してください。 アクセス制御を使用する場合は、0.6Mバイト加算してください。 - 29 - 注3) 1つのワークユニットでプロセス多重度を1とした場合の値です。 詳細は以下の式で見積もってください。 - 4.0 × ワークユニット配下のプロセス数の総和 機能: データベース連携サービス 備考 メモリ所要量(単位:Mバイト) サービスの起動 (データベース連携サービ ス動作マシン) 54.0 + 0.010 × m + 43.0 × n 以上 64.0 + 0.011 × m + 32.0 × n 以上 30.0 + 0.010 × m + 75.0 × n 以上 34.0 + 0.009 × m + 23.0 × n 以上 36.0 + 0.010 × m + 23.0 × n 以上 m: 最大トランザクション数 n: リソース管理ごとの多重度+1の総数 サービスの起動 (リソース管理プログラムだ けを起動するマシン) 22.0 + 27.0 × n 以上 27.0 + 27.0 × n 以上 27.0 + 75.0 × n 以上 14.0 + 20.0 × n 以上 n: リソース管理ごとの多重度+1の総数 機能: ロードバランス 備考 メモリ所要量(単位:Mバイト) 2.0 機能: セション情報管理機能 備考 メモリ所要量(単位:Mバイト) 7.0 以上 機能: MessageQueueDirector 注) MQDシステムが複数ある場合には、それぞれのMQDシステムについて見積もった値の合計が所要量になります。 備考 メモリ所要量(単位:Mバイト) 基本機能使用時 100.0 + m + s ÷ 1000 以上 100.0 + m m: MQD環境定義のMQDConfigurationセクションの MessageBufferMaxSize s: MQD環境定義のMemoryQueueセクションのsize - 30 - メモリ所要量(単位:Mバイト) 備考 39.0 + sc × 0.3 + rc × 0.3 以上 sc: イベントチャネル連携サービスのCHANNELセクション定義数 rc: イベントチャネル連携サービスのRCHANNELセクション定義全部の 総集信数 イベントチャネル連携サー ビス使用時 同報配信サービス使用時 10.0 以上 SMTP連携サービス使用 時 305 + sq × 0.2 + rq × 0.1 + メッセージ長 以上 sq: SMTP連携サービス定義中の送信メッセージキュー数 rq: SMTP連携サービス定義中の受信メッセージキュー数 機能: フレームワーク 備考 メモリ所要量(単位:Mバイト) Application Serverが使用するメモリ使用量 + 32.0 備考 メモリ所要量(単位:Mバイト) サンプル“model”を実行し た場合 2.9 [参考値] (注) 注) フレームワークを使用して作成したWebアプリケーションを運用する場合、必要となるメモリ容量は、Servletサービスの運用に必要 となるメモリ容量に含めて見積もってください。IJServerワークユニットの注1)の計算式のPn(各サーブレットまたはJSPの実行サイズ) の値として、Webアプリケーションのメモリ使用量を適用してください。この値は、フレームワークのサンプル“model”の場合、2.9M バイトです。なお、Servletサービスの運用に必要となるメモリ容量は、IJServerワークユニットの注1)に記載した方法で実測によって 見積もることができます。 フレームワークを使用して作成したEJBアプリケーションを運用する場合、必要となるメモリ容量は、EJBサービスの運用に必要と なるメモリ容量に含めて、IJServerワークユニットの注2)に記載した方法で見積もってください。 機能: Java EE Javaヒープ領域/Permanent世代領域 Interstage Java EE DASサービスのJavaヒープ領域/Permanent世代領域のデフォルト値は、以下のとおりです。 種別 デフォルト値 Javaヒープ 512m Permanent世代領域 192m Javaヒープ領域/ Permanent世代領域のサイズは、Interstage Java EE管理コンソール、またはasadminコマンドで参照・変更できます。 値の参照・変更方法の詳細は、以下を参照してください。 - 「リファレンスマニュアル(コマンド編)」-「create-jvm-optionsサブコマンド」 - 「リファレンスマニュアル(コマンド編)」-「delete-jvm-optionsサブコマンド」 物理メモリ使用量 Interstage Java EE DASサービスの物理メモリ使用量は、以下の見積もり式で算出してください。 [Javaヒープ領域サイズ]+[Permanent世代領域サイズ]+[数値1]+( [IJServerクラスタ数] × 22 + [サーバーインスタンス数] × 10 + 82 ) × [数値2] 数値1、数値2: - 31 - 使用するプラットフォームにより異なります。数値1、数値2は下記表を参照してください。 項番 プラットフォーム 数値1 数値2 1 Windows(R) 300 Mバイト 0.25 Mバイト 2 Solaris 500 Mバイト 1.0 Mバイト 3 Linux 500 Mバイト 0.5 Mバイト IJServerクラスタ数および配下のサーバーインスタンス数を元に算出した値が、プロセスのアドレス空間の上限値を下回ることを 確認してください。もし上限値を超える場合は、上限値を超えない範囲にまでIJServerクラスタ数およびサーバーインスタンス数 の削減を検討してください。 上限を超え、Interstage Java EE DASサービスが起動できない場合は、IJServerクラスタを削除してください。削除手順は「トラブ ルシューティング集」-「運用環境に関する異常」を参照してください。 1.2.2 マルチサーバ管理を使用する場合 マルチサーバ管理を使用する場合、以下に示すメモリ容量が追加で必要です。 ■管理サーバ機能を使用する場合 管理サーバ機能を使用する場合は以下にあげる項目に関するメモリ容量が必要です。容量については“1.2.1 サーバ機能を使用す る場合”の同一項目名の記述を参照してください。 ・ Interstage管理コンソール ・ Interstage HTTP Server ・ Interstage ディレクトリサービス ・ Interstage JMXサービス 管理サーバ機能は以下の製品で利用可能です。 ・ Interstage Application Server Enterprise Edition ■管理対象サーバとして運用する場合 管理対象サーバとして運用する場合は、使用する機能に関するメモリ容量が必要です。容量については“1.2.1 サーバ機能を使用す る場合”の同一項目名の記述を参照してください。 ■共存サーバとして運用する場合 共存サーバでは管理サーバ機能とInterstageのサーバ機能(管理対象サーバ)が同一マシン上で動作しています。上記の記事を参照 して、管理サーバ機能とInterstageのサーバ機能で使用するサービスを列挙してください。各サービスが必要とするメモリ容量は“1.2.1 サーバ機能を使用する場合”の同一項目名の記述を参照してください。 管理サーバ機能とInterstageのサーバ機能で同一サービスを使用する場合、そのサービスの必要資源量を2倍する必要はありませ ん。 1.2.3 クライアント機能を使用する場合 本ソフトウェアを以下の運用で動作させるときに使用するメモリ容量を示します。 - 32 - 機能: Interstage ディレクトリサービス 注) Interstage Web Serverでは、本機能を使用できません。 備考 メモリ所要量(単位:Mバイト) 22.0 以上 エントリ管理ツールを使用する場合 - 33 - 第2章 Interstageのチューニング Interstageはシステム規模の指定だけで、システム運用が可能となるようなモデルケースを設定して各サービスの定義を登録していま す。しかし、システムによっては、より詳細なシステム構築が必要となります。 Interstageをチューニングする場合は、isregistdefコマンドで各サービスの定義を登録した後で実施してください。チューニングした内 容はInterstageの初期化機能で有効となり、Interstageの起動で反映されます。 Interstageのチューニングは、以下の定義ファイルに対して行います。 ・ Interstage動作環境定義 ・ CORBAサービスの動作環境ファイル ・ コンポーネントトランザクションサービスの環境定義 (注) ・ データベース連携サービスのシステム環境定義 注) 本定義は、Interstage Application Server Enterprise Editionのみです。 2.1 想定するシステム形態 2.1.1 想定するシステム形態(Java EE) ここではJava EEアプリケーションの標準的なシステム形態について説明します。Java EE機能を使用してシステムを構築する場合は、 次のようなシステム形態を意識して設計します。 Java EEのシステム形態 Java EEでは、以下のようなシステム形態を推奨しています。 ・ クライアント層 システムに接続するユーザインタフェースを提供します。Webブラウザを基本としていますが、Javaアプリケーションもクライアント として想定されています。 ・ プレゼンテーション層 プレゼンテーションのロジックをカプセル化したもので、システムを利用するクライアントからのリクエストを受け付け、ビジネスロジッ ク層のサービスへの橋渡しなどを行ってレスポンスをクライアントに返送するサービスを提供します。この層では主として、Servletや JSPなどのコンポーネントが使用されます。 ・ ビジネスロジック層 プレゼンテーション層などからの要求に応じて業務処理やデータ提供などのビジネスサービスを供給します。一般的にこの層で 業務に関する処理が行われますが、既存システムなどの資産がある場合はEIS層のリソースを利用する場合もあります。この層で は主として、Enterprise JavaBeans やWebサービスを使用してビジネスロジックが実装されます。 EIS層にあるサービス(処理やデータ)を利用する場合には、EIS層にある外部リソースや他システムなどと連携するための通信機 能を提供するためにインテグレーション層を想定する場合があります。この層では、JDBCやconnectorなどのコンポーネントが使用 されます。 ・ EIS(Enterprise Information System)層 データベース、メインフレーム上で動作するレガシーシステムやパッケージソフトなどのリソースを提供します。 システムを構築する場合、システム設計者はInterstageが提供するJava EEのコンポーネントを組み合わせて自由にシステムを構築す る事ができます。以下は代表的な4層モデルです。 - 34 - 上記のモデルを使用する場合のチューニングポイントとしては、以下があります。 ・ IJServerクラスタ(サーバーインスタンス)のチューニング アプリケーションを運用するプレゼンテーション層とビジネスロジック層はIJServerクラスタ(サーバーインスタンス)で運用します。 このため、アプリケーションの規模やアプリケーションが受け付けるリクエスト量などによりチューニングを行います。 ・ WebコンテナやEJBコンテナのチューニング JSP/ServletやEnterprise JavaBeansといったアプリケーションに対する要求は、WebコンテナやEJBコンテナが受け付けて、必要な 前処理・後処理を行ってアプリケーションを呼び出します。コンテナに対して要求の同時処理数などをチューニングすることで流用 制限を行ったり、プールやキャッシュの定義値を変更することで利用する資源量を調整することができます。 ・ EIS層に対する接続のチューニング データベースなど各種リソースにアクセスする場合には、リソースに対する接続をチューニングする接続プールを使用できます。 リソースに対する要求の同時処理数などをチューニングすることでリソースに対する流用制限を行ったり、使用されていない接続 プールに保持された接続をタイムアウトにより破棄するなどにより使用する資源量を削減することができます。 また、データベースへの接続には、各ベンダが提供するJDBCドライバを使用して接続します。このため、JDBCドライバ側のチュー ニングポイントも合わせて確認する必要があります。 上記のようにシステムを構築する場合、システム設計者は使用するモデルで使用する各コンポーネントのチューニング項目を確認し、 システム規模に合わせてチューニングを行ってください。 また、Java EE機能の各種運用操作を行うInterstage Java EE DASサービスや、IJServerクラスタ(サーバーインスタンス)の起動状態を 監視するInterstage Java EE Node Agentサービスについてもシステム規模に合わせてチューニングする項目があります。 2.1.2 想定するシステム形態(マルチ言語サービス) Interstageの初期化時に、トランザクションアプリケーションを使用した連携をモデルケースとして設定しています。 トランザクションアプリケーションを利用した連携は、以下のとおりです。 ・ ローカルトランザクション連携 ・ グローバルトランザクション連携 ・ セション管理を利用した連携 ・ 既存システム(グローバルサーバ)との連携 (注) 注) Interstage Application Server Enterprise Editionでのみ連携できます。 トランザクションアプリケーションは、以下の条件で設計しています。 ・ すべてのトランザクションアプリケーションは、他サーバ(自システム内の連携も含みます)と連携することを想定しています。 ・ トランザクションアプリケーションのオブジェクトのプロセス数は、最大接続クライアント数の10分の1です。 ・ トランザクションアプリケーションのオブジェクトから接続するサーバマシンは、1台です。 - 35 - ・ リソースはサーバマシンに1つ、リソース管理プログラムの多重度は5です。 ・ データベース連携サービスの多重度は5、リカバリプログラムの多重度は2です。 CORBAアプリケーションの運用、ロードバランス、サーバマシン状態監視を使用する場合は、Interstageのチューニングが必要です。 2.2 定義ファイルの設定値 各定義ファイルには、Interstageシステム定義のSystem Scaleステートメントに設定されているシステム規模に応じた値が設定されま す。 システム規模には、以下の4種類があり、isgendefコマンドでInterstageシステム定義を生成する際に指定します。isgendefコマンドの詳 細については、「リファレンスマニュアル(コマンド編)」の「isgendef」を参照してください。 ・ small(小規模システム) ・ moderate(中規模システム) ・ large(大規模システム) ・ super(超大規模システム) なお、インストール直後のセットアップ環境では、以下のシステム規模が設定されています。 ・ large(大規模システム) ・ small(小規模システム) 各定義ファイルに設定される値を以下に示します。 ・ Interstage動作環境定義の“FJapache”は、Interstage Application Server Enterprise Editionのみ有効です。 ・ コンポーネントトランザクションサービスの環境定義は、Interstage Application Server Enterprise Editionのみ有効です。 ■システム規模ごとの設定値 定義名 ステートメント 値(System Scaleごとの) small Interstage動作環境 定義 Corba Host Name ありません。 Corba Port Number ありません。 moderate IR path for DB file TD_HOME\var\IRDB (注1) TD_HOME/var/IRDB (注2) IR USE ありません。 (注3) IR Host Name ありません。 (注3) IR Port Number 8002 NS USE ありません。 (注3) NS Host Name ありません。 (注3) NS Port Number 8002 - 36 - large super 定義名 ステートメント 値(System Scaleごとの) small NS JP moderate large super no NS Locale SJIS EUC LBO USE no TD path for system TD_HOME\var (注1) /var/opt/FJSVisas/system/default/FSUNextp /var/opt/FJSVisas/system/default/FJSVextp OTS Multiple degree 5 OTS Recovery 2 OTS path for system log ありません。 (注4) OTS maximum Transaction 5 10 50 100 50 100 500 1000 5 10 50 100 50 100 500 1000 OTS Setup mode sys OTS JTS's RMP Multiple degree of Process 5 OTS JTS's RMP Multiple degree of Thread 16 OTS Participate 4 OTS Host ありません。 OTS Port ありません。 OTS Locale ありません。 Event Service no Event maximum Process 2 Event maximum Connection Event Locale SJIS EUC Event Auto Disconnect no Event SSL no SSL USE no SSL Port Number 4433 - 37 - 定義名 ステートメント 値(System Scaleごとの) small CORBAサービスの 動作環境ファイル (注 5) IS Monitor Mode mode2 FJapache no moderate large super max_IIOP_resp_con 33 40 100 175 (注6) 80 135 575 1024 772 896 1920 3968 1920 2944 10112 20352 29 31 51 76 31 36 76 126 448 448 448 448 1046 2046 large super max_IIOP_resp_requests max_processes max_exec_instance コンポーネントトラン ザクションサービスの 環境定義 [SYSTEM ENVIRONMENT] System Scale small データベース連携 サービスの環境定義 ありません。 ありません。 moderate 注1) TD_HOME:Interstageのインストールフォルダ\td 注2) TD_HOME:コンポーネントトランザクションサービスのインストールディレクトリ 注3) 運用形態が「TYPE3」の場合は、必ず指定してください。 注4) 運用形態が「TYPE2」の場合は、必ず指定してください。 注5) CORBAサービスの動作環境ファイル内の値に表中の値がisregistdefコマンド実行時に加算されます。また、isregistdefコマンドの 投入が初回でない場合は、前回のコマンド投入時に加算した値を、現在設定されている値から減算し、新たに指定したSystem Scale の値が加算されます。詳細については、“■CORBAサービスの動作環境ファイルの設定について”を参照してください。 注6) 1024以上の値は、設定できません。 - 38 - ■CORBAサービスの動作環境ファイルの設定について CORBAサービスの動作環境定義ファイルの定義値は、isregistdefコマンドによるセットアップの実行時に、以下のように設定されま す。 ・ セットアップ実行時に、CORBAサービスの動作環境ファイルの定義値に対し、必要な値が加算されます。 ・ すでにセットアップ済みの環境に対し、スケールを変更した場合には、加算値の差分の値が反映されます。スケールを大きくした 場合には、加算値の差分の値が加算され、スケールを小さくした場合には、加算値の差分の値が減算されます。 ・ 加算値は、スケールに対して一定です。 以下に定義値max_IIOP_resp_conに対する設定例を示します。 ・ Interstageがセットアップされていない環境に対し、isregistdefコマンドを実行した場合(システム規模:small)。 - max_IIOP_resp_conの値8に対して、33を加算した値41が設定される。 - max_IIOP_resp_requestsの値128に対して、772を加算した値900が設定される。 - max_processの値20に対して、29を加算した値49が設定される。 - max_exec_instanceの値512に対して、448を加算した値960が設定される。 ・ システム規模がsmallの環境に対し、システム規模をlargeに変更した場合 - max_IIOP_resp_conの値41に対して、スケール間の加算値の差分+67(100-33)が反映された値108が設定される。 - max_IIOP_resp_requestsの値900に対して、スケール間の加算値の差分+1148(1920-772)が反映された値2048が設定される。 - max_processの値49に対して、スケール間の加算値の差分+22(51-29)が反映された値71が設定される。 - max_exec_instanceの値960に対して、スケール間の加算値の差分+0(448-448)が反映された値960が設定される。 ・ システム規模がlargeの環境に対し、システム規模をsmallに変更した場合 - max_IIOP_resp_conの値108に対して、スケール間の加算値の差分-67(33-100)が反映された値41が設定される。 - max_IIOP_resp_requestsの値2048に対して、スケール間の加算値の差分-1148(772-1920)が反映された値900が設定される。 - max_processの値71に対して、スケール間の加算値の差分-22(29-51)が反映された値49が設定される。 - max_exec_instanceの値960に対して、スケール間の加算値の差分-0(448-448)が反映された値960が設定される。 なお、isregistdefコマンドを使用せずに、CORBAサービスの動作環境定義ファイルの値を変更した場合、それ以降に本セットアップ を行っても、その変更時の差分の値は有効です。 システムスケールを小さくする場合には、CORBAサービスの動作環境ファイルの定義値が減算されます。CORBAサービスの動作環 境ファイルの定義値が、必要量を下回らないように注意してください(セットアップ後、CORBAサービスの動作環境定義ファイルの値を 小さくカストマイズしなおしている場合に注意が必要です)。 2.3 チューニング方法 2.3.1 チューニング方法(Java EE) 特にシステムとしてチューニングする項目はありません。業務運用するサーバーインスタンスの各種チューニングを実施してください。 2.3.2 チューニング方法(マルチ言語サービス) 2.3.2.1 チューニング方法(アプリケーション追加によるチューニング) クライアントアプリケーション、サーバアプリケーションを追加する場合に修正する各サービスの定義のステートメントと加算する値を説 明します。 - 39 - なお、追加するアプリケーションがCORBAアプリケーションかトランザクションアプリケーションにより加算する値は異なります。 以下に示すアプリケーションを追加した場合のチューニング方法について説明します。 ・ クライアントアプリケーションを追加した場合 ・ サーバアプリケーションを追加した場合 (注) ・ クライアント、サーバ兼用アプリケーションを追加した場合 (注) 注) 本項目は、Interstage Application Server Enterprise Edition、およびStandard-J Editionにおいてチューニングを行う必要があります。 2.3.2.1.1 クライアントアプリケーションを追加した場合 CORBAアプリケーション 定義名 CORBAサービスの 動作環境ファイル ステートメント 加算値 プロセス数の合計 max_processes (注1) max_IIOP_resp_con (注1)(注2) 注1) max_processes、max_IIOP_resp_conを変更した場合は、システムパラメタの設定が必要です。 注2) SSL接続のコネクションとSSL接続でないコネクションは別コネクションとして数える必要があります。そのため、SSL連携機能を使用 する場合、加算値は“プロセス数の合計 × 2”となります。 EJBクライアントアプリケーション 定義名 CORBAサービスの 動作環境ファイル ステートメント 加算値 追加するクライアントアプリケーションのプロ セス数 max_processes (注) 注) max_processesを変更した場合は、システムパラメタの設定が必要です。 2.3.2.1.2 サーバアプリケーションを追加した場合 CORBAアプリケーション 定義名 CORBAサービスの 動作環境ファイル ステートメント 加算値 max_processes (注) プロセス数の合計 max_exec_instance リクエスト実行用スレッドの合計 注) max_processesを変更した場合は、システムパラメタの設定が必要です。 EJBアプリケーション 定義名 CORBAサービスの 動作環境ファイル ステートメント max_processes (注) 加算値 追加するEJBアプリケーションのプロセス数 max_exec_instance ・ EJBアプリケーション作成の際に、スレッ ド動作可としている場合 追加するEJBアプリケーションのプロセ ス数 × 16 - 40 - 定義名 ステートメント 加算値 ・ EJBアプリケーション作成の際に、スレッ ド動作不可としている場合 追加するEJBアプリケーションのプロセ ス数 追加するEJBアプリケーションのプロセス 数 × 16 注) max_processesを変更した場合は、システムパラメタの設定が必要です。 トランザクションアプリケーション 考慮の必要はありません。 2.3.2.1.3 クライアント、サーバ兼用アプリケーションを追加した場合 サーバアプリケーションから他のオブジェクトを呼び出したり、オブジェクトリファレンスを獲得したり、セション管理機能、XA連携など を使用する場合など、CORBAクライアントとしても動作するアプリケーションを示します。 CORBAアプリケーション 定義名 CORBAサービスの 動作環境ファイル ステートメント max_processes (注1) 加算値 プロセス数の合計 max_IIOP_resp_con (注1)(注2) max_exec_instance リクエスト実行用スレッドの合計 注1) max_processes、max_IIOP_resp_conを変更した場合は、システムパラメタの設定が必要です。 注2) SSL接続のコネクションとSSL接続でないコネクションは別コネクションとして数える必要があります。そのため、SSL連携機能を使用 する場合、加算値は“プロセス数の合計 × 2”となります。 トランザクションアプリケーション 定義名 CORBAサービスの 動作環境ファイル ステートメント max_processes (注1) 加算値 プロセス数の合計 max_IIOP_resp_con (注1)(注2) 注1) max_processes、max_IIOP_resp_conを変更した場合は、システムパラメタの設定が必要です。 注2) SSL接続のコネクションとSSL接続でないコネクションは別コネクションとして数える必要があります。そのため、SSL連携機能を使用 する場合、加算値は“プロセス数の合計 × 2”となります。 2.3.2.2 チューニング方法(Interstageの機能を使用するためのチューニング) Interstageの機能を使用する場合のチューニング方法について説明します。 以下の表を参照し、使用する製品に応じて、以降に示すサービスのチューニングを行ってください。 - 41 - Interstage Application Server Enterprise Edition Interstage Application Server Standard-J Edition Interstage Web Server データベース連携サービス ○ ○ × ロードバランス ○ × × イベントサービス (注) ○ ○ × サーバマシン状態監視 ○ × × ○:チューニングを行う必要があります。 ×:チューニングを行う必要はありません(該当製品では、サービスが使用できないため)。 注) Interstage JMSを使用する場合、イベントサービスのチューニングを行う必要があります。 2.3.2.2.1 データベース連携サービス データベース連携サービスの多重度 データベース連携サービスの多重度を変更する場合は、以下の値を設定または加算します。 定義名 ステートメント 加算、設定値 データベース連携サービスの多重度 Interstage動作環境 定義 OTS Multiple degree (注1) CORBAサービスの 動作環境ファイル max_IIOP_resp_requests (注2)(注3) max_exec_instance (注2) 注1) 値を設定します。 注2) 値を加算します。 注3) データベース連携サービスの多重度がmax_IIOP_resp_requestsより大きい場合は、データベース連携サービスの多重度の値を設 定します。 リカバリプログラムの多重度のチューニング リカバリプログラムの多重度をチューニングする場合は、以下の値を設定または加算します。 定義名 ステートメント Interstage動作環境 定義 OTS Recovery (注1) CORBAサービスの 動作環境ファイル max_IIOP_resp_requests (注2) 加算、設定値 リカバリプログラムの多重度 max_exec_instance (注2) 注1) 値を設定します。 注2) 値を加算します。 リソース管理プログラムのチューニング リソース管理プログラムを複数起動する場合または、リソース管理プログラムの多重度を変更する場合は以下の値を加算します。 - 42 - 定義名 CORBAサービスの 動作環境ファイル ステートメント 加算値 (リソース管理プログラムの多重度 + 1)の合 計 max_processes (注) max_IIOP_resp_con (注) max_exec_instance 注) max_processes、max_IIOP_resp_conを変更した場合は、システムパラメタの設定が必要です。 2.3.2.2.2 ロードバランス ロードバランス機能を使用する場合は、以下の値を加算します。 定義名 CORBAサービスの 動作環境ファイル ステートメント max_processes (注) 加算値 定数: 1 max_IIOP_resp_con (注) max_exec_instance odsetlboコマンドの-mオプションに指定した値 注) max_processes、max_IIOP_resp_conを変更した場合は、システムパラメタの設定が必要です。 2.3.2.2.3 イベントサービス イベントサービスを使用する場合は、以下の値を設定または加算します。 定義名 CORBAサービスの 動作環境ファイル ステートメント 加算、設定値 max_exec_instance (注2) max_IIOP_local_init_con 以下のいずれかの最大値 ・ max_IIOP_local_init_con ・ 起動するコンシューマ/サプライヤのプ ロセス数の最大値 + 3 (注3) max_IIOP_local_init_requests 以下のいずれかの最大値 ・ max_IIOP_local_init_requests ・ 起動するコンシューマ/サプライヤのプ ロセス数の最大値 + 3 (注3) × mixモデ ルのコンシューマ/サプライヤが1コネク ションで同時に接続(送信)できるリクエス ト数 ・ 起動するコンシューマ/サプライヤのプ ロセス数の最大値 + 3 (注3) × pushモ デルのコンシューマ/pullモデルのサプ ライヤが1コネクションで同時に接続(受 信)できるリクエスト数 max_IIOP_resp_con (注1) すべてのイベントチャネルに接続するコン シューマ・サプライヤの合計値 + 1 (注4) max_IIOP_resp_requests 以下のいずれかの最大値 ・ max_IIOP_resp_conの加算値 × (mixモ デルのコンシューマ/サプライヤが1コネ クションで同時に接続(送信)できるリクエ スト数 + 1) - 43 - 定義名 ステートメント 加算、設定値 ・ max_IIOP_resp_conの加算値 × (pushモ デルのコンシューマ/pullモデルのサプ ライヤが1コネクションで同時に接続(受 信)できるリクエスト数 + 1) max_processes (注1) 起動するイベントチャネル・コンシューマ・サ プライヤのプロセス数の合計値 + 2 (注4) max_impl_rep_entries (作成する静的生成イベントチャネルのプロセ ス数・動的生成イベントチャネルのプロセス 数 × 2)の合計 (注5) period_receive_timeout 異常が発生した場合にコネクションを回収す るまでのタイムアウト時間 (注6) 注1) max_IIOP_resp_con、およびmax_processesを変更した場合は、システムパラメタを設定してください。 注2) イベントチャネル側のシステムと、コンシューマ・サプライヤ側のシステムで加算値が異なります。システムにより以下の値を加算し てください。 - イベントチャネル側(イベントチャネルを静的起動した場合) 「イベントチャネルグループの接続数(esmkchnlコマンドの-mオプションの設定値) (*1)」の総和 *1)“「イベントチャネルグループの接続数」 × 2”の値が“256”よりも小さい場合は、“256”として計算してください。 - イベントチャネル側(イベントファクトリを使用する場合) 「イベントチャネルの最大プロセス数(isinitコマンドでInterstage初期化時に設定したInterstage動作環境定義の定義“Event maximum Process”の指定値)」 × 「イベントチャネルの最大接続数(isinitコマンドでInterstage初期化時に設定したInterstage動 作環境定義の定義“Event maximum Connection”の指定値) (*2)」 + 17 *2)“「接続数」 × 2”の値が“256”よりも小さい場合は、“256”として計算してください。 - コンシューマおよびサプライヤ側 「サーバアプリケーション数(Pushモデルのコンシューマ数、Pullモデルのサプライヤ数)」 × 「スレッド最大多重度(OD_impl_inst コマンドの-axオプションで指定するthr_conc_maximumの設定値)」 - イベントチャネル側(イベントチャネルを静的起動した場合) 「イベントチャネルグループの接続数(esmkchnlコマンドの-mオプションの設定値) (*3)」の総和 *3)“「イベントチャネルグループの接続数」 + 16”の値が“256”よりも小さい場合は、“256”として計算してください。 - イベントチャネル側(イベントファクトリを使用する場合) 「イベントチャネルの最大プロセス数(isinitコマンドでInterstage初期化時に設定したInterstage動作環境定義の定義“Event maximum Process”の指定値)」 × 「イベントチャネルの最大接続数(isinitコマンドでInterstage初期化時に設定したInterstage動 作環境定義の定義“Event maximum Connection”の指定値) (*4)」 + 17 *4)“「接続数」 + 16”の値が“256”よりも小さい場合は、“256”として計算してください。 - コンシューマおよびサプライヤ側 「サーバアプリケーション数(Pushモデルのコンシューマ数、Pullモデルのサプライヤ数)」 × 「スレッド初期多重度(OD_impl_inst コマンドの-axオプションで指定するthr_conc_initの設定値)」 注3) イベントチャネルを動作させる場合は、さらに“3”を加算してください。 注4) イベントチャネル通信中にイベントサービス運用コマンドを実行する場合は、1を加算してください。 - 44 - 注5) 静的生成イベントチャネルのプロセス数は、esmkchnlコマンドまたはInterstage管理コンソールで作成した静的生成イベントチャネ ルグループ数です。 動的生成イベントチャネル(イベントファクトリを使用する場合)のプロセス数は、isinitコマンドでInterstage初期化時に設定したInterstage 動作環境定義の定義“Event maximum Process”の指定値です。 注6) 以下の見積もり式を参考にして見積もった値を加算してください。 period_receive_timeout × 5 > イベントデータの待ち合わせ時間(essetcnf/essetcnfchnlコマンドの“-wtime”の設定値) + 20 イベントデータの待ち合わせ時間より先にperiod_receive_timeoutによるタイムアウトが発生した場合は、以下の現象が発生する可 能性があります。 - イベントデータがロストします。 - エラーメッセージ“od10605”が出力されて、応答の送信が失敗します。 - エラーメッセージ“es10033”(CODE=138)が出力されて、イベントチャネルが異常終了します。 なお、イベントデータの待ち合わせ時間には、“0”を指定しないでください。“0”を指定すると、イベントデータの待ち合わせ時間は 無限となり、period_receive_timeoutによるタイムアウトが発生します。 2.3.2.2.4 サーバマシン状態監視 サーバマシン状態監視機能を使用する場合は、以下の値を加算します。 監視サーバのチューニング 定義名 ステートメント CORBAサービスの動作環境ファ イル 加算値 定数: 1 max_processes (注) max_IIOP_resp_con (注) 定数: 4 max_exec_instance 注) max_processes、max_IIOP_resp_conを変更した場合は、システムパラメタの設定が必要です。 被監視サーバのチューニング 定義名 ステートメント CORBAサービスの動作環境ファ イル 加算値 定数: 1 max_processes (注) max_IIOP_resp_con (注) max_exec_instance 注) max_processes、max_IIOP_resp_conを変更した場合は、システムパラメタの設定が必要です。 2.4 環境変数について 以下にInterstageで使用する環境変数を示します。 環境変数名 OD_HOME 用途 CORBAサービスのインストールパスを指定します。 例) OD_HOME=Interstageのインストールフォルダ\ODWIN - 45 - 環境変数名 用途 OD_HOME=/opt/FSUNod OD_HOME=/opt/FJSVod OD_CODE_SET コード変換を行う際のクライアントコード系を指定します。 サポートコードは以下のとおりです。 ・ SJIS(ShiftJIS) ・ EUC ・ UNICODE ・ SJISMS(ShiftJIS MS) ・ U90 ・ JEF_LOWER(JEF英小文字) ・ JEF_KANA(JEFカナ文字) ・ JEF_ASCII(JEFASCII) ・ UTF8 例) OD_CODE_SET=EUC TD_HOME コンポーネントトランザクションサービスのインストールパスを指定します。 例) TD_HOME=Interstageのインストールフォルダ\td TD_HOME=/opt/FSUNtd TD_HOME=/opt/FJSVtd OTS_HOME データベース連携サービスのインストールパスを指定します。 OTSが動作するためにOTS_HOMEの設定は必須ではありません。 例) OTS_HOME=Interstageのインストールフォルダ\ots OTS_HOME=/opt/FSUNots OTS_HOME=/opt/FJSVots OTS_SCROLL_SIZE otstranlist、otspendlistコマンドを使用して、1画面でトランザクションリストを表示 する行数を指定します。 例) OTS_SCROLL_SIZE=30 デフォルト:20 OTS_INVOKE_MODE 旧バージョンレベルのINTERSTAGE上のOTSシステム、あるいはリソース管理 プログラムと分散トランザクション連携する場合に、OTSシステム、あるいはリ ソース管理プログラムが動作するマシン上で指定します。値として2以外指定 できません。 例) OTS_INVOKE_MODE=2 ES_HOME イベントサービスのインストールパスを指定します。 例) ES_HOME=/opt/FJSVes PORB_HOME Portable-ORBのインストールパスを指定します。 (Portable-ORBの動作環境ファイル検索時にも使用) - 46 - 環境変数名 用途 例) PORB_HOME=Portable-ORBのインストールフォルダ PORB_HOME=/opt/FJSVporb IS_ISSTOP_MONITOR_TI MER Interstage 停止やワークユニット停止が無応答になる現象が発生した場合、自 動的にトラブル調査資料を採取する内部機構において、調査資料を採取する までの監視時間を変更する場合に秒単位で設定します。環境変数を指定しな い場合はデフォルト5分の監視時間となります。Interstage 停止やワークユニッ ト停止をコマンドで行う場合には、監視時間はisstopおよびisstopwuコマンド の-t オプションで指定可能です。環境変数の指定より、コマンドのオプション指 定が優先されます。本環境変数は必須ではありません。無応答になるトラブル が発生して資料の採取が必要な際に、デフォルトの監視時間を変更したい場 合のみ設定してください。 本環境変数はブート時に取得可能なシステム環境変数として設定してくださ い。つまり、本環境変数を有効とするには、システム環境変数として設定した 後にOSの再起動が必要です。 isstartコマンドでInterstageを起動する場合には、コマンドを入力する前に環境 変数を設定してください。rcプロシジャからInterstageを起動する場合には、rc プロシジャ内で設定してください。管理コンソールからInterstageを起動する場 合には、システムの環境変数として設定してください。 2.5 IPv6環境での運用について Interstageでは、IPv6環境での運用が可能です。IPv6環境での運用方法を説明します。(注) 注) InterstageはIPv6/IPv4デュアルスタックのみをサポートしています。InterstageはIPv6/IPv4デュアルスタックで利用してください。IPv4 を無効にした場合の運用はサポートしておりません。 ■運用可能なプラットフォーム 以下の機能は、Windows(R)、Solaris、およびLinuxでIPv6環境での運用が可能です。その他の機能は、Solarisだけで運用可能で す。 ・ CORBAサービス ・ データベース連携サービス ・ イベントサービス ・ Interstage HTTP Server ・ Interstage シングル・サインオン ・ Interstageディレクトリサービス ■運用可能なサービス IPv6環境において、Interstageの以下の機能が使用できます。 ・ CORBAサービス(SSL連携、Proxy連携機能を除く) IPv6環境でのCORBAアプリケーション連携(IIOP通信)ができます。 - 47 - ・ コンポーネントトランザクションサービス(Interstage Web Serverは除く。また、サーバマシン状態監視機構、IPCOM連携を利用した 負荷分散を除く) IPv6環境でのトランザクションアプリケーション連携ができます。 ・ データベース連携サービス(Interstage Web Serverは除く) IPv6環境でデータベース連携サービスを利用することができます。 ・ イベントサービス(Interstage Web Serverは除く) IPv6環境でイベントサービスを利用することができます。 ・ MessageQueueDirector(Interstage Application Server Enterprise Editionのみ) IPv6環境でMessageQueueDirectorの運用が可能です。 ・ Interstage HTTP Server IPv6環境でのHTTP/HTTPS通信を行うことが可能です。 ・ Interstage シングル・サインオン IPv6環境でInterstage シングル・サインオンを利用することが可能です。 ・ Interstageディレクトリサービス ■運用方法 InterstageをIPv6環境で運用するには、以下のサービスの環境設定が必要です。その他のサービスでは、特別な設定は不要です。 ・ pingコマンドなどを実行して対象ホストとの通信が可能であるかの確認をしてください。通信ができない場合は、OSのルーティング の設定の確認をお願いします。設定方法の詳細については、OSのマニュアルおよびヘルプを参照してください。今後、サイトロー カルアドレスはOSの機能としてサポートされなくなる可能性があります。そのため、サイトローカルアドレスは使用しないことを推奨 します。 ・ IPv6環境でリンクローカルアドレスまたはサイトローカルアドレスを用いて通信を行う際には、scope-idを意識する必要があります。 ・ Interstage Application Serverでは、リンクローカルアドレスを用いた通信をサポートしません。 CORBAサービスの環境設定 IPv6環境でCORBAアプリケーション連携を行う場合には、config(CORBAサービス)に以下を設定し、CORBAサービスを再起動 してください。 IP-version=v4-dual または v6 (デフォルト:v4-dual) コンポーネントトランザクションサービス IPv6環境でトランザクションアプリケーション連携を行う場合には、コンポーネントトランザクションサービスの環境定義ファイルに以 下の制御文を設定し、コンポーネントトランザクションサービスを再起動してください。 IP version:v6 (デフォルト:v4) データベース連携サービス IPv6環境でデータベース連携サービスを利用する場合は、CORBAサービスのIPv6環境を設定する必要があります。CORBAサー ビスのIPv6環境の設定については、“CORBAサービスの環境設定”を参照してください。 - 48 - イベントサービス IPv6環境でイベントサービスを利用する場合は、CORBAサービスのIPv6環境を設定する必要があります。CORBAサービスのIPv6 環境の設定については、“CORBAサービスの環境設定”を参照してください。 MessageQueueDirector MessageQueueDirectorではIPv6環境でSMTP連携サービスを使用する場合、サービス環境定義(MXHost)にIPv6形式のIPアドレ ス(またはホスト名)を記述します。 詳細は、“MessageQueueDirector 説明書”を参照してください。 2.6 ホスト情報(IPアドレス/ホスト名)の変更方法について Interstageを運用しているサーバのホスト情報(IPアドレスやホスト名)を変更する場合には、1台のサーバで、Interstageの資源移出と資 源移入を行うことで実施できます。資源移入時に、変更したいホスト情報を指定して資源移入の操作を行ってください。詳細について は、“運用ガイド(基本編)”の“メンテナンス(資源のバックアップ/他サーバへの資源移行/ホスト情報の変更)”を参照してください。 - 49 - 第3章 システムのチューニング この章では、システムチューニングについて説明します。 3.1 サーバ機能運用時に必要なシステム資源 Interstageの各サービスの運用に必要となるシステム資源について説明します。 以下の表を参照し、使用する製品に応じて、以降に示すサービスのチューニングを行ってください。各機能の説明を参照する前に “■システムパラメタについて”を参照してください。 なお、システムパラメタを算出するためのExcelファイルがマニュアルCDの“ApplicationServer\tuning”配下のサブフォルダに“ISASIPCtuning.xlsx”として格納されています。Microsoft(R) Excel 2007もしくは以降のバージョンのMicrosoft(R) Excelをお持ちの場合は “ISAS-IPCtuning.xlsx”を使用してシステムパラメタを算出することが可能です。使用方法などの詳細については、当該Excelファイル 内の説明記事を参照してください。 EE SJE WS CORBAサービスのシステム資源の設定 ○ ○ ○ コンポーネントトランザクションサービスのシステム資源の設定 ○ ○ ○ データベース連携サービスのシステム資源の設定 ○ ○ × イベントサービスのシステム資源の設定 (注1) ○ ○ × J2EE互換のシステム資源の設定 ○ ○ × Interstage HTTP Serverのシステム資源の設定 ○ ○ ○ MessageQueueDirectorのシステム資源の設定 ○ × × Interstage シングル・サインオンのシステム資源の設定 ○ ○ ○(注2) Interstage ディレクトリサービスのシステム資源の設定 ○ ○ × Interstage管理コンソールのシステム資源の設定 ○ ○ ○ Interstage統合コマンドのシステム資源の設定 ○ ○ ○ Webサーバコネクタのシステム資源の設定 ○ ○ ○(注3) EE : Interstage Application Server Enterprise Edition SJE: Interstage Application Server Standard-J Edition WS: Interstage Web Server ○:チューニングを行う必要があります。 ×:チューニングを行う必要はありません(該当製品ではサービスが使用できないため)。 注1) Interstage JMSを使用する場合、イベントサービスのシステム環境を設定する必要があります。 注2) Interstage シングル・サインオンの業務サーバのシステム資源だけ設定します。 注3) Webサーバコネクタの故障監視機能のシステム資源を設定する必要はありません。 ■システムパラメタについて ◆システムパラメタの変更方法 IPC資源のパラメタに値を設定するために、以下のいずれかの方法を選択してください。 ・ /etc/systemファイルの修正 /etc/systemファイルを編集し、必要なパラメタ値を変更します。変更後は、変更した値を反映するためにシステムをリブートしてくだ さい。なお、変更方法の詳細については、Solarisのドキュメントを参照してください。 注) Solaris 10以降において、この方法でシステムチューニングする場合、shmmaxおよびshmmniは以下の関係が成り立つような値 を設定してください。 - 50 - project.max-shm-memory = shmmax × shmmni ・ 資源制御(Solaris 10以降) 以下の手順で、パラメタ値を変更してください。 1. Interstageの停止 Interstageを停止してください。もしInterstage管理コンソールを使用するためのサービスを起動している場合はそれらのサー ビスも停止してください。 2. user.rootプロジェクトとsystemプロジェクトのパラメタの変更 projmodコマンドでuser.rootプロジェクトとsystemプロジェクトのパラメタの値を変更してください。以下に例を示します。 projmod -s -K 'project.max-sem-ids=(privileged,155,deny)' user.root projmod -s -K 'project.max-sem-ids=(privileged,155,deny)' system 変更の特権レベルをprivileged、設定したしきい値を超える要求があった場合のアクションをdenyとします。 3. 値の反映 newtaskコマンドで変更した値をシステム反映します。 newtask -p user.root -c $$ 4. Interstageの起動 Interstageを起動してください。必要に応じて、Interstage管理コンソールを使用するためのサービスを起動してください。 資源制御の詳細については、Solarisのドキュメントを参照してください。 「種類」の意味 システムパラメタの表中の「種類」の意味は、以下のとおりです。 ・ 設定値 必要数の条件に応じた値に変更してください。 ・ 加算値 すでに設定されている値に、必要数を加算してください。 各パラメタの意味 システムパラメタの各パラメタ名と意味は、以下のとおりです。 なお、資源制御によるIPC資源のパラメタ設定は、Solaris 10以降で利用できます。 共用メモリ パラメタ 資源制御 意味 - project.max-shm-memory 共用メモリの最大サイズ shmmax - 共用メモリの最大セグメントサイズ shmmni project.max-shm-ids 共用メモリIDの最大数 セマフォ パラメタ 資源制御 意味 semmni project.max-sem-ids セマフォIDの最大数 semmns - システム全体のセマフォの最大数 semvmx - セマフォに設定できる最大数 semmsl process.max-sem-nsems セマフォIDあたりのセマフォの最大数 semopm process.max-sem-ops セマフォコールあたりのセマフォ操作の最大数 - 51 - パラメタ 資源制御 意味 semmnu - システム全体のセマフォ操作の取消記録グループ数 semume - プロセスあたりのセマフォ操作の取消記録の最大数 メッセージキュー パラメタ 資源制御 意味 メッセージの最大サイズ msgmax msgmnb process.max-msg-qbytes メッセージキュー上のメッセージの最大バイト数 msgmni project.max-msg-ids メッセージキューIDの最大数 msgtql process.max-msg-messages メッセージキューにあるメッセージの最大数 ファイルディスクリプタ パラメタ rlim_fd_ max 資源制御 process.max-file-descriptor 意味 ファイルディスクリプタの最大数 ◆システムパラメタの変更方法 /etc/sysctl.confを編集し、パラメタ値を変更します。変更後は“sysctl -p /etc/sysctl.conf”を実行するか、システムをリブートしてください。 変更方法の詳細については、OSのドキュメントを参照してください。 「種類」の意味 システムパラメタの表中の「種類」の意味は、以下のとおりです。 ・ 設定値 必要数の条件に応じた値に変更してください。 ・ 加算値 すでに設定されている値に、必要数を加算してください。 各パラメタの意味 システムパラメタの各パラメタ名と意味は、以下のとおりです。 共用メモリ パラメタ 意味 kernel.shmall システム全体の共用メモリの最大サイズ kernel.shmmax 共用メモリの最大サイズ kernel.shmmni 共用メモリセグメントの最大数 セマフォ セマフォの設定値は、各パラメタ値を以下の形式で指定します。 - kernel.sem = para1 para2 para3 para4 パラメタ 意味 para1 セマフォIDあたりのセマフォの最大数 para2 システム全体のセマフォの最大数 para3 セマフォコールあたりのセマフォ操作の最大数 - 52 - パラメタ 意味 セマフォIDの最大数 para4 メッセージキュー パラメタ 意味 kernel.msgmax メッセージの最大サイズ kernel.msgmnb メッセージキュー上のメッセージの最大バイト数 kernel.msgmni メッセージキューIDの最大数 ファイルディスクリプタ パラメタ 意味 システム全体のファイルディスクリプタの最大数 fs.file-max ◆リソース制限 システムのリソースを制限するには、/etc/security/limits.confファイルを編集し、必要なパラメタ値を変更します。変更後は、変更した 値を反映するためにシステムをリブートしてください。 変更方法の詳細については、OSのドキュメントを参照してください。 「種類」の意味 リソース制限の表中の「種類」の意味は、以下のとおりです。 ・ soft ソフトウェアリミット値を変更してください。 ・ hard ハードウェアリミット値を変更してください。 各パラメタの意味 リソース制限のパラメタ名と意味は、以下のとおりです。 ファイルディスクリプタ パラメタ nofile 意味 ユーザにおいてオープン可能なファイルディスクリプタの最大数 3.1.1 CORBAサービスのシステム資源の設定 CORBAサービスを用いたシステムの運用時には、接続するクライアント/サーバ数、オブジェクト数などによりシステム資源を拡張する 必要があります。ここでは、以下について説明します。 ・ システムパラメタ - CORBAサービス - インタフェースリポジトリ - ネーミングサービス ・ プロセス・スレッド ・ ファイルディスクリプタ - 53 - ■システムパラメタ 一般的な CORBAサービスが使用する共用メモリ、セマフォ、メッセージキューのシステムパラメタのチューニングについて説明します。 CORBAサービスの他に共用メモリ、セマフォ、メッセージキューを使用するアプリケーションが存在する場合、そのアプリケーションが 使用する資源にCORBAサービスの資源量を加算してください。 システムパラメタの変更方法や、各パラメタの意味については、“■システムパラメタについて”を参照してください。 なお、資源制御によるIPC資源のパラメタの設定は、Solaris 10以降の場合のみ可能です。 CORBAサービス CORBAサービスで必要となるシステム資源について、以下に示します。 各表に記述されているパラメタ名(max_IIOP_resp_conなど)は、CORBAサービスのconfigファイルで指定します。詳細については、 “A.1 config”を参照してください。 共用メモリ パラメタ shmmax(注 7) 資源制御 - 種類 設定値 必要数 [Solaris 9の場合] 以下の値のうち、最大値を指定します。 ・ max_IIOP_resp_con × 16K + (max_IIOP_resp_con_extend_number(注2) + 1) × 0.2K + max_IIOP_resp_requests × 16K + (max_IIOP_resp_requests_extend_number(注2) + 1) × 0.2K + max_impl_rep_entries × 6K + max_bind_instances(注8) × 0.1K + 100K 以上 - [trace_use=yesの場合] 上記値 + max_processes × trace_size_per_process + trace_size_of_daemon(注3) + 20K 以上 - [snap_use=yesの場合] 上記値 + snap_size + 10K 以上 ・ number_of_common_buffer(注4) × 4K 以上 + (number_of_common_buffer_extend_number( 注 2) + 1) × 0.2K ・ max_exec_instance × 0.15KB 以上 ・ [Buffer Size、Buffer Number(ワークユニット定義)を指定した CORBAワークユニット起動時] (Buffer Size + 0.2K) × Buffer Number 以上 (注5) - project.maxshm-memory 加算値 max_IIOP_resp_con × 0.4K + limit_of_max_IIOP_resp_con(注1) × 0.5K + max_IIOP_resp_con_extend_number(注2) × 0.1K + max_IIOP_resp_requests × 8K + limit_of_max_IIOP_resp_requests(注1) × 3K + max_IIOP_resp_requests_extend_number(注2) × 0.1K + limit_of_number_of_common_buffer(注9) × 5K + number_of_common_buffer_extend_number(注2) × 0.1K + max_processes × 0.6K + - 54 - パラメタ 資源制御 種類 必要数 max_exec_instance × 0.2K + max_impl_rep_entries × 12K + (max_IIOP_resp_con + limit_of_max_IIOP_resp_con(注1) × 2) × max_impl_rep_entries × 0.004K + max_bind_instances(注8) × 0.1K + 3,200K 以上 [SSL連携機能を使用する場合] 上記値 + limit_of_max_IIOP_resp_con × 5K 以上 [トレース機能を使用する場合] 上記値 + max_processes × trace_size_per_process + trace_size_of_daemon(注3) + 20K 以上 [スナップショット機能を使用する場合] 上記値 + snap_size + (max_impl_rep_entries + max_processes) × 0.1K 以上 [CORBAワークユニットを使用する場合] 上記値 + (Buffer Size + 0.2KB) × Buffer Number × “Buffer Size、Buffer Number(ワークユニット定義)を指定したアプリ ケーション数” (注5) shmmni project.maxshm-ids 加算値 max_IIOP_resp_con_extend_number(注2) + max_IIOP_resp_requests_extend_number(注2) + number_of_common_buffer_extend_number(注2) + “Buffer Size、Buffer Number(ワークユニット定義)を指定したアプリ ケーション数” + 13 (注6) 注1) limit_of_[パラメタ名]のデフォルト値は以下となります。0が指定された場合も、以下と同様になります。 [パラメタ名] × 1.3 (小数部分切り捨て) isconfig.xmlファイルの定義項目AutoConfigurationModeにMANUALを指定し、自動拡張を行わない設定にした場合は、[パラメタ 名]となります。 注2) [パラメタ名]_extend_numberのデフォルト値は以下となります。0が指定された場合も、以下と同様になります。Solaris 9の場合、 limit_of_[パラメタ名]は、0が指定された場合は自動計算されます。計算式の詳細については、“config”を参照してください。 (limit_of_[パラメタ名] - [パラメタ名]) ÷ [パラメタ名] (小数部分切り上げ) isconfig.xmlファイルの定義項目AutoConfigurationModeにMANUALを指定し、自動拡張を行わない設定にした場合は、0となりま す。 注3) デフォルトは以下です。0が指定された場合も、以下と同様になります。 trace_size_per_process × 32 注4) デフォルトは以下です。0が指定された場合も、以下と同様になります。 max_IIOP_resp_requests × 0.2 注5) Solaris 10以降の場合、Buffer Size、Buffer Numberを指定したCORBAワークユニット定義の中で、“(Buffer Size + 0.2KB) × Buffer Number”の最大値に、“Buffer Size、Buffer Number(ワークユニット定義)を指定したアプリケーション数”を積算した値が該当します。 Solaris 9の場合、Buffer Size、Buffer Numberを指定したCORBAワークユニット定義の中で、“(Buffer Size + 0.2KB) × Buffer Number”の最大値が該当します。 なお、“(Buffer Size + 0.2KB) × Buffer Number”の最大値が 2,147,483,647より小さい値になるようにBuffer Size、Buffer Number の値を設定してください。 - 55 - 注6) マルチシステム機能を使用する場合は、拡張システム数を積算した値を加算してください。 マルチシステム機能はInterstage Application Server Enterprise Editionで使用できます。 注7) Solaris 10以降でshmmaxを設定する場合、Solarisのドキュメントおよび“■システムパラメタについて”を参照して値を決定してくだ さい。 注8) デフォルトは以下です。0が指定された場合も、以下と同様になります。 max_processes × 1024 (計算結果が65,535を超えた場合は65,535) 注9) デフォルトは以下です。0が指定された場合も、以下と同様になります。 limit_of_max_IIOP_resp_requests 共用メモリ パラメタ kernel.shmmax 種類 設定値 必要数 以下の値のうち、最大値を指定します。 ・ max_IIOP_resp_con × 16K + (max_IIOP_resp_con_extend_number(注1) + 1) × 0.2K + max_IIOP_resp_requests × 16K + (max_IIOP_resp_requests_extend_number(注1) + 1) × 0.2K + max_impl_rep_entries × 6K + max_bind_instances(注5) × 0.1K + 100K 以上 - [trace_use=yesの場合] 上記値 + max_processes × trace_size_per_process + trace_size_of_daemon(注2) + 20K 以上 - [snap_use=yesの場合] 上記値 + snap_size + 10K 以上 ・ number_of_common_buffer(注3) × 4K 以上 + (number_of_common_buffer_extend_number( 注 1) + 1) × 0.2K ・ max_exec_instance × 0.15KB 以上 ・ [Buffer Size、Buffer Number(ワークユニット定義)を指定した CORBAワークユニット、IJServer起動時] (Buffer Size + 0.2K) × Buffer Number 以上 (注4) kernel.shmmni 加算値 max_IIOP_resp_con_extend_number(注1) + max_IIOP_resp_requests_extend_number(注1) + number_of_common_buffer_extend_number(注1) + “Buffer Size、Buffer Number(ワークユニット定義)を指定したアプリ ケーション数” + 14 注1) [パラメタ名]_extend_numberのデフォルト値は以下となります。0が指定された場合も、以下と同様になります。limit_of_[パラメタ名] は、0が指定された場合は自動計算されます。計算式の詳細については、“config”を参照してください。 (limit_of_[パラメタ名] - [パラメタ名]) ÷ [パラメタ名] (小数部分切り上げ) isconfig.xmlファイルの定義項目AutoConfigurationModeにMANUALを指定し、自動拡張を行わない設定にした場合は、0となりま す。 - 56 - 注2) デフォルトは以下です。0が指定された場合も、以下と同様になります。 trace_size_per_process × 32 注3) デフォルトは以下です。0が指定された場合も、以下と同様になります。 max_IIOP_resp_requests × 0.2 注4) Buffer Size、Buffer Numberを指定したワークユニット定義の中で、“(Buffer Size + 0.2KB) × Buffer Number”の最大値が該当します。 なお、“(Buffer Size + 0.2KB) × Buffer Number”の最大値が 2,147,483,647より小さい値になるようにBuffer Size、Buffer Number の値を設定してください。 注5) デフォルトは以下です。0が指定された場合も、以下と同様になります。 max_processes × 1024 (計算結果が65,535を超えた場合は65,535) セマフォ パラメタ semmni 資源制御 project.maxsem-ids 種類 加算値 必要数 以下の値のうち、最大値を指定します。 ・ 512 ・ max_IIOP_resp_con_extend_number(注3) × 5 + max_IIOP_resp_requests_extend_number(注3) + max_impl_rep_entries + プロセスモードのCORBAサーバアプリケーションの起動プロセ ス数(注4) + “Buffer Size、Buffer Number(ワークユニット定義)を指定したア プリケーション数” × 2 + 100 以上 semmns (注1) - 加算値 limit_of_max_IIOP_resp_con(注2) × 4 + max_IIOP_resp_con_extend_number(注3) + max_IIOP_resp_requests_extend_number(注3) + max_impl_rep_entries + max_processes × 3 + プロセスモードのCORBAサーバアプリケーションの起動プロセス数 (注4) + “Buffer Size、Buffer Number(ワークユニット定義)を指定したアプリ ケーション数” × 2 + 14 以上 [トレース機能を使用する場合] 上記値 + 1 以上 [スナップショット機能を使用する場合] 上記値 + 1 以上 [SSL連携機能を使用する場合] 上記値 + limit_of_max_IIOP_resp_con(注2) 以上 semmnu (注1) - 加算値 max_impl_rep_entries + max_processes × 3 + “Buffer Size、Buffer Number(ワークユニット定義)を指定したアプリ ケーション数” × 2 + 6 以上 [トレース機能を使用する場合] 上記値 + 1 以上 [スナップショット機能を使用する場合] 上記値 + 1 以上 semmsl process.maxsem-nsems 設定値 以下の値のうちの最大値以上の値を指定します。 - 57 - パラメタ 資源制御 種類 必要数 ・ max_IIOP_resp_con ・ max_processes semopm process.maxsem-ops 設定値 50 以上 semume (注1) - 加算値 limit_of_max_IIOP_resp_con(注2) × 3 + max_IIOP_resp_con_extend_number(注3) + max_IIOP_resp_requests_extend_number(注3) + max_impl_rep_entries + max_processes × 2 + “Buffer Size、Buffer Number(ワークユニット定義)を指定したアプリ ケーション数” × 2 + 11 以上 [トレース機能を使用する場合] 上記値 + 1 以上 [スナップショット機能を使用する場合] 上記値 + 1 以上 [SSL連携機能を使用する場合] 上記値 + limit_of_max_IIOP_resp_con(注2) 以上 semvmx(注 1) - 設定値 以下の値のうち、最大値を指定します。 ・ OSデフォルト値(32767) ・ Buffer Number(ワークユニット定義)の最大値 注1) Solaris 9でのみ有効です。 注2) limit_of_[パラメタ名]のデフォルト値は以下となります。0が指定された場合も、以下と同様になります。 [パラメタ名] × 1.3 (小数部分切り捨て) isconfig.xmlファイルの定義項目AutoConfigurationModeにMANUALを指定し、自動拡張を行わない設定にした場合は、[パラメタ 名]となります。 注3) [パラメタ名]_extend_numberのデフォルト値は以下となります。0が指定された場合も、以下と同様になります。 (limit_of_[パラメタ名] - [パラメタ名]) ÷ [パラメタ名] (小数部分切り上げ) isconfig.xmlファイルの定義項目AutoConfigurationModeにMANUALを指定し、自動拡張を行わない設定にした場合は、0となりま す。 注4) 起動プロセス数が分からない場合はmax_processesを指定してください。 セマフォ パラメタ para1 種類 設定値 必要数 以下の値のうちの最大値以上の値を指定します。 ・ max_IIOP_resp_con ・ max_processes para2 加算値 limit_of_max_IIOP_resp_con(注1) × 4 + max_IIOP_resp_con_extend_number(注2) + max_IIOP_resp_requests_extend_number(注2) + max_impl_rep_entries + max_processes × 4 + - 58 - パラメタ 種類 必要数 プロセスモードのCORBAサーバアプリケーションの起動プロセス数 (注3) + “Buffer Size、Buffer Number(ワークユニット定義)を指定したアプリ ケーション数” × 2 + 14 以上 [トレース機能を使用する場合] 上記値 + 1 以上 [スナップショット機能を使用する場合] 上記値 + 1 以上 [SSL連携機能を使用する場合] 上記値 + limit_of_max_IIOP_resp_con(注1) 以上 para3 設定値 50 以上 para4 加算値 以下の値のうち、最大値を指定します。 ・ 512 ・ max_IIOP_resp_con_extend_number(注2) × 5 + max_IIOP_resp_requests_extend_number(注2) + max_impl_rep_entries + プロセスモードのCORBAサーバアプリケーションの起動プロセ ス数(注3) + “Buffer Size、Buffer Number(ワークユニット定義)を指定したア プリケーション数” × 2 + 100 以上 注1) limit_of_[パラメタ名]のデフォルト値は以下となります。0が指定された場合も、以下と同様になります。 [パラメタ名] × 1.3 (小数部分切り捨て) isconfig.xmlファイルの定義項目AutoConfigurationModeにMANUALを指定し、自動拡張を行わない設定にした場合は、[パラメタ 名]となります。 注2) [パラメタ名]_extend_numberのデフォルト値は以下となります。0が指定された場合も、以下と同様になります。 (limit_of_[パラメタ名] - [パラメタ名]) ÷ [パラメタ名] (小数部分切り上げ) isconfig.xmlファイルの定義項目AutoConfigurationModeにMANUALを指定し、自動拡張を行わない設定にした場合は、0となりま す。 注3) 起動プロセス数が分からない場合はmax_processesを指定してください。 メッセージキュー パラメタ 資源制御 種類 必要数 msgmax (注) - 設定値 16,384 以上 msgmnb process.maxmsg-qbytes 設定値 32,768 以上 msgmni project.maxmsg-ids 加算値 512 以上 注) Solaris 9でのみ有効です。 メッセージキュー - 59 - パラメタ 種類 必要数 kernel.msgmax 設定値 16,384 以上 kernel.msgmnb 設定値 32,768 以上 kernel.msgmni 加算値 512 以上 インタフェースリポジトリ インタフェースリポジトリを使用する場合に必要となるシステム資源を以下に示します。 共用メモリ パラメタ 資源制御 種類 必要数 shmmax(注 1) - 設定値 [ログ採取時][Solaris 9の場合] logging memory size + 16K (注2) - project.maxshm-memory 加算値 [ログ採取時(EJBサービス未使用)][Solaris 10以降の場合] (logging memory size + 16K) × 3 (注2) [ログ採取時(EJBサービス使用)][Solaris 10以降の場合] (logging memory size + 16K) × 4 (注2) shmmni project.maxshm-ids 加算値 [EJBサービスを使用しない場合] 3 [EJBサービスを使用する場合] 4 注1) Solaris 10以降でshmmaxを設定する場合、Solarisのドキュメントおよび“■システムパラメタについて”を参照して値を決定してくだ さい。 注2) “logging memory size”は、CORBAサービスのirconfigファイルで指定します。詳細については、“A.6 irconfig”を参照してください。 共用メモリ パラメタ kernel.shmmax 種類 設定値 必要数 [ログ採取時] logging memory size + 16K (注) 注) “logging memory size”は、CORBAサービスのirconfigファイルで指定します。詳細については、“A.6 irconfig”を参照してください。 ネーミングサービス ネーミングサービスにネーミングコンテキストを多数作成する場合に必要となるシステム資源を、以下に示します。 パラメタ (注) 種類 加算値 必要数 ネーミングコンテキスト数 + 16 以上 注) プロセス数あたりのオープン可能なファイル数です。該当するパラメタはありません。 bash(Linux)または、ボーンシェルの場合はulimitコマンドを、Cシェルの場合はlimitコマンドを使用して、ネーミングサービスのプロ セスが必要とするファイルをオープンできるだけの値を設定してください。コマンドの詳細については、OSのドキュメントを参照して ください。 - 60 - ■アプリケーションで使用するスレッド数・プロセス数 CORBAサービスでアプリケーションを実行する場合、アプリケーションから生成されるプロセス数・スレッド数が多くなる場合には、シ ステムパラメタを変更する必要があります。 アプリケーションをマルチスレッドで作成している場合に、生成されるスレッド数の目安を以下に示します。 分類 スレッド数 CORBAサービス 25個 + クライアントアプリケーションとの接続数 + CORBAアプリケーションプロセス数 サーバアプリケーション 1プロセスにつき (6個 + スレッド多重度数) クライアントアプリケーション 1プロセスにつき8個 システムパラメタで、変更が必要となるものを以下に示します。 パラメタ 内容 max_nprocs システム全体で生成できるプロセス数 kernel.threads-max システム全体で生成できるプロセス数とスレッド数の合計 システムパラメタ以外で、考慮するパラメタを以下に示します。 パラメタ 内容 (注1) プロセスの最大スタックサイズ (注2) 1人のユーザが使用できる最大のプロセス数 注1) 該当するパラメタはありません。 bashまたはボーンシェルの場合はulimitコマンドを、Cシェルの場合はlimitコマンドを使用して設定してください。この値にスレッド数 を掛けた値が、プロセスのスタック領域として使用されます。1つのプロセスで使用可能なメモリを超過してスレッドは生成できない ため、1つのプロセスが生成できるスレッド数は限界があります。 CORBAサーバアプリケーションおよびEJBアプリケーションのリクエスト処理多重度は“スレッド多重度 × プロセス多重度”で計算 されます。1つのプロセスで使用可能なメモリサイズによってスレッド多重度を上げることができない場合は、プロセス多重度を上げ ることを検討してください。CORBAサーバアプリケーションのスレッド多重度・プロセス多重度については“リファレンスマニュアル(コ マンド編)”の“OD_impl_inst”に記載されているproc_conc_max、thr_conc_init、thr_conc_maximumを参照してください。EJBアプリ ケーションのスレッド多重度については、“J2EE ユーザーズガイド”-“EJBコンテナのチューニング”に記載されている“同時処理 数”を参照してください。 注2) 該当するパラメタはありません。 bashまたはボーンシェルの場合はulimitコマンドを、Cシェルの場合はlimitコマンドを使用して設定してください。ユーザが生成する プロセス数とスレッド数の合計値以上の値に設定してください。 ■ファイルディスクリプタ数 CORBAサービスで多数のアプリケーションを動作させ(多端末接続時など)、使用するファイルディスクリプタ数がシステムのデフォル ト値を超える場合は、システムパラメタにその値を設定してください。 - 61 - パラメタ rlim_fd_cur (システムパラメタ) 内容 使用するファイルディスクリプタ数がデフォルト値を超える場合に設 定。 システムパラメタで、変更が必要となるものを以下に示します。 パラメタ 内容 システム全体のファイルディスクリプタの上限値。 fs.file-max システムパラメタ以外で、考慮するパラメタを以下に示します。 パラメタ nofile (注1) 内容 各ユーザのオープン可能なファイルディスクリプタの上限値 注1) /etc/security/limits.conf ファイルを編集します。limits.conf ファイルの詳細については、オペレーティングシステムのドキュメントを参 照してください。 3.1.2 コンポーネントトランザクションサービスのシステム資源の設定 コンポーネントトランザクションサービスの動作時には、使用する機能によりシステム資源を拡張する必要があります。ここでは、以下 について説明します。 ・ システムパラメタ - コンポーネントトランザクションサービスの基本機能 - セション情報管理機能 - 性能監視ツール 以降に示す値は、CORBAサービスの値を含んでいません。“3.1.1 CORBAサービスのシステム資源の設定”を参照し、必要な値を 加算してください。 ■システムパラメタ コンポーネントトランザクションサービスが使用する共用メモリ、セマフォ、メッセージキューのシステムパラメタのチューニングについて 説明します。 コンポーネントトランザクションサービスの基本機能のほかに各機能を使用する場合は、コンポーネントトランザクションサービスの基 本機能の資源に各機能で使用する資源量を加算してください。 システムパラメタの変更方法や、各パラメタの意味については、“■システムパラメタについて”を参照してください。 なお、資源制御によるIPC資源のパラメタは、Solaris 10以降の場合に設定可能です。 - 62 - コンポーネントトランザクションサービスの基本機能 コンポーネントトランザクションサービスの基本機能を使用する場合に必要となるシステム資源について、以下に示します。 共用メモリ パラメタ shmmax 資源制御 - 種類 設定値 必要数 Interstage Application Server Enterprise Edition/ Interstage Application Server Standard-J Editionの場合 ・ システム規模がsmallの場合 12498508以上 ・ システム規模がmoderateの場合 23736108以上 ・ システム規模がlargeの場合 34973708以上 ・ システム規模がsuperの場合 54736908以上 Interstage Web Serverの場合 ・ 12498508以上 - project.maxshm-memory 加算値 Interstage Application Server Enterprise Editionの場合 ・ ラッパーワークユニット未使用時 - システム規模がsmallの場合 36096468以上 - システム規模がmoderateの場合 48500404以上 - システム規模がlargeの場合 61728660以上 - システム規模がsuperの場合 83718036以上 ・ ラッパーワークユニット使用時 - システム規模がsmallの場合 36222932以上 - システム規模がmoderateの場合 48744628以上 - システム規模がlargeの場合 62914964以上 - システム規模がsuperの場合 86081940以上 Interstage Application Server Standard-J Editionの場合 ・ システム規模がsmallの場合 35971540以上 ・ システム規模がmoderateの場合 48257716以上 ・ システム規模がlargeの場合 60543892以上 - 63 - パラメタ 資源制御 種類 必要数 ・ システム規模がsuperの場合 81355668以上 Interstage Web Serverの場合 ・ 35971540以上 shmmni project.maxshm-ids 加算値 22 (注) 注) マルチシステム機能を使用する場合は、拡張システム数を積算した値を加算してください。 マルチシステム機能はInterstage Application Server Enterprise Editionで使用できます。 共用メモリ パラメタ 種類 必要数 設定値 kernel.shmmax [システム規模がsmallの場合] 12498508以上 [システム規模がmoderateの場合] 23736108以上 [システム規模がlargeの場合] 34973708以上 [システム規模がsuperの場合] 54736908以上 18,219,144 以上 加算値 kernel.shmmni 22 セマフォ パラメタ 資源制御 種類 必要数 semmni project.maxsem-ids 加算値 29 (注2) semmns (注1) - 加算値 21 (注2) semmsl process.maxsem-nsems 設定値 12 以上 (注2) semopm process.maxsem-ops 設定値 3 以上 注1) Solaris 9でのみ有効です。 注2) マルチシステム機能を使用する場合は、拡張システム数を積算した値を加算してください。 マルチシステム機能はInterstage Application Server Enterprise Editionで使用できます。 セマフォ パラメタ para1 種類 設定値 必要数 12 以上 - 64 - パラメタ 種類 必要数 para2 加算値 21 para3 設定値 3 以上 para4 加算値 29 メッセージキュー パラメタ 資源制御 種類 必要数 msgmax (注1) - 設定値 528 以上 msgmnb process.maxmsg-qbytes 設定値 4,572 + (528 × 同時実行コマンド数) (注2) msgmni project.maxmsg-ids 加算値 11 (注3) msgtql process.maxmsg-messages 設定値 [Solaris 10以降の場合] 15 + 同時実行コマンド数 以上(注2)(注3)(注4) - 加算値 [Solaris 9の場合] 15 + 同時実行コマンド数 (注2)(注3)(注4) 注1) Solaris 9でのみ有効です。 注2) 同時実行コマンド数とは、以下のコマンドを同時に実行した数のことです。 - Interstage Application Server Enterprise Editionの場合 isstartwu 、 isstopwu 、 tdstartwu 、 tdstopwu 、 tdinhibitobj 、 tdpermitobj 、 tdmodifyprocnum 、 tdmodifywu 、 tdstandbywu、 tdreleasewu - Interstage Application Server Standard-J Editionの場合 isstartwu、isstopwu また、Systemwalker Operation Manager、Interstage運用APIを使用してワークユニットの起動/停止、オブジェクト閉塞/閉塞解除、 ラッパーワークユニットのオブジェクト情報の獲得を行う場合は、同時に操作する回数が同時実行コマンド数となります。 オブジェクト閉塞/閉塞解除、ラッパーワークユニットのオブジェクト情報の獲得はInterstage Application Server Enterprise Editionで 使用できます。 注3) マルチシステム機能を使用する場合は、拡張システム数を積算した値を加算してください。 マルチシステム機能はInterstage Application Server Enterprise Editionで使用できます。 注4) AIM連携機能を使用する場合は、2,040を加算してください。 AIM連携機能はInterstage Application Server Enterprise Editionで使用できます。 メッセージキュー パラメタ 種類 必要数 kernel.msgmax 設定値 528 以上 kernel.msgmnb 設定値 4,572 + (528 × 同時実行コマンド数) (注) kernel.msgmni 加算値 11 注) 同時実行コマンド数とは、以下のコマンドを同時に実行した数のことです。 - 65 - - Interstage Application Server Enterprise Editionの場合 isstartwu、isstopwu、tdstartwu、tdstopwu、tdinhibitobj、tdpermitobj、tdmodifyprocnum、tdmodifywu - Interstage Application Server Standard-J Editionの場合 isstartwu、isstopwu - isstartwu、isstopwu、tdstartwu、tdstopwu、tdinhibitobj、tdpermitobj、tdmodifyprocnum、tdmodifywu また、以下を使用してワークユニットの起動/停止、オブジェクト閉塞/閉塞解除を行う場合は、同時に操作する回数が同時実行コマ ンド数となります。 - Systemwalker Operation Manager - Interstage運用API オブジェクト閉塞/閉塞解除はInterstage Application Server Enterprise Editionで使用できます。 セション情報管理機能 セション情報管理機能を使用する場合に追加となるシステム資源について、以下に示します。 共用メモリ パラメタ shmmni 資源制御 project.maxshm-ids 種類 加算値 必要数 1 (注) 注) マルチシステム機能を使用する場合は、拡張システム数を積算した値を加算してください。 マルチシステム機能はInterstage Application Server Enterprise Editionで使用できます。 共用メモリ パラメタ 種類 加算値 kernel.shmmni 必要数 1 セマフォ パラメタ 資源制御 種類 必要数 semmni project.maxsem-ids 加算値 1 (注2) semmns (注1) - 加算値 1 注1) Solaris 9でのみ有効です。 注2) マルチシステム機能を使用する場合は、拡張システム数を積算した値を加算してください。 マルチシステム機能はInterstage Application Server Enterprise Editionで使用できます。 セマフォ パラメタ 種類 必要数 para2 加算値 1 para4 加算値 1 - 66 - 性能監視ツール 性能監視ツールを使用する場合に追加となるシステム資源については、“3.3 性能監視ツール使用時に必要なシステム資源”を参照 してください。 3.1.3 データベース連携サービスのシステム資源の設定 データベース連携サービスの動作時には、利用するシステム形態によりシステム資源を拡張する必要があります。ここでは、以下に ついて、利用するシステム形態ごとに説明します。 ・ システムパラメタ - OTSシステムのみが動作する場合 - リソース管理プログラムのみが動作する場合 - OTSシステムとリソース管理プログラムの両方が動作する場合 ■システムパラメタ データベース連携サービスが使用する共用メモリ、セマフォ、メッセージキューのシステムパラメタのチューニングについて、システム 形態ごとに説明します。 システムパラメタの変更方法や、各パラメタの意味については、“■システムパラメタについて”を参照してください。 なお、資源制御によるIPC資源のパラメタは、Solaris 10以降の場合に設定可能です。 OTSシステムのみが動作する場合 OTSシステムのみが動作する場合に必要となるシステム資源について、以下に示します。 共用メモリ パラメタ 資源制御 種類 必要数 shmmax - 設定値 17,830,204以上 (注) - project.maxshm-memory 加算値 17,830,204 (注) shmmni project.maxshm-ids 加算値 12 共用メモリ パラメタ 種類 必要数 kernel.shmmax 設定値 17,830,204 (注) kernel.shmmni 加算値 12 注) 以下のデフォルト環境で算出した値です。 - データベース連携サービスの環境定義のconfigファイル OTS_TRACE_SIZE = 4096 RECOVERY_TRACE_SIZE = 4096 OBSERVE_TRACE_SIZE = 4096 - 67 - - データベース連携サービスの環境定義のセットアップ情報ファイル TRANMAX = 100 PARTICIPATE = 4 定義値を変更している場合、以下の計算式で求めてください。 必要数 = (OTS_TRACE_SIZE + RECOVERY_TRACE_SIZE + OBSERVE_TRACE_SIZE) ×1,024 + PARTICIPATE × TRANMAX × 2,048 + TRANMAX × 284 + 4,399,692 定義値を変更している場合、以下の計算式で求めてください。 必要数 = (OTS_TRACE_SIZE + RECOVERY_TRACE_SIZE + OBSERVE_TRACE_SIZE) ×1,024 + PARTICIPATE × TRANMAX × 2,560 + TRANMAX × 284 + 4,399,692 セマフォ パラメタ 資源制御 種類 必要数 semmni project.maxsem-ids 加算値 8 semmns (注) - 加算値 24 semmsl process.maxsem-nsems 設定値 12 以上 semopm process.maxsem-ops 設定値 3 以上 注) Solaris 9でのみ有効です。 セマフォ パラメタ 種類 必要数 para1 設定値 12 以上 para2 加算値 24 para3 設定値 3 以上 para4 加算値 8 メッセージキュー パラメタ 資源制御 種類 必要数 msgmax (注) - 設定値 528 以上 msgmnb process.maxmsg-qbytes 設定値 4,572 以上 msgmni project.maxmsg-ids 加算値 3 msgtql process.maxmsg-messages 設定値 [Solaris 10以降の場合] 2,040以上 - 加算値 [Solaris 9の場合] 2,040 - 68 - 注) Solaris 9でのみ有効です。 メッセージキュー パラメタ 種類 必要数 kernel.msgmax 設定値 528 以上 kernel.msgmnb 設定値 4,572 以上 kernel.msgmni 加算値 3 リソース管理プログラムのみが動作する場合 リソース管理プログラムのみが動作する場合に必要となるシステム資源について、以下に示します。 共用メモリ パラメタ 資源制御 種類 必要数 shmmax - 設定値 12,840,416以上 (注) - project.maxshm-memory 加算値 12,840,416 (注) shmmni project.maxshm-ids 加算値 リソース管理プログラムの種類 × 11 共用メモリ パラメタ 種類 必要数 kernel.shmmax 設定値 12,840,416 (注) kernel.shmmni 加算値 リソース管理プログラムの種類 × 11 注) リソース管理プログラムの種類が1つの場合で、かつ、以下のデフォルト環境で算出した値です。 - データベース連携サービスの環境定義のconfigファイル RESOURCE_TRANMAX = 10 RESOURCE_TRACE_SIZE = 4096 OBSERVE_TRACE_SIZE = 4096 - リソース定義ファイル OTS_RMP_PROC_CONC = 5 - データベース連携サービスの環境定義のセットアップ情報ファイル TRANMAX = 100 定義値を変更している場合、以下の計算式で求めてください。 必要数 = (RESOURCE_TRACE_SIZE + OBSERVE_TRACE_SIZE) × 1,024 + (TRANMAX + 1) × 332 + ((リソース管理プログラムの種類 × RESOURCE_TRANMAX × OTS_RMP_PROC_CONC) × (144 + 332)) + 4,394,476 セマフォ パラメタ semmni 資源制御 project.maxsem-ids 種類 加算値 必要数 リソース管理プログラムの種類 × 7 - 69 - セマフォ パラメタ 種類 加算値 para4 必要数 リソース管理プログラムの種類 × 7 OTSシステムとリソース管理プログラムの両方が動作する場合 OTSシステムとリソース管理プログラムの両方が動作する場合に必要となるシステム資源について、以下に示します。 共用メモリ パラメタ 資源制御 種類 必要数 shmmax - 設定値 17,830,204以上 (注) - project.maxshm-memory 加算値 17,830,204(注) shmmni project.maxshm-ids 加算値 12 + リソース管理プログラムの種類 × 11 共用メモリ パラメタ 種類 必要数 kernel.shmmax 設定値 17,830,204 (注) kernel.shmmni 加算値 12 + リソース管理プログラムの種類 × 11 注) リソース管理プログラムの種類が1つの場合で、かつデフォルト環境での値です。定義値を変更している場合、以下の計算式で求 めてください。 必要数 = OTSシステムのみが動作する場合の必要数 + リソース管理プログラムのみが動作する場合の必要数 - 4,915,600 セマフォ パラメタ 資源制御 種類 必要数 semmni project.maxsem-ids 加算値 8 + リソース管理プログラムの種類 × 7 semmns (注) - 加算値 24 semmsl process.maxsem-nsems 設定値 12 以上 semopm process.maxsem-ops 設定値 3 以上 注) Solaris 9でのみ有効です。 セマフォ パラメタ 種類 必要数 para1 設定値 12 以上 para2 加算値 24 - 70 - パラメタ 種類 必要数 para3 設定値 3 以上 para4 加算値 8 + リソース管理プログラムの種類 × 7 メッセージキュー パラメタ 資源制御 種類 必要数 msgmax (注) - 設定値 528 以上 msgmnb process.maxmsg-qbytes 設定値 4,572 以上 msgmni project.maxmsg-ids 加算値 3 msgtql process.maxmsg-messages 設定値 [Solaris 10以降の場合] 2,040以上 - 加算値 [Solaris 9の場合] 2,040 注) Solaris 9でのみ有効です。 メッセージキュー パラメタ 種類 必要数 kernel.msgmax 設定値 528 以上 kernel.msgmnb 設定値 4,572 以上 kernel.msgmni 加算値 3 3.1.4 イベントサービスのシステム資源の設定 イベントサービスを用いたシステムの運用時には、チャネル数、接続するコンシューマ/サプライヤ数などによりシステム資源を拡張す る必要があります。ここでは、以下について説明します。 ・ システムパラメタ 以降に示す値は、CORBAサービスの値を含んでいません。“3.1.1 CORBAサービスのシステム資源の設定”を参照し、必要な値を 加算してください。 ■システムパラメタ 一般的なイベントサービスが使用する共用メモリ、セマフォ、メッセージキューのシステムパラメタのチューニングについて説明します。 イベントサービスの他に共用メモリ、セマフォ、メッセージキューを使用するアプリケーションが存在する場合、そのアプリケーションが 使用する資源にイベントサービスの資源量を加算してください。 システムパラメタの変更方法や、各パラメタの意味については、“■システムパラメタについて”を参照してください。 なお、資源制御によるIPC資源のパラメタは、Solaris 10以降の場合に設定可能です。 - 71 - 揮発チャネル運用と不揮発チャネル運用を併用している場合は、不揮発チャネル運用の必要数を使用してください。 共用メモリ パラメタ shmmax(注 1) 資源制御 - 種類 設定値 必要数 [揮発チャネル運用の場合][Solaris 9の場合] 以下の値のうち、最大値を指定します。 ・ 1,040 × イベントチャネル最大作成数(注2) + 600K ・ traceconfigファイルのtrace_sizeパラメタに指定したバイト数(注 3) [不揮発チャネル運用の場合][Solaris 9の場合] 以下の値のうち、最大値を指定します。 ・ 1,040 × イベントチャネル最大作成数(注2) + 184 × 同時実行可能なグローバルトランザクション数(注4) + 600K ・ 17 × 1,024 × 1,024 + 576 × トランザクションの多重度 + 88 × (システム用データ格納域の数 + イベントデータ用データ格納域の数) + ユニットで使用する共用メモリサイズ × 1,024 × 1,024 (注5) ・ traceconfigファイルのtrace_sizeパラメタに指定したバイト数(注 3) ・ [MessageQueueDirectorのイベントチャネル連携サービスのパッ キング転送機能を使用する場合] イベントデータの平均サイズ(注6) × packmsg_cntキーワード値(注7) × 23 - 42 × 1,024 × 1,024 - project.maxshm-memory 加算値 [揮発チャネル運用の場合][Solaris 10以降の場合] 以下の値を加算します。 ・ 1,040 × イベントチャネル最大作成数(注2) + 600K ・ traceconfigファイルのtrace_sizeパラメタに指定したバイト数(注 3) [不揮発チャネル運用の場合][Solaris 10以降の場合] 以下の値を加算します。 ・ 1,040 × イベントチャネル最大作成数(注2) + 184 × 同時実行可能なグローバルトランザクション数(注4) + 600K ・ 17 × 1,024 × 1,024 + 576 × トランザクションの多重度 + 88 × (システム用データ格納域の数 + イベントデータ用データ格納域の数) + ユニットで使用する共用メモリサイズ × 1,024 × 1,024 (注5) ・ traceconfigファイルのtrace_sizeパラメタに指定したバイト数(注 3) ・ [MessageQueueDirectorのイベントチャネル連携サービスのパッ キング転送機能を使用する場合] イベントデータの平均サイズ(注6) × - 72 - パラメタ 資源制御 種類 必要数 packmsg_cntキーワード値(注7) × 23 - 42 × 1,024 × 1,024 shmmni project.maxshm-ids 加算値 [揮発チャネル運用の場合] 4 [不揮発チャネル運用の場合] ユニット数 × 100 以上 注1) Solaris 10以降でshmmaxを設定する場合、Solarisのドキュメントおよび“■システムパラメタについて”を参照して値を決定してくだ さい。 注2) イベントチャネル最大作成数 = 静的生成イベントチャネル最大作成数 + 動的生成イベントチャネル最大作成数 注3) traceconfigファイルの詳細については、“D.1 traceconfig”を参照してください。 注4) 同時実行可能なグローバルトランザクション数は、イベントサービスの構成情報管理コマンド(essetcnf)による-gtrnmaxオプションの 設定値です。 注5) 各値は、ユニット作成コマンド(esmkunit)による以下のユニット定義の設定値です。 なお、複数のユニットを使用する場合は、それぞれのユニットに対して、算出してください。 ユニット定義の項目 トランザクションの多重度 tranmaxの設定値 システム用データ格納域の数 sysqnumの設定値 イベントデータ用データ格納域の数 userqnumの設定値 ユニットで使用する共用メモリサイズ shmmaxの設定値(42より小さい場合は、42) 注6) イベントデータの平均サイズは、以下の計算式で求めます(小数点以下は、切り上げ)。 Ev_size: アプリケーション内で送受信するイベントデータの平均サイズ - [Ev_sizeが2Kバイト以内の場合] イベントデータの平均サイズ = ((Ev_size + 1) ÷ 512) × 512 - [Ev_sizeが2Kバイトを超える場合] イベントデータの平均サイズ = 2K + ((Ev_size - 2K) ÷ 16K) × 16K 注7) packmsg_cntキーワード値は、MessageQueueDirectorのイベントチャネル連携サービスのサービス定義で指定したCHANNELセク ションのpackmsg_cntキーワード値です。 共用メモリ パラメタ kernel.shmmax 種類 設定値 必要数 [揮発チャネル運用の場合] 2,064 × イベントチャネル最大作成数(注1) + 600K +trace_sizeパラメタに指定したバイト数(注2) + 3,328 [不揮発チャネル運用の場合] 以下の値のうち、最大値を指定します。 - 73 - パラメタ 種類 必要数 ・ 2,064 × イベントチャネル最大作成数(注1) + 184 × 同時実行可能なグローバルトランザクション数(注3) + 600K +trace_sizeパラメタに指定したバイト数(注2) + 3,328 ・ 134,217,728 以上 ・ ユニットで使用する共用メモリサイズ(複数ユニットがある場合、 最大値)(注4) 加算値 kernel.shmmni [揮発チャネル運用の場合] ・ プロセス単位で内部トレースを採取する(trace_buffer=process) 場合(注2) 4 + イベントチャネルのプロセス数(注5) ・ イベントサービス単位で内部トレースを採取する (trace_buffer=system)場合(注2) 4 [不揮発チャネル運用の場合] ・ プロセス単位で内部トレースを採取する(trace_buffer=process) 場合(注2) 100 以上の値 (ユニット単位に加算) + イベントチャネルのプロ セス数(注5) ・ イベントサービス単位で内部トレースを採取する (trace_buffer=system)場合(注2) 100 以上の値 (ユニット単位に加算) 注1) イベントチャネル最大作成数 = 静的生成イベントチャネル最大作成数 + 動的生成イベントチャネル最大作成数 注2) trace_sizeパラメタおよびtrace_bufferパラメタは、イベントサービスの動作環境ファイル(traceconfig)で指定します。詳細について は、“D.1 traceconfig”を参照してください。 注3) 同時実行可能なグローバルトランザクション数は、イベントサービスの構成情報管理コマンド(essetcnf)による-gtrnmaxオプションの 設定値です。 注4) ユニットで使用する共用メモリサイズは、ユニットの作成コマンド(esmkunit)のユニット定義ファイルで指定した項目shmmaxの設定 値です。 注5) イベントチャネルのプロセス数 = 静的イベントチャネルグループ数 + 動的イベントチャネルのプロセス数 - 動的イベントチャネルのプロセス数: イベントサービスのセットアップコマンド(essetup)による-pオプションの設定値。 ノーティフィケーションサービスを使用している場合は、“動的イベントチャネルのプロセス数 × 2”としてください。 セマフォ パラメタ semmni 資源制御 project.maxsem-ids 種類 加算値 必要数 3 - 74 - パラメタ semmns (注) 資源制御 - 種類 加算値 必要数 [揮発チャネル運用の場合] 3 以上 [不揮発チャネル運用の場合] 4 以上 注) Solaris 9でのみ有効です。 セマフォ パラメタ 種類 必要数 para1 設定値 29 para2 加算値 [揮発チャネル運用の場合] 6 以上 [不揮発チャネル運用の場合] ユニット数 × 29 + 13 以上 para3 設定値 29 para4 加算値 ユニット数 × 256 メッセージキュー パラメタ 資源制御 種類 必要数 msgmax (注) - 設定値 [不揮発チャネル運用の場合] 2,048 以上 msgmnb process.maxmsg-qbytes 設定値 [不揮発チャネル運用の場合] 4,096 以上 msgmni project.maxmsg-ids 加算値 [揮発チャネル運用の場合] 2 [不揮発チャネル運用の場合] ユニット数 × 3 + 2 msgtql process.maxmsg-messages 設定値 [不揮発チャネル運用の場合][Solaris 10以降の場合] 以下をユニットごとに求めた合計値 ・ 6 + (ユニット定義ファイルのtranmax値 × 4 × 1.3) - 加算値 [不揮発チャネル運用の場合][Solaris 9の場合] 以下をユニットごとに求めた合計値 ・ 6 + (ユニット定義ファイルのtranmax値 × 4 × 1.3) 注) Solaris 9でのみ有効です。 メッセージキュー パラメタ 種類 必要数 kernel.msgmax 設定値 [不揮発チャネル運用の場合] 2,048 以上 kernel.msgmnb 設定値 [不揮発チャネル運用の場合] 4,096 以上 - 75 - パラメタ 種類 加算値 kernel.msgmni 必要数 [不揮発チャネル運用の場合] ユニット数 × 9 3.1.5 J2EE互換のシステム資源の設定 IJServerまたはEJBサービスでは以下の機能を使用する場合に、システム資源を拡張する必要があります。ここでは、以下について説 明します。 ・ システムパラメタ ■システムパラメタ IJServerまたはEJBサービスを使用する際には、以下のシステムパラメタのチューニングを行ってください。 ワークユニット定義の通信バッファ数(Buffer Number)、通信バッファ長(BufferSize)を指定する場合は、“3.1.1 CORBAサービスのシ ステム資源の設定”についても参照してください。 システムパラメタの変更方法や、各パラメタの意味については、“■システムパラメタについて”を参照してください。 なお、資源制御によるIPC資源のパラメタの設定は、Solaris 10以降の場合のみ可能です。 メッセージキュー パラメタ 資源制御 種類 必要数 msgmax (注) - 設定値 4,096 以上 msgmnb process.maxmsg-qbytes 設定値 4,096 以上 msgmni project.maxmsg-ids 加算値 2 以上 msgtql process.maxmsg-messages 設定値 [Solaris 10以降の場合] 1,024 以上 - 加算値 [Solaris 9の場合] 512 以上 注) Solaris 9でのみ有効です。 メッセージキュー パラメタ 種類 必要数 kernel.msgmax 設定値 4,096 以上 kernel.msgmnb 設定値 4,096 以上 kernel.msgmni 加算値 2 以上 3.1.6 Interstage HTTP Serverのシステム資源の設定 Interstage HTTP Serverを用いたシステムの運用時には、システム資源を拡張する必要があります。ここでは、以下について説明しま す。 ・ システムパラメタ - 76 - ・ ファイルディスクリプタ ■システムパラメタ Interstage HTTP Serverを運用するためのサービスが使用するセマフォのシステムパラメタのチューニングについて説明します。 システムパラメタの変更方法や、パラメタの意味については、“■システムパラメタについて”を参照してください。 セマフォ パラメタ 種類 必要数 para1 設定値 1以上 para2 加算値 Webサーバ数×2 para3 設定値 1以上 para4 加算値 Webサーバ数×2 ■ファイルディスクリプタ数 Interstage HTTP Serverを運用するために必要なファイルディスクリプタ数は、Webサーバで使用している機能、および環境定義ファイ ル(httpd.conf)の定義内容に応じて異なります。 以下の表を参照して必要なファイルディスクリプタ数を算出してください。本値がシステムのデフォルト値を超える場合は、システムパラ メタに本値を設定してください。システムパラメタの変更方法や、パラメタの意味については、“■システムパラメタについて”を参照して ください。 パラメタ rlim_fd_cur 種類 設定値 必要数 130 以上 [以下の機能を使用する場合] 上記に以下の値を加算してください。 ・ 基本認証機能:1 ・ オンライン照合機能:1 ・ SSL運用:21 ・ プロキシ機能:1 ・ CGI機能(注):5 [環境定義ファイル(httpd.conf)で以下のディレクティブを追加した場 合] 上記に以下の値を加算してください。 ・ CustomLog(ihsrlogコマンド実行文の指定時):10×ディレクティ ブ数 ・ CustomLog(ihsrlogコマンド実行文の未指定時):1×ディレクティ ブ数 ・ ErrorLog:1×ディレクティブ数 ・ Listen:1×ディレクティブ数 注) 動作するCGIプログラム内で必要となるファイルディスクリプタの数は、別途加算してください。 - 77 - 以下の表を参照して必要なファイルディスクリプタ数を算出してください。 リソース制限については、本値がシステムのデフォルト値を超える場合、/etc/security/limits.confファイルに本値を設定してください。リ ソース制限の変更方法や、パラメタの意味については、“◆リソース制限 ”を参照してください。 システムパラメタについては、ファイルディスクリプタ数が不足する現象が発生した場合、システムパラメタに本値を加算設定してくださ い。複数のWebサーバを作成している場合は、Webサーバごとに必要数を加算してください。システムパラメタの変更方法や、パラメタ の意味については、“■システムパラメタについて”を参照してください。 パラメタ [リソース制限] nofile 種類 設定値 必要数 20 以上 [以下の機能を使用する場合] 上記に以下の値を加算してください。 ・ 基本認証機能:1 ・ オンライン照合機能:1 ・ SSL運用:21 ・ プロキシ機能:1 ・ CGI機能(注):5 [環境定義ファイル(httpd.conf)で以下のディレクティブを追加した場 合] 上記に以下の値を加算してください。 ・ CustomLog(ihsrlogコマンド実行文の指定時):2×ディレクティ ブ数 ・ CustomLog(ihsrlogコマンド実行文の未指定時):1×ディレクティ ブ数 ・ ErrorLog:1×ディレクティブ数 ・ Listen:1×ディレクティブ数 [システムパラメタ] fs.file-max 加算値 上記と同じ値 注) 動作するCGIプログラム内で必要となるファイルディスクリプタの数は、別途加算してください。 3.1.7 MessageQueueDirectorのシステム資源の設定 MessageQueueDirectorを用いたシステムの運用時には、MQDのシステム数およびMQDの上位サービスの種類などによりシステム資 源を拡張する必要があります。ここでは、以下について説明します。 ・ システムパラメタ ・ ファイルディスクリプタ数 ■システムパラメタ MessageQueueDirectorが使用するシステムパラメタのチューニングについて説明します。 システムパラメタの変更方法や、各パラメタの意味については、“■システムパラメタについて”を参照してください。 なお、資源制御によるIPC資源のパラメタの設定は、Solaris 10以降の場合のみ可能です。 共用メモリ - 78 - パラメタ 資源制御 種類 必要数 shmmax (注1) - 設定値 [Solaris 9の場合] MessageBufferMaxSize × 1,000,000 以上 - project.maxshm-memory 加算値 [Solaris 10以降の場合] MessageBufferMaxSize × 1,000,000 × MQDシステム数 shmmni project.maxshm-ids 加算値 100 × MQDシステム数 注1) Solaris 10以降でshmmaxを設定する場合、Solarisのドキュメントおよび“■システムパラメタについて”を参照して値を決定してくだ さい。 共用メモリ パラメタ 種類 必要数 kernel.shmmax 設定値 134,217,728 以上 kernel.shmmni 加算値 100 × MQDシステム数 セマフォ パラメタ 種類 必要数 para1 設定値 29 para2 加算値 MQDシステム数 × 29 para3 設定値 29 para4 加算値 MQDシステム数 × 256 メッセージキュー パラメタ 資源制御 種類 必要数 msgmax (注1) - 設定値 2,048 以上 msgmnb process.maxmsg-qbytes 設定値 44 × 1,024 × 4 × 1.3 (注2) msgmni project.maxmsg-ids 加算値 3 × MQDのシステム数 msgtql - 加算値 [Solaris 9の場合] [MQDのアプリケーションインタフェースを使用する場合] MQDシステム数 × (6 + (1,024 × 4 × 1.3)) (注2) [Solaris 9の場合] [MQDのアプリケーションインタフェースを使用しない場合] MQDシステム数 × (6 + (n × 4 × 1.3)) (注2)(注3) - process.maxmsg-messages 設定値 [Solaris 10以降の場合] [MQDのアプリケーションインタフェースを使用する場合] MQDシステム数 × (6 + (1,024 × 4 × 1.3)) 以上 (注2) [Solaris 10以降の場合] [MQDのアプリケーションインタフェースを使用しない場合] MQDシステム数 × (6 + (n × 4 × 1.3)) 以上 (注2)(注3) 注1) Solaris 9でのみ有効です。 - 79 - 注2) 1.3は余裕値です。 注3) MQDの拡張機能を使用する場合、nには以下の式に従った値をいれてください。また、nには3以上の数値をいれてください。 拡張機能 nの値 イベントチャネル連携サービス(非同期メッセージ 基盤にMQDを使用する場合) 3 + 送信キュー数 + 受信キュー数 を加算 イベントチャネル連携サービス(非同期メッセージ 基盤にMQDを使用しない場合) 3 を加算 同報配信サービス 同報配信グループ数 + 1 を加算 SMTP連携サービス 3 + 送信キュー数 × 2 + 受信キュー数 + 100 を 加算 メッセージキュー パラメタ 種類 必要数 kernel.msgmax 設定値 16,384 以上 kernel.msgmnb 設定値 32,768 以上 kernel.msgmni 加算値 9 × MQDシステム数 ■ファイルディスクリプタ数 MessageQueueDirectorでSMTP連携サービスを使用する場合には、MQDを起動するshellに対してulimitコマンドで設定するパラメタ を変更する必要があります。 パラメタ descriptors 内容 20 + (送信キュー数定義数 × 2) 3.1.8 Interstage シングル・サインオンのシステム資源の設定 Interstage シングル・サインオンを用いたシステムの運用時には、システム資源を拡張する必要があります。ここでは、以下について説 明します。 ・ システムパラメタ - Interstage シングル・サインオンのリポジトリサーバ機能を使用する際のシステムパラメタのチューニング - Interstage シングル・サインオンの認証サーバ機能を使用する際のシステムパラメタのチューニング - Interstage シングル・サインオンの業務サーバ機能を使用する際のシステムパラメタのチューニング ■システムパラメタ Interstage シングル・サインオンが使用するシステムパラメタのチューニングについて説明します。 システムパラメタの変更方法や、各パラメタの意味については、“■システムパラメタについて”を参照してください。 なお、資源制御によるIPC資源のパラメタの設定は、Solaris 10以降の場合に設定可能です。 - 80 - なお、以降に示す値は、Interstage HTTP Serverで必要な値を含んでいません。“Interstage HTTP Serverのシステム資源の設定”を参 照し、必要な値を加算してください。 Interstage シングル・サインオンのリポジトリサーバ機能を使用する際のシステムパラメタのチューニング リポジトリサーバでは、“Interstage ディレクトリサービス”を使用しています。“Interstage ディレクトリサービス”で必要としているチューニ ングについては、“3.1.9 Interstage ディレクトリサービスのシステム資源の設定”を参照してください。 共用メモリ パラメタ 資源制御 種類 必要数 shmmax (注1) - 設定値 [Solaris 9の場合] 12,800,000 + (164 × サイト定義数(注2)) + (ロール数(注3) + ロールセット数(注4) + ロールセット数(注4) × ロール数(注3)) × 1,024 以上 (注5) - project.maxshm-memory 加算値 26,000,000 + (164 × サイト定義数(注2)) + (ロール数(注3) + ロールセット数(注4) + ロールセット数(注4) × ロール数(注3)) × 1,024 × 3 (注6) shmmni project.maxshm-ids 加算値 13 注1) Solaris 10以降でshmmaxを設定する場合、Solarisのドキュメントおよび“■システムパラメタについて”を参照して値を決定してくだ さい。 注2) SSOリポジトリの保護リソースに登録したサイト定義の総数 注3) SSOリポジトリに定義したロールの総数 注4) SSOリポジトリに定義したロールセットの総数 注5) ユーザ情報を登録するディレクトリサービスにActive Directoryを使用し、シングル・サインオンの拡張スキーマを使用しない場合 は、運用に応じて以下の式で見積もった値を加算してください。 Active Directoryのロール/ロールセットに使用する属性の総数 × 524 注6) ユーザ情報を登録するディレクトリサービスにActive Directoryを使用し、シングル・サインオンの拡張スキーマを使用しない場合 は、運用に応じて以下の式で見積もった値を加算してください。 Active Directoryのロール/ロールセットに使用する属性の総数 × 524 × 3 共用メモリ パラメタ 種類 必要数 kernel.shmmax 設定値 12,800,000 + (164 × サイト定義数(注1)) + (ロール数(注2) + ロールセット数(注3) + ロールセット数(注3) × ロール数(注2)) × 1,024 以上(注4) kernel.shmmni 加算値 13 注1) SSOリポジトリの保護リソースに登録したサイト定義の総数 - 81 - 注2) SSOリポジトリに定義したロールの総数 注3) SSOリポジトリに定義したロールセットの総数 注4) ユーザ情報を登録するディレクトリサービスにActive Directoryを使用し、シングル・サインオンの拡張スキーマを使用しない場合 は、運用に応じて以下の式で見積もった値を加算してください。 Active Directoryのロール/ロールセットに使用する属性の総数 × 524 セマフォ パラメタ 資源制御 種類 必要数 semmni project.maxsem-ids 加算値 9 semmns (注) - 加算値 9 semmnu (注) - 加算値 Interstage HTTP Serverが作成する最大プロセス数(httpd.confの MaxClients値) × 9 semume (注) - 加算値 9 注) Solaris 9でのみ有効です。 セマフォ パラメタ 種類 必要数 para2 加算値 9 para4 加算値 9 Interstage シングル・サインオンの認証サーバ機能を使用する際のシステムパラメタのチューニング 共用メモリ パラメタ 資源制御 種類 必要数 shmmax (注1) - 設定値 [Solaris 9の場合] 14,000,000 + パス定義の総数(注2) × 2,048 以上 - project.maxshm-memory 加算値 27,000,000 + パス定義の総数(注2) × 2,048 shmmni project.maxshm-ids 加算値 11 注1) Solaris 10以降でshmmaxを設定する場合、Solarisのドキュメントおよび“■システムパラメタについて”を参照して値を決定してくだ さい。 注2) SSOリポジトリの保護リソースに登録した各サイト定義に定義したパス定義の総数 共用メモリ - 82 - パラメタ 種類 必要数 kernel.shmmax 設定値 14,000,000 + パス定義の総数(注) × 2,048 以上 kernel.shmmni 加算値 11 注) SSOリポジトリの保護リソースに登録した各サイト定義に定義したパス定義の総数 セマフォ パラメタ 資源制御 種類 必要数 semmni project.maxsem-ids 加算値 10 semmns (注) - 加算値 10 semmnu (注) - 加算値 Interstage HTTP Serverが作成する最大プロセス数(httpd.confの MaxClients値) ×10 semume (注) - 加算値 10 注) Solaris 9でのみ有効です。 セマフォ パラメタ 種類 必要数 para2 加算値 10 para4 加算値 10 Interstage シングル・サインオンの業務サーバ機能を使用する際のシステムパラメタのチューニング 共用メモリ パラメタ 資源制御 種類 必要数 shmmax (注1) - 設定値 [Solaris 9の場合] 13,000,000 + (1 + キャッシュサイズ(注2)) × 1024 × キャッシュ数(注3) + (ロール数(注4) + 拡張ユーザ情報数(注5)+ 1) × パス定義の最 大数(注6) × 1,200 - project.maxshm-memory 加算値 (13,000,000 + (1 + キャッシュサイズ(注2)) × 1024 × キャッシュ数(注3) + (ロール数(注4) + 拡張ユーザ情報数(注5)+ 1) × パス定義の最 大数(注6) × 1,200 × 2) × 業務サーバ数 shmmni project.maxshm-ids 加算値 10 × 業務サーバ数 注1) Solaris 10以降でshmmaxを設定する場合、Solarisのドキュメントおよび“■システムパラメタについて”を参照して値を決定してくだ さい。 - 83 - 注2) セションの管理を行う運用の場合、業務サーバでキャッシュする利用者の認証情報サイズ(Kバイト)を設定します。セションの管理 を行わない運用の場合は、0で計算してください。 キャッシュサイズについては、“F.4 業務サーバを構築する場合のチューニング”を参照してください。 注3) セションの管理を行う運用の場合、システムの同時アクセス最大数以上を設定します。セションの管理を行わない運用の場合は、0 で計算してください。 キャッシュ数については、“F.4 業務サーバを構築する場合のチューニング”を参照してください。 注4) SSOリポジトリに定義したロールの総数 注5) 業務アプリケーションに対して通知するユーザ情報の数 セションの管理を行う運用の場合、リポジトリサーバのInterstage管理コンソールの以下に設定されている属性名の数を設定します。 セションの管理を行わない運用の場合は、0で計算してください。 [システム] > [セキュリティ] > [シングル・サインオン] > [認証基盤] > [リポジトリサーバ] > [環境設定] > [リポジトリサーバ詳細設定 [表示]] > [業務システムに通知する情報] > [拡張ユーザ情報] 注6) SSOリポジトリの保護リソースに登録した各サイト定義の保護パスに設定されているパス定義の最大数 共用メモリ パラメタ 種類 必要数 kernel.shmmax 設定値 13,000,000 + (1 + キャッシュサイズ(注1)) × 1024 × キャッシュ数(注2) + (ロール数(注3) + 拡張ユーザ情報数(注4)+ 1) × パス定義の最 大数(注5) × 1,200 kernel.shmmni 加算値 10 × 業務サーバ数 注1) セションの管理を行う運用の場合、業務サーバでキャッシュする利用者の認証情報サイズ(Kバイト)を設定します。セションの管理 を行わない運用の場合は、0で計算してください。 キャッシュサイズについては、“F.4 業務サーバを構築する場合のチューニング”を参照してください。 注2) セションの管理を行う運用の場合、システムの同時アクセス最大数以上を設定します。セションの管理を行わない運用の場合は、0 で計算してください。 キャッシュ数については、“F.4 業務サーバを構築する場合のチューニング”を参照してください。 注3) SSOリポジトリに定義したロールの総数 注4) 業務アプリケーションに対して通知するユーザ情報の数 セションの管理を行う運用の場合、リポジトリサーバのInterstage管理コンソールの以下に設定されている属性名の数を設定します。 セションの管理を行わない運用の場合は、0で計算してください。 [システム] > [セキュリティ] > [シングル・サインオン] > [認証基盤] > [リポジトリサーバ] > [環境設定] > [リポジトリサーバ詳細設定 [表示]] > [業務システムに通知する情報] > [拡張ユーザ情報] 注5) SSOリポジトリの保護リソースに登録した各サイト定義の保護パスに設定されているパス定義の最大数 セマフォ - 84 - パラメタ 資源制御 種類 必要数 semmni project.maxsem-ids 加算値 7 × 業務サーバ数 semmns (注1) - 加算値 7 × 業務サーバ数 semmnu (注1) - 加算値 [WebサーバにInterstage HTTP Serverを使用する場合(注2)] (7 + (Interstage HTTP Serverが作成する最大プロセス数(注3) × 7)) × Interstage HTTP Serverを使用しているWebサーバ数 [WebサーバにSun Java System Web Serverを使用する場合(注2)] 14 semume (注1) - 加算値 7 × 業務サーバ数 注1) Solaris 9でのみ有効です。 注2) WebサーバにInterstage HTTP ServerとSun Java System Web Serverを同時に使用する場合は、それぞれの値を加算してください。 注3) 使用する各Webサーバのhttpd.confに設定されているMaxClientsの最大値 セマフォ パラメタ 種類 必要数 para2 加算値 7 × 業務サーバ数 para4 加算値 7 × 業務サーバ数 3.1.9 Interstage ディレクトリサービスのシステム資源の設定 Interstage ディレクトリサービスを用いたシステムの運用時には、システム資源を拡張する必要があります。ここでは、以下について説 明します。 ・ システムパラメタ(Interstage ディレクトリサービスの運用に必要なシステム資源) ・ システムパラメタ(標準データベースの運用に必要なシステム資源) ・ システムパラメタ(Symfoware Serverの運用に必要なシステム資源) ・ システムパラメタ(Oracleデータベースの運用に必要なシステム資源) ■システムパラメタ(Interstage ディレクトリサービスの運用に必要なシステム資源) Interstage ディレクトリサービスが使用するシステムパラメタのチューニングについて説明します。 システムパラメタの変更方法や、各パラメタの意味については、“■システムパラメタについて”を参照してください。 なお、資源制御によるIPC資源のパラメタは、Solaris 10以降の場合に設定可能です。 共用メモリ パラメタ shmmax 資源制御 - 種類 設定値 必要数 リポジトリ数 × 1,572,864 + (5 × (リポジトリ数 × 1,843,200)) 以上 (注1) - 85 - パラメタ 資源制御 種類 必要数 - project.maxshm-memory 加算値 (リポジトリ数 × 1,572,864 + (5 × (リポジトリ数 × 1,843,200))(注1)) × (4 × リポジトリ数) shmmni project.maxshm-ids 加算値 4 × リポジトリ数(注2) 注1) リポジトリのデータベースとして標準データベースを使用し、レプリケーション運用をする時は、さらに1,048,576を加算してください。 注2) リポジトリのデータベースとして標準データベースを使用し、レプリケーション運用をする時は、5 × リポジトリ数です。 共用メモリ パラメタ 種類 必要数 kernel.shmmax 設定値 5 × (リポジトリ数 × 1,843,200) 以上 kernel.shmmni 加算値 4 × リポジトリ数(注) 注) リポジトリのデータベースとして標準データベースを使用し、レプリケーション運用をする時は、5 × リポジトリ数です。 リポジトリのデータベース運用に必要なシステム資源のチューニング リポジトリのデータベースに標準データベースを使用する場合には、さらにシステム資源のチューニングが必要です。“システムパラメ タ(標準データベースの運用に必要なシステム資源)”を参照して、システムパラメタを変更してください。 リポジトリのデータベースとしてRDBを使用する場合には、さらに、RDBの運用に必要なシステム資源をチューニングしてください。以 下の項目を参照して、システムパラメタを変更してください。 ・ “システムパラメタ(Symfoware Serverの運用に必要なシステム資源)” ・ “システムパラメタ(Oracleデータベースの運用に必要なシステム資源)” ■システムパラメタ(標準データベースの運用に必要なシステム資源) 標準データベースを運用するには、omsアカウント環境の最大ファイルディスクリプタ数のハードリミットが、256以上65,536以下となる ように設定してください。 最大ファイルディスクリプタ数のハードリミットを変更するには、以下を変更してください。 ・ システムパラメタを変更してください。システムパラメタの変更方法については、“■システムパラメタについて”を参照してください。 ・ リソース制限を変更してください。システムパラメタの変更方法については、“◆リソース制限 ”を参照してください。 ファイルディスクリプタ パラメタ 資源制御 種類 rlim_fd_ma x process.maxfile-descriptor 設定値 必要数 256以上、65,536以下 資源制御で最大ファイルディスクリプタ数のソフトリミットの設定を行った場合、ハードリミットが「無制限」に拡張されます。ソフトリミット を設定した場合は、合わせてハードリミットも設定してください。 - 86 - 例) projmod -s -K 'process.max-file-descriptor=(basic,1024,deny),(priv,65536,deny)' default なお、システム全体の最大ファイルディスクリプタ数のハードリミットを、65,536より大きな値に設定したい場合、資源制御を使用してく ださい。「oms」プロジェクトを個別に設定してください。 例) projmod -s -K 'process.max-file-descriptor=(basic,1024,deny),(priv,524288,deny)' default projmod -s -K 'process.max-file-descriptor=(basic,1024,deny),(priv,65536,deny)' oms システムパラメタの場合は、システム全体に影響するため、設定値は、256以上65,5536以下で設定してください。 ファイルディスクリプタ パラメタ 種類 nofile hard 必要数 256以上、65,536以下 システム全体の最大ファイルディスクリプタ数のハードリミットを、65,536より大きな値に設定したい場合、omsユーザを個別に設定して ください。 例) * oms hard hard nofile nofile 524288 65536 ■システムパラメタ(Symfoware Serverの運用に必要なシステム資源) Symfoware Serverの運用に必要なシステムパラメタの設定は、Symfoware Serverをインストールしたマシンで変更してください。 ・ Symfoware ServerをSolarisにインストールした場合 ・ Symfoware ServerをLinuxにインストールした場合 ここで示す各システムパラメタの必要数の値は、Symfoware Serverのシステム用動作環境ファイル、またはRDB構成パラメタファイル のパラメタに以下の値が設定されていることを前提としています。これらのパラメタの設定値を変更する場合は、Symfoware Serverのマ ニュアルを参照して各システムパラメタの必要数を算出し直してください。 パラメタ 設定値 ローカル接続で使用するメモリ量 (COMMUNICATION_BUFFER) 32Kバイト ローカル接続数 (MAX_CONNECT_SYS) (注1) 256 デーモン多重度(RDBCNTNUM) 712 共有メモリ量(RDBEXTMEM) 13,208Kバイト 注1) ローカル接続数は、Interstage ディレクトリサービスの使用時に必要となる、リポジトリからRDBへの最大コネクション数の合計に、他 のアプリケーション等が使用するコネクション数を加えた値を算出してください。求めた値が、この設定値(256)を超える場合には、 各システムパラメタの必要数を算出し直してください。 リポジトリの最大コネクション数の詳細は、“ディレクトリサービス運用ガイド”の“データベース共用”-“最大コネクション数の設定”を 参照してください。 レプリケーション運用をするときは、Linkexpressの運用に必要なシステム資源の設定をしてください。設定内容は、Linkexpressのイン ストールガイドを参照してください。 Solarisの場合は、「Linkexpressへの同時転送依頼数」を「1」、「Linkexpress同時ファイル転送多重度」を「4」として計算してください。 また、システムパラメタ「shmmin」(共用メモリセグメントの最小サイズ)は設定しないでください。 - 87 - Symfoware ServerをSolarisにインストールした場合 共用メモリ パラメタ (注) 資源制御 種類 必要数 shmmax project.maxshm-memory 設定値 13,524,992 以上 shmmni project.maxshm-ids 加算値 10 注) パラメタ欄には、“shmsys:shminfo_xxxxxx”の“xxxxxx”を記載しています。 セマフォ パラメタ 資源制御 種類 必要数 semmni project.maxsem-ids 加算値 300 semmns (注) - 加算値 1,112 semmnu (注) - 加算値 64 semmsl process.maxsem-nsems 設定値 48 以上 注) Solaris 9でのみ有効です。 セマフォ パラメタ (注 1) 資源制御 種類 必要数 semmni project.maxsem-ids 加算値 300 semmns (注2) - 加算値 1,112 semmnu (注2) - 加算値 64 semmsl process.maxsem-nsems 設定値 48 以上 注1) パラメタ欄には、“semsys:seminfo_xxxxxx”の“xxxxxx”を記載しています。 注2) Solaris 9でのみ有効です。 メッセージキュー - 88 - パラメタ 資源制御 種類 必要数 msgmax (注) - 設定値 128 以上 msgmnb process.maxmsg-qbytes 設定値 4,096 以上 msgmni project.maxmsg-ids 加算値 2 msgtql process.maxmsg-messages 設定値 [Solaris 10以降の場合] 64以上 - 加算値 [Solaris 9の場合] 64 注) Solaris 9でのみ有効です。 メッセージキュー パラメタ (注 1) 資源制御 種類 必要数 msgmax (注2) - 設定値 128 以上 msgmnb process.maxmsg-qbytes 設定値 4,096 以上 msgmni project.maxmsg-ids 加算値 2 msgtql process.maxmsg-messages 加算値 64 注1) パラメタ欄には、“msgsys:msginfo_xxxxxx”の“xxxxxx”を記載しています。 注2) Solaris 9でのみ有効です。 Symfoware ServerをLinuxにインストールした場合 共用メモリ パラメタ 種類 必要数 kernel.shmmax 設定値 13,524,992 以上 kernel.shmmni 加算値 10 セマフォ パラメタ 種類 必要数 para1 設定値 48 以上 para2 加算値 1,112 すでに設定されている値 para3 para4 加算値 300 - 89 - メッセージキュー パラメタ 種類 必要数 kernel.msgmax 設定値 128 以上 kernel.msgmnb 設定値 4,096 以上 kernel.msgmni 加算値 2 ■システムパラメタ(Oracleデータベースの運用に必要なシステム資源) Oracleデータベースの運用に必要なシステムパラメタの設定は、Oracleデータベースをインストールしたマシンで変更してください。 ・ OracleデータベースをSolarisにインストールした場合 ・ OracleデータベースをLinuxにインストールした場合 レプリケーション運用をするときは、レプリケーションの運用に必要なシステム資源の設定をしてください。設定内容は、Oracleデータ ベースのマニュアルを参照してください。 OracleデータベースをSolarisにインストールした場合 共用メモリ パラメタ (注) 資源制御 種類 必要数 shmmax project.maxshm-memory 設定値 4,294,967,295 以上 shmmni project.maxshm-ids 設定値 100 以上 注) パラメタ欄には、“shmsys:shminfo_xxxxxx”の“xxxxxx”を記載しています。 セマフォ パラメタ 資源制御 種類 必要数 semmni project.maxsem-ids 設定値 100 以上 semmns (注) - 設定値 1,024 以上 semmsl project.maxsem-nsems 設定値 256 以上 semvmx (注) - 設定値 32,767 以上 注) Solaris 9でのみ有効です。 セマフォ - 90 - パラメタ (注 1) 資源制御 種類 必要数 semmni project.maxsem-ids 設定値 100 以上 semmns (注2) - 設定値 1,024 以上 semmsl project.maxsem-nsems 設定値 256 以上 semvmx (注2) - 設定値 32,767 以上 注1) パラメタ欄には、“semsys:seminfo_xxxxxx”の“xxxxxx”を記載しています。 注2) Solaris 9でのみ有効です。 OracleデータベースをLinuxにインストールした場合 共用メモリ パラメタ 種類 必要数 kernel.shmall 設定値 2,097,152 以上 kernel.shmmax 設定値 物理メモリのサイズ(バイト)の1/2 以上 kernel.shmmni 設定値 4,096 以上 セマフォ パラメタ 種類 必要数 para1 設定値 250 以上 para2 設定値 32,000 以上 para3 設定値 100 以上 para4 設定値 128 以上 ファイルシステム パラメタ 種類 fs.file-max (最大ファイル・ハンドル数) 設定値 必要数 65,536 以上 ネットワーク パラメタ 種類 必要数 net.ipv4.ip_local_port_range (ポート番号の範囲) 設定値 最小:1,024 最大:65,000 net.core.rmem_default (受信用ウィンドウ・サイズの デフォルト値) 設定値 1,048,576 以上 - 91 - パラメタ 種類 必要数 net.core.rmem_max (受信用ウィンドウ・サイズの 最大値) 設定値 1,048,576 以上 net.core.wmem_default (送信用ウィンドウ・サイズの デフォルト値) 設定値 262,144 以上 net.core.wmem_max (送信用ウィンドウ・サイズの 最大値) 設定値 262,144 以上 3.1.10 Interstage管理コンソールのシステム資源の設定 Interstage管理コンソールを用いたシステムの運用時には、システム資源を拡張する必要があります。ここでは、以下について説明しま す。 ・ システムパラメタ Interstage管理コンソールを使用する場合は、Interstage統合コマンドのシステム資源も拡張する必要があります。“3.1.11 Interstage統 合コマンドのシステム資源の設定”を参照し、必要な値を加算してください。 ■システムパラメタ Interstage管理コンソールを運用するためのサービスが使用するセマフォのシステムパラメタのチューニングについて説明します。 システムパラメタの変更方法や、各パラメタの意味については、“■システムパラメタについて”を参照してください。 セマフォ パラメタ 種類 必要数 para1 設定値 1以上 para2 加算値 1 para3 設定値 1以上 para4 加算値 1 3.1.11 Interstage統合コマンドのシステム資源の設定 Java EE、マルチ言語サービス、J2EE互換機能のいずれかを利用する場合は、各機能で追加したシステム資源に加えて、Interstage統 合コマンドで使用するシステム資源を拡張する必要があります。ここでは、以下について説明します。 ・ システムパラメタ ■システムパラメタ Interstage統合コマンドで使用する共用メモリ、セマフォ、メッセージキューのシステムパラメタのチューニングについて説明します。 システムパラメタの変更方法や、各パラメタの意味については、“■システムパラメタについて”を参照してください。 なお、資源制御によるIPC資源のパラメタは、Solaris 10以降の場合に設定可能です。 - 92 - 共用メモリ パラメタ 資源制御 種類 必要数 shmmax - 設定値 1106440 以上 - project.maxshm-memory 加算値 2015552 以上 shmmni project.maxshm-ids 加算値 22 (注) 注) マルチシステム機能を使用する場合は、拡張システム数を積算した値を加算してください。 マルチシステム機能は、Interstage Application Server Enterprise Editionで使用できます。 共用メモリ パラメタ 種類 必要数 設定値 kernel.shmmax 12503496 以上 13208308 以上 加算値 kernel.shmmni 19 セマフォ パラメタ 資源制御 種類 必要数 semmni project.maxsem-ids 加算値 2 (注2) semmns (注1) - 加算値 2 (注2) semmsl process.maxsem-nsems 設定値 12 以上 (注2) semopm process.maxsem-ops 設定値 3 以上 注1) Solaris 9でのみ有効です。 注2) マルチシステム機能を使用する場合は、拡張システム数を積算した値を加算してください。 マルチシステム機能は、Interstage Application Server Enterprise Editionで使用できます。 セマフォ パラメタ 種類 必要数 para1 設定値 12 以上 para2 加算値 2 para3 設定値 3 以上 - 93 - パラメタ 種類 加算値 para4 必要数 2 メッセージキュー パラメタ 資源制御 種類 必要数 msgmax (注1) - 設定値 528 以上 msgmnb process.maxmsg-qbytes 設定値 4572 + (528 × 同時実行コマンド数) (注2) msgmni project.maxmsg-ids 加算値 12 (注3) msgtql process.maxmsg-messages 設定値 [Solaris 10以降の場合] 15 + 同時実行コマンド数 以上(注2)(注3) - 加算値 [Solaris 9の場合] 15 + 同時実行コマンド数 (注2)(注3) 注1) Solaris 9でのみ有効です。 注2) 同時実行コマンド数とは、Interstage統合コマンドを同時に実行した数のことです。 また、Systemwalker Operation Manager、Interstage運用APIを使用してワークユニットの起動/停止、オブジェクト閉塞/閉塞解除 を行う場合は、同時に操作する回数が同時実行コマンド数となります。 注3) マルチシステム機能を使用する場合は、拡張システム数を積算した値を加算してください。 マルチシステム機能は、Interstage Application Server Enterprise Editionで使用できます。 メッセージキュー パラメタ 種類 必要数 kernel.msgmax 設定値 528 以上 kernel.msgmnb 設定値 4572 + (528 × 同時実行コマンド数) (注) kernel.msgmni 加算値 12 注) 同時実行コマンド数とは、Interstage統合コマンドを同時に実行した数のことです。 また、Systemwalker Operation Manager、Interstage運用APIを使用してワークユニットの起動/停止、オブジェクト閉塞/閉塞解除 を行う場合は、同時に操作する回数が同時実行コマンド数となります。 3.1.12 Webサーバコネクタのシステム資源の設定 Webサーバコネクタを使用する場合には、システム資源を拡張する必要があります。ここでは、以下について説明します。 ・ システムパラメタ - Webサーバコネクタを使用する場合 - Webサーバコネクタの故障監視機能を使用する場合 - 94 - ■システムパラメタ Webサーバコネクタを使用する際には、以下のシステムパラメタのチューニングを行ってください。 Webサーバコネクタの故障監視機能を使用する場合は、Webサーバコネクタで使用する資源にWebサーバコネクタの故障監視機能 で使用する資源量を加算してください。 システムパラメタの変更方法や、各パラメタの意味については、“■システムパラメタについて”を参照してください。 なお、資源制御によるIPC資源のパラメタの設定は、Solaris 10以降の場合に可能です。 Webサーバコネクタ Webサーバコネクタを使用する場合に必要となるシステム資源について、以下に示します。 セマフォ パラメタ semmni 資源制御 project.maxsem-ids 種類 加算値 必要数 以下をWebサーバごとに求めた合算値 (注2)(注3) ・ ((IJServerワークユニット数の合計値 + 各IJServerワークユニットのプロセス多重度の合計値 + 2)×2) +4 semmns (注1) - 加算値 以下をWebサーバごとに求めた合算値 (注3) ・ ((IJServerワークユニット数の合計値 + 各IJServerワークユニットのプロセス多重度の合計値 + 2)×2) +4 semmnu (注1) - 加算値 [Interstage HTTP Serverを使用する場合] 以下をWebサーバごとに求めた合算値 (注3) ・ (((IJServerワークユニット数の合計値 + 各IJServerワークユニットのプロセス多重度の合計値 + 2)×2) + 4) × Interstage HTTP Serverが作成する最大プロセス数(httpd.conf のMaxClients値) [Sun Java System Web Serverを使用する場合] ・ (((IJServerワークユニット数の合計値 + 各IJServerワークユニットのプロセス多重度の合計値 + 2)×2) + 4) × Sun Java System Web Server が 作 成 す る 最 大 プ ロ セ ス 数 (magnus.confのMaxProcs値) semmsl process.maxsem-nsems 設定値 1 以上 semopm process.maxsem-ops 設定値 2 以上 semume (注1) - 加算値 ((IJServerワークユニット数の合計値 + 各IJServerワークユニットのプロセス多重度の合計値 + 2)×2) + 4 semvmx (注1) - 設定値 32,767 以上 注1) Solaris 9でのみ有効です。 - 95 - 注2) Solaris 10以降の場合のチューニングの例を以下に示します。 条件 IJServerワークユニット Webサーバ WU001 プロセス多重度:3 WU002 プロセス多重度:3 WU003 プロセス多重度:3 web001 接続先:WU001、WU002 web002 接続先:WU003 - semmni web001の必要数 = ((2(IJServerワークユニット数の合計値) + 6(各IJServerワークユニットのプロセス多重度の合計値) + 2)×2) + 4 = 24 web002の必要数 = ((1(IJServerワークユニット数の合計値) + 3(各IJServerワークユニットのプロセス多重度の合計値) + 2)×2) + 4 = 16 semmni = 24(web001の必要数) + 16(web002の必要数) = 40 注3) Solaris 9の場合のチューニングの例を以下に示します。 条件 IJServerワークユニット Webサーバ WU001 プロセス多重度:3 WU002 プロセス多重度:3 WU003 プロセス多重度:3 web001 最大プロセス多重数:50 接続先:WU001、WU002 web002 最大プロセス多重数:50 接続先:WU003 - semmni web001の必要数 = ((2(IJServerワークユニット数の合計値) + 6(各IJServerワークユニットのプロセス多重度の合計値) + 2)×2) + 4 = 24 web002の必要数 = ((1(IJServerワークユニット数の合計値) + 3(各IJServerワークユニットのプロセス多重度の合計値) + 2)×2) + 4 = 16 semmni = 24(web001の必要数) + 16(web002の必要数) = 40 - semmns semmniと同様に計算してください。 - semmnu web001の必要数 = (((2(IJServerワークユニット数の合計値) + 6(各IJServerワークユニットのプロセス多重度の合計値) + 2)×2) + 4) × 50 - 96 - = 1200 web002の必要数 = (((1(IJServerワークユニット数の合計値) + 3(各IJServerワークユニットのプロセス多重度の合計値) + 2)×2) + 4) × 50 = 800 semmnu = 1200(web001の必要数) + 800(web002の必要数) = 2000 セマフォ パラメタ 種類 必要数 para1 設定値 1以上 para2 加算値 以下をWebサーバごとに求めた合算値 (注) ・ ((IJServerワークユニット数の合計値 + 各IJServerワークユニットのプロセス多重度の合計値 + 2)×2) +4 para3 設定値 2 以上 para4 加算値 以下をWebサーバごとに求めた合算値 (注) ・ ((IJServerワークユニット数の合計値 + 各IJServerワークユニットのプロセス多重度の合計値 + 2)×2) +4 注) チューニングの例を以下に示します。 条件 IJServerワークユニット Webサーバ WU001 プロセス多重度:3 WU002 プロセス多重度:3 WU003 プロセス多重度:3 web001 接続先:WU001、WU002 web002 接続先:WU003 - para2 web001の必要数 = ((2(IJServerワークユニット数の合計値) + 6(各IJServerワークユニットのプロセス多重度の合計値) + 2)×2) + 4 = 24 web002の必要数 = ((1(IJServerワークユニット数の合計値) + 3(各IJServerワークユニットのプロセス多重度の合計値) + 2)×2) + 4 = 16 para2 = 24(web001の必要数) + 16(web002の必要数) = 40 - para4 para2と同様に計算してください。 Webサーバコネクタの故障監視機能 Webサーバコネクタの故障監視機能を使用する場合に追加となるシステム資源について、以下に示します。 共用メモリ - 97 - パラメタ 資源制御 種類 必要数 shmmax - 設定値 6,720,012 以上 - project.maxshm-memory 加算値 6,720,012 × (Webサーバ数 + 1) shmmni project.maxshm-ids 加算値 Webサーバ数 + 1 共用メモリ パラメタ 種類 必要数 kernel.shmmax 設定値 6,720,012 以上 kernel.shmmni 加算値 Webサーバ数 + 1 セマフォ パラメタ 資源制御 種類 必要数 semmni project.maxsem-ids 加算値 3 semmns (注) - 加算値 3 semmnu (注) - 加算値 2 semume (注) - 加算値 2 注) Solaris 9でのみ有効です。 セマフォ パラメタ 種類 必要数 para1 設定値 2 以上 para2 加算値 3 para3 設定値 2 以上 para4 加算値 3 3.1.13 Java EEのシステム資源の設定 Interstage Java EEの運用に必要なシステム資源について説明します。 Webサーバコネクタのシステム資源の設定 WebサーバとIJServerクラスタを連携させる場合は、「チューニングガイド」の「Webサーバコネクタのシステム資源の設定」の内容にした がってシステムパラメタを設定してください。その際、「IJServerワークユニット」は「IJServerクラスタ」に読み替えて設定してください。 3.2 マルチサーバ管理機能を使用する時に必要なシステム資源 Interstageのマルチサーバ管理機能を使用する時に必要となるシステム資源について説明します。 なお、システムパラメタを算出するためのExcelファイルがマニュアルCDの“ApplicationServer\tuning”配下のサブフォルダに“ISASIPCtuning.xlsx”として格納されています。Microsoft(R) Excel 2007もしくは以降のバージョンのMicrosoft(R) Excelをお持ちの場合は - 98 - “ISAS-IPCtuning.xlsx”を使用してシステムパラメタを算出することが可能です。使用方法などの詳細については、当該Excelファイル 内の説明記事を参照してください。 ■管理サーバ機能を使用する場合 管理サーバ機能を使用する場合は、“Interstage ディレクトリサービス”のシステム資源が必要です。 管理サーバ機能を使用する場合に必要なシステム資源量は、“3.1 サーバ機能運用時に必要なシステム資源”の同一サービスの説 明を参照してください。 ■管理対象サーバとして運用する場合 管理対象サーバとして運用する場合は、使用する機能に関するシステム資源が必要です。必要量については、“3.1 サーバ機能運 用時に必要なシステム資源”の同一サービスの説明を参照してください。 ■共存サーバとして運用する場合 共存サーバでは管理サーバ機能とInterstageのサーバ機能(管理対象サーバ)が同一マシン上で動作しています。共存サーバ運用 時に必要なシステム資源については、“■管理サーバ機能を使用する場合”と“■管理対象サーバとして運用する場合”を参照して使 用するサービスを列挙してください。各サービスが必要とするシステム資源は、“3.1 サーバ機能運用時に必要なシステム資源”の同一 サービスの説明を参照してください。 管理サーバ機能とInterstageのサーバ機能で同一サービスを使用する場合、そのサービスの必要資源量を2倍する必要はありませ ん。 3.3 性能監視ツール使用時に必要なシステム資源 性能監視ツールで性能監視環境として使用する資源の見積もり方法を説明します。 3.3.1 システム構成情報の見積もり方法 (Solarisの場合) システム構成情報は、以下の見積もり式を参考に見積もり、見積もり値以上の値を設定してください。 セマフォ システム構成情報 資源制御 種類 見積もり semsys: seminfo_semmnu (注1) - 加算値 セマフォ数 (*) semsys: seminfo_semmni project.maxsem-ids 加算値 1 semsys: seminfo_semmns (注1) - 加算値 セマフォ数 (*) semsys: seminfo_semmsl process.maxsem-nsems 設定値 セマフォ数 (*) 以上の値 *) セマフォ数 = 性能監視ツール起動時に指定する共有メモリ量(MB) × 10 + 2 ただし、最大52 - 99 - 注1) Solaris 10以降の場合、指定する必要はありません。 共有メモリ システム構成情報 資源制御 種類 見積もり shmsys: shminfo_shmmax project.maxshm-memory 設定値 “3.3.3 共有メモリ量の見積もり方法”を参照 shmsys: shminfo_shmmni project.maxshm-ids 加算値 1 3.3.2 システム構成情報の見積もり方法 (Linuxの場合) システム構成情報は、以下の見積もり式を参考に見積もり、見積もり値以上の値を設定してください。 セマフォ kernel.sem = para1 para2 para3 para4 システム構成情報 種類 見積もり para1 設定値 セマフォ数 (*) 以上の値 para2 加算値 セマフォ数 (*) para3 設定値 セマフォ数 (*) 以上の値 para4 加算値 1 *) セマフォ数 = 性能監視ツール起動時に指定する共有メモリ量(MB) × 10 + 2 ただし、最大52 共有メモリ システム構成情報 種類 見積もり kernel.shmmax 設定値 “3.3.3 共有メモリ量の見積もり方法”を参照 kernel.shmmni 加算値 1 3.3.3 共有メモリ量の見積もり方法 共有メモリ量は、以下の見積もり式を参考に必要な共有メモリ量を求め、その共有メモリ量をメガバイト単位に切り上げた値で見積もっ てください。 変更方法の詳細については、“■システムパラメタについて”を参照してください。 共有メモリ量の見積もり(単位:バイト) 1. 性能監視ツールの性能監視対象とする全オブジェクト(アプリケーション)に対して、オブジェクト(アプリケーション)ごとに必要な 共有メモリ量を、以下の方法で求めてください。 a. 各オブジェクト(アプリケーション)に定義されているプロセス多重度を確認してください。 b. 各オブジェクト(アプリケーション)に定義されているスレッド多重度を確認してください。 - 100 - c. 各オブジェクト(アプリケーション)に登録されているオペレーション数を確認してください。 オペレーション数はCORBAアプリケーションおよびトランザクションアプリケーションの場合、IDL定義ファイルから求めて ください。EJBアプリケーションの場合、remoteインターフェースとHomeインターフェースのソースを確認し、publicであるメ ソッドの数を数えて、これに、継承されるインターフェースを加算して求めてください。 d. 以下の計算で、オブジェクト(アプリケーション)ごとに必要な共有メモリ量を求めてください。 - オペレーション数の平均が3以下の場合 (プロセス多重度 × スレッド多重度 × 1536) + 400 4600 × プロセス多重度 × スレッド多重度+ 276288 - オペレーション数の平均が3よりも多い場合 (オペレーション数 × プロセス多重度 × スレッド多重度 × 546) + 400 (4600 × プロセス多重度 × スレッド多重度 × オペレーション数 ÷ 3) + 276288 2. 以下の計算で、必要な共有メモリ量を求めてください。 オブジェクトごとに必要な共有メモリ量の合計 + 261188 3. 共有メモリ量を、以下の計算で求めてください。 必要な共有メモリ量 ÷ 1048576 なお、上記の計算で端数(小数点以下)が発生した場合は、切り上げてください。 インターバル時間内に性能監視対象のオブジェクトを再起動する場合には、a.~d.で求めた「オブジェクトごとに必要な共有メモリ量 の合計」について、再起動回数分、あらかじめ積算してください。 3.4 TCP/IPパラメタのチューニング TCP/IPパラメタのチューニング方法を説明します。 ■チューニング方法 レジストリエディタを使用して以下のレジストリ情報を追加した後、システムを再起動してください。 ・ レジストリキー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters - 名前:TcpTimedWaitDelay - 種類:REG_DWORD - 推奨値:1E(30秒) ・ レジストリキー: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters - 名前:MaxUserPort - 種類:REG_DWORD - 推奨値:65534(10進数) 短時間に数多くのクライアントが接続する場合、TCP/IPのソケット不足になりWebブラウザに「Internal Server Error」が表示される場合 があります。 上記情報を追加することで、使用可能なソケット数を増やし、また、使用済みのソケットを早く開放するようになります。 - 101 - ・ レジストリ情報がない場合は、新しく作成してください。 ・ TCP/IPパラメタをチューニングする際は、上記の2つのレジストリキーの値を変更してください。 ・ レジストリの編集操作を誤ると、システムが不安定になる可能性がありますので、操作の際には、指定されたキー以外は一切変更 を加えないよう注意してください。また、操作前には必ずレジストリのバックアップを行ってください。 ・ TCP/IPパラメタのチューニングは、すべてのTCPに対して影響を与えるため、システム管理者に相談してから実施してください。 ■チューニング方法 nddコマンドを使用してtcp_time_wait_intervalを60秒にしてください。OSのデフォルト値は60秒のため、値を変更していなければ設定 する必要はありません。 永続的に設定を有効する場合には、RCプロシジャ(/etc/rc2.d)に登録が必要です。 RCプロシジャの例を以下に示します。 #!/bin/sh ndd -set /dev/tcp tcp_time_wait_interval 60000 短時間に数多くのクライアントが接続する場合、TCP/IPのソケット不足になりWebブラウザに「Internal Server Error」が表示される場合 があります。 上記情報を追加することで、使用可能なソケット数を増やし、また、使用済みのソケットを早く開放するようになります。 ・ TCP/IPパラメタのチューニングは、すべてのTCPに対して影響を与えるため、システム管理者に相談してから実施してください。 3.5 IPC資源のカスタマイズ ここでは、その他に必要となるカスタマイズ項目について説明します。 ■System V IPC資源のIPCキー値のカスタマイズについて Interstageでは、Interstageを構成するプロセス間通信のために、OSが提供するSystem V IPC資源(メッセージキュー、セマフォ、共有 メモリ)を使用しています。このIPC資源は、作成時に指定する値(IPCキー値)により、システムで一意に識別されます。 IPCキー値は、システムで一意でなければなりませんが、任意の値を使用することが可能なため、ほかのIPC資源を使用する製品お よびアプリケーションプログラムと重複することがあります。 IPCキー値の重複が発生した場合、Interstageでは、以下のようなメッセージを出力して、IPCキー値の重複を通知します。 IPCキー値の重複を検出したときにコンポーネントトランザクションサービスが出力するメッセージの例 ・ TD: エラー: td11038:必要なIPC資源が使用中のため獲得できませんでした(key=%x path=%s) この場合、IPCキー値に対応したIPC資源を使用しているInterstageのサービスの各機能は使用できません。 このような状態に対処するため、Interstageでは以下に示す方法で、Interstageが使用するIPCキー値をカスタマイズすることが可能で す。IPCキー値の重複発生を通知するメッセージが出力された場合は、この対処により運用することができます。 - 102 - ■概要 IPCキー値は4バイト(32ビット)で構成されますが、そのうちの下位12ビット(16進3桁)に任意の値を定義することで、ほかの製品が使用 するIPCキー値と重複しないようにします。なお、上位残りの20ビットは、Interstageが決定します。 ■IPCキー値の定義方法 以下のIPCキー値定義ファイルを新規に作成し、16進3桁でIPCキー値の下位12ビットを指定します。 MessageQueueDirectorを除くサービスは、共通定義ファイルの指定が有効です。MessageQueueDirectorは固有の定義ファイルの指 定が有効です。 共通定義ファイル: /var/opt/FJSVisas/system/システム名/FJSVisas/etc/ipc_key /var/opt/FJSVisas/system/default/FJSVisas/etc/ipc_key MQDシステムの定義ファイル: /opt/FJSVmqd/mqd/MQDシステム名/ipc_key ・ 定義ファイルの内容が16進3桁以外の場合は、IPCキー値の指定がない場合と同様に動作します。 ・ “MQDシステム名”については、“MessageQueueDirector 説明書”を参照してください。 ・ “システム名”は、マルチシステム機能のシステム名です。マルチシステム機能を使用していない場合は、“default”となります。 ・ クラスタシステムを使用する場合、MQDシステム用の定義ファイルは、mqd環境定義ファイル中の以下で指定したディレクトリの中 に定義ファイル(ipc_key)を作成してください。 - [Cluster] SystemDirectory = MQDのクラスタサービスが使用するディレクトリの名前 FFF この定義例の場合、Interstageが使用する上位20ビットを0x01280とすると、IPCキー値は、16進表示で、以下のようになります。 0x01280FFF ・ IPCキー値の定義は、Interstageを全強制停止モードで停止し、さらにInterstage JMXサービスを停止してから行ってください。 Interstageの運用中に本定義を変更しないでください。 ・ IPCキー値の定義は、システム間で重複することのないように定義してください。 - 103 - 第4章 ワークユニットのチューニング ワークユニットには、様々な機能があり、これらをチューニングすることで、最適な状態での運用を行うことが可能となります。ここでは、 ワークユニットのチューニングについて説明します。 4.1 ワークユニット数、オブジェクト数、プロセス数のチューニング 起動できるワークユニット数、オブジェクト数およびプロセス数は以下の条件式を満たす必要があります。 (ワークユニット数×2)+(オブジェクト総数×m)+(プロセス総数×n)+1 ≦ 2010 この条件式を超えてワークユニットを起動する場合は、大規模システム用環境定義ファイルをコピーする必要があります。なお、Linux for Intel64版では、標準で大規模システム用環境定義ファイルが使用されています。 大規模システム用環境定義ファイルを使用した場合、以下の条件式まで起動できるワークユニット数、オブジェクト数およびプロセス 数が拡張されます。 (ワークユニット数×2)+(オブジェクト総数×m)+(プロセス総数×n)+1 ≦ 6030 条件式のオブジェクト総数とは、ワークユニット定義の[Application Program]セクションの総数です。 IJServerの場合、各ワークユニットのオブジェクト数は以下となります。 オブジェクト数 IJServerタイプ WebアプリケーションとEJBアプリケーションを同一JavaVMで運用 1 Webアプリケーションのみ運用 EJBアプリケーションのみ運用 WebアプリケーションとEJBアプリケーションを別JavaVMで運用 2 条件式のm、nについては、m=1、n=2を基準値とし、以下に該当する場合は、変更してください。 ・ islistwuおよびislistobjコマンドを使用する場合 m=2 ・ islistaplprocコマンドを使用する場合 n=3 ・ Interstage管理コンソールを使用する場合 m=2、n=3 大規模システム用環境定義ファイル コピー元 コピー先 Interstageインストール先フォルダ\extp \etc\sys\td\extp.ini.large Interstageインストール先フォルダ\td\var \td001\sys\etc\extp.ini /opt/FSUNextp/etc/sys/td/extp.ini.large デフォルトシステムの場合 /var/opt/FJSVisas/system/default/FSUNextp/ td001/sys/etc/extp.ini 拡張システムの場合 /var/opt/FJSVisas/system/[sysname]/ FSUNextp/[sysname]/sys/etc/extp.ini ([sysname]は、拡張システム名) /opt/FJSVextp/etc/sys/td/extp.ini.large /var/opt/FJSVisas/system/default/FJSVextp/ td001/sys/etc/extp.ini 通常システム用環境定義ファイル 通常のシステム定義に復元する場合は、以下の通常システム用環境定義ファイルをコピーしてください。 - 104 - コピー元 コピー先 Interstageインストール先フォルダ\extp \etc\sys\td\extp.ini Interstageインストール先フォルダ\td\var \td001\sys\etc\extp.ini /opt/FSUNextp/etc/sys/td/extp.ini デフォルトシステムの場合 /var/opt/FJSVisas/system/default/FSUNextp/ td001/sys/etc/extp.ini 拡張システムの場合 /var/opt/FJSVisas/system/[sysname]/ FSUNextp/[sysname]/sys/etc/extp.ini ([sysname]は、拡張システム名) /opt/FJSVextp/etc/sys/td/extp.ini /var/opt/FJSVisas/system/default/FJSVextp/ td001/sys/etc/extp.ini ・ 大規模システム用環境定義ファイルを使用した場合、共有メモリ使用量が14メガバイト増加します。 ・ 環境定義ファイルをコピーする場合は、Interstageを停止してください。 ・ コピー先の環境定義ファイルを誤って削除した場合、システム規模に応じて環境定義ファイルを再度コピーしてください。 4.2 プロセス強制停止時間のチューニング プロセス強制停止時間は、ワークユニット停止においてアプリケーションプロセスの停止処理がハングアップしていると判断する時間です。 プロセス強制停止時間をチューニングする場合は、アプリケーションプロセス停止処理に必要な時間を考慮してください。以下の条 件式を参考にしてください。 ■条件式 プロセス強制停止時間(秒) > アプリケーションプロセス停止処理時間(秒) アプリケーションプロセス停止処理時間: 以下の場合において、アプリケーションプロセス停止処理時間を考慮してください。その他の場合は、デフォルト値で問題ありません。 ・ CORBAワークユニットの場合 サーバアプリケーションの活性化後の動作モードに“SYNC_END(サーバアプリケーションを活性化しても、活性化メソッドは復帰 しません。)”を設定し、かつ、活性化メソッドの後に後処理を記述している場合、後処理の実行に必要な時間 サーバアプリケーションの活性化後の動作モードについては、“リファレンスマニュアル(コマンド編) OD_impl_inst(「CORBAアプリ ケーション情報定義ファイルでの登録」の「mode」)”を参照してください。 ・ IJServerワークユニットの場合 停止時実行クラスを登録している場合、停止時実行クラスの実行に必要な時間 停止時実行クラスについては、“J2EE ユーザーズガイド(旧版互換)(「J2EEアプリケーションの設計」「J2EEアプリケーションが運用 される環境(IJServer) 」の「起動/停止の実行クラス」)”を参照してください。 ワークユニットを停止する時は、お客様の業務が終了していることを想定しています。そのため、デフォルト値には、ハングアップしてい ると判断して差し支えのない値として、180秒を設定しています。 業務運用中にワークユニットを停止することがある場合は、アプリケーション処理時間を考慮する必要があります。以下の条件式を参 考にしてください。 プロセス強制停止時間はアプリケーションの処理時間とプロセスの停止処理時間の合計を上回るように設定してください。 プロセス強制停止時間(秒) > アプリケーション処理時間(秒) + アプリケーションプロセス停止処理時間(秒) - 105 - アプリケーション処理時間: アプリケーション処理中にワークユニットを停止するような運用を実施する場合、そのアプリケーションの処理が正常に完了するために 必要な、最も長い時間を設定してください。 ワークユニット同期停止は、アプリケーション処理中に実行すると、処理中の要求が完了するのを待ってからプロセスを停止します。 アプリケーション処理時間の考慮がされていないと、ワークユニット同期停止において、処理中の要求が途中で強制終了されます。 注)IJServerワークユニットの通常停止は同期停止と同じ動きとなります。 アプリケーションプロセス停止処理時間: ■条件式のアプリケーションプロセス停止処理時間を参照してください。 アプリケーション処理時間が120秒で、アプリケーションプロセス停止処理時間が5秒の場合、プロセス強制停止時間は、126秒以上を 設定してください。 4.3 CORBAワークユニットのチューニング CORBAワークユニットは、以下の製品で使用可能です。 ・ Interstage Application Server Enterprise Edition ワークユニットのチューニングについては、以下のマニュアルを参照してください。 ・ “OLTPサーバ運用ガイド”の“ワークユニットの作成” ・ “OLTPサーバ運用ガイド”の“CORBAワークユニット” 4.4 IJServerワークユニットのチューニング IJServerワークユニットについては、以下を参照してください。 ・ “J2EE ユーザーズガイド(旧版互換)”-“IJServerのチューニング” 4.5 トランザクションアプリケーションのチューニング トランザクションワークユニットは、以下の製品で使用可能です。 ・ Interstage Application Server Enterprise Edition トランザクションワークユニットについては、以下のマニュアルを参照してください。 ・ “OLTPサーバ運用ガイド”の“ワークユニットの作成” ・ “OLTPサーバ運用ガイド”の“トランザクションアプリケーションのワークユニット” 4.6 ラッパーワークユニットのチューニング ラッパーワークユニットは、以下の製品で使用可能です。 ・ Interstage Application Server Enterprise Edition ラッパーオブジェクトワークユニットについては、以下のマニュアルを参照してください。 ・ “OLTPサーバ運用ガイド”の“ワークユニットの作成” ・ “OLTPサーバ運用ガイド”の“ラッパーオブジェクトのワークユニット” 4.7 ユーティリティワークユニットのチューニング ユーティリティワークユニットは、以下の製品が使用可能です。 ・ Interstage Application Server Enterprise Edition - 106 - ユーティリティワークユニットについては、以下のマニュアルを参照してください。 ・ “OLTPサーバ運用ガイド”の“ワークユニットの作成” ・ “OLTPサーバ運用ガイド”の“ユーティリティのワークユニット” - 107 - 第5章 Java EE機能のチューニング 5.1 Interstage Java EE DASサービスのチューニング 下記の運用を行う場合は、Interstage Java EE DASサービスのチューニングが必要です。 ここでは、それぞれの運用に必要な設定内容、および設定方法について説明します。 ・ プロキシを使用する場合 ・ 運用管理用HTTPリスナーのポート番号を変更する場合 ・ 運用管理用HTTPリスナーのポート番号を変更する場合(Interstage Java EE DASサービスを起動できない場合) ・ 運用管理用HTTPリスナーのSSL通信利用設定を変更する場合 ・ 監視サービスの定義項目を有効にする場合 プロキシを使用する場合 Webサービスアプリケーションの配備などで、プロキシを経由して外部リソースを取得する場合、Interstage Java EE DASサービスが使 用するjavaプロセスのシステムプロパティに以下を設定する必要があります。 キー 設定値 備考 http.proxyHost ホスト名 値が設定されない場合は、プロキシを経由せずに接続し ます。 http.proxyPort ポート番号 http.nonProxyHosts プロキシを経由せずに 接続するホスト名 「|」区切りで複数のホストを指定できます。 http.proxyUser ユーザ名 http.proxyPassword パスワード プロキシがベーシック認証を行っている場合に設定してく ださい。 Interstage Java EE管理コンソールを使用して、下記の項目を変更してください。 ・ [設定] > [server-config] > [JVM 設定] > [JVM オプション] また、asadminコマンドのcreate-jvm-optionsサブコマンドで設定することも可能です。詳細は、「リファレンスマニュアル(コマンド編)」- 「asadmin」の「create-jvm-optionsサブコマンド」を参照してください。 注意 ・ asadminコマンドのcreate-jvm-optionsサブコマンドで設定を行う場合、targetオプションには「server」を指定してください。 ・ 変更を有効にするためには、Interstage Java EE DASサービスの再起動が必要です。 ・ システムプロパティは、必ずキー値の前に-Dを付加して、下記のように設定してください。 -D"キー値"="設定する値" 運用管理用HTTPリスナーのポート番号を変更する場合 以下の手順で変更します。 1. Interstage Java EE DASサービスの起動 以下のサービスを起動します。 - Interstage Java EE DASサービス - 108 - ijdasstartコマンドを実行してサービスを起動します。 ※他のプロセスとのポート番号の重複によりInterstage Java EE DASサービスを起動できない場合は、「運用管理用HTTPリスナー のポート番号を変更する場合(Interstage Java EE DASサービスを起動できない場合)」の手順でポート番号を変更してください。 2. HTTPリスナーポート番号の変更 asadminコマンドのsetサブコマンドでserver.http-service.http-listener.admin-listener.portの定義項目を更新します。 例 ポート番号を8929に変更する場合 > asadmin set server.http-service.http-listener.admin-listener.port=8929 server.http-service.http-listener.admin-listener.port=8929 3. asadminenv.confファイルの修正 運用管理用HTTPリスナーのポートに合わせて、asadminenv.confファイルを修正します。 修正方法の詳細は、「リファレンスマニュアル(コマンド編)」の「Java EE運用コマンド」-「asadmin」の「asadminenv.confファイル」 を参照してください。 例 ポート番号を8929に変更する場合 AS_ADMIN_PORT=8929 AS_ADMIN_PROFILE=cluster AS_ADMIN_SECURE=true AS_ADMIN_REALM=os 4. Interstage Java EE DASサービスの再起動 以下のサービスを再起動します。 - Interstage Java EE DASサービス ijdasstopコマンドを実行後、ijdasstartコマンドを実行してサービスを再起動します。 運用管理用HTTPリスナーのポート番号を変更する場合(Interstage Java EE DASサービスを起動できない場合) 運用管理用HTTPリスナーのポートが他のアプリケーションで使用されているなど、Interstage Java EE DASサービスを起動できない場 合は、domain.xmlを修正します。 domain.xmlの修正方法 以下のファイルをテキストエディタなどで開いて、name属性に「server-config」が設定されているconfigタグ配下のhttp-listenerタグのport 属性を編集します。 ファイルの格納先 [Java EE共通ディレクトリ]\domains\interstage\config\domain.xml [Java EE共通ディレクトリ]/domains/interstage/config/domain.xml - 109 - 例 ポート番号を8929に変更する場合 <config dynamic-reconfiguration-enabled="true" name="server-config"> <http-service> <access-log ・・・ <http-listener ・・・ <!-- Interstage Java EE DAS port number --> <http-listener acceptor-threads="1" address="0.0.0.0" blocking-enabled="false" default-virtual-server="__asadmin" enabled="true" family="inet" id="admin-listener" port="8929" security-enabled="false" server-name="" xpowered-by="false"/> 注意 domain.xmlを編集する際はポート番号以外の設定を変更しないでください。変更するとInterstage Java EE DASサービスを使用できな くなる場合があります。編集前にdomain.xmlを退避することをお奨めします。 運用管理用HTTPリスナーのSSL通信利用設定を変更する場合 以下の手順で変更します。 1. Interstage Java EE DASサービスの起動 以下のサービスを起動します。 - Interstage Java EE DASサービス ijdasstartコマンドを実行してサービスを起動します。 2. SSL通信利用設定の変更 asadminコマンドのsetサブコマンドでserver.http-service.http-listener.admin-listener.security-enabledの定義項目を更新します。 例 SSL通信を利用する設定に変更する場合 > asadmin set server.http-service.http-listener.admin-listener.security-enabled=true server.http-service.http-listener.admin-listener.security-enabled=true 3. asadminenv.confファイルの修正 運用管理用HTTPリスナーのSSL通信利用設定に合わせて、asadminenv.confファイルを修正します。 修正方法の詳細は、「リファレンスマニュアル(コマンド編)」の「Java EE運用コマンド」-「asadmin」の「asadminenv.confファイル」 を参照してください。 例 SSL通信を利用する設定に変更する場合 AS_ADMIN_PORT=12001 AS_ADMIN_PROFILE=cluster - 110 - AS_ADMIN_SECURE=true AS_ADMIN_REALM=os 4. Interstage Java EE DASサービスの再起動 以下のサービスを再起動します。 - Interstage Java EE DASサービス ijdasstopコマンドを実行後、ijdasstartコマンドを実行してサービスを再起動します。 監視サービスの定義項目を有効にする場合 IJServerクラスタや、Interstage Java EE DASサービスの監視サービスの定義項目を有効にすると、サーバーインスタンス数、配備済み のアプリケーション数に応じてInterstage Java EE DASサービスのメモリが使用されます。 監視サービスを有効に設定した場合は、Interstage Java EE DASサービスでメモリ不足が発生していないことを確認してください。メモ リ不足が発生した場合は、「5.15 Interstage Java EE DASサービスのヒープ領域サイズとアドレス空間」を参照して対処を行ってくださ い。 5.2 Interstage Java EE Node Agentサービスのチューニング 複数のサーバーインスタンスを同時起動させる場合 デフォルトでは、Interstage Java EE Node Agentサービスのメモリ割り当てプールの最大値を128MBに設定しています。デフォルトの チューニング値で90個のインスタンス同時起動が可能です。 90個より多くのインスタンスを同時起動させる場合にはメモリ割り当てプールの最大値をチューニングする必要があります。 見積もり式 (90個より追加起動するインスタンス数) + 128 チューニングファイル名 C:\Interstage\F3FMisjee\lib\processLauncher.xml (C:\Interstageにインストールした場合) /opt/FJSVisjee/lib/processLauncher.xml チューニング手順 1. Interstage Java EE Node Agentサービスを停止します。 2. Interstage Java EE DASサービスを停止します。 3. チューニングファイルをエディタで開いて、以下を探します。 <process name="s1as8-nodeagent"></process>タグで囲まれている<sysproperty key="-Xmx128m"/>タグ 4. <sysproperty key="-Xmx128m"/>タグの数値を、見積もり式で計算した値に修正します。 5. Interstage Java EE DASサービスを起動します。 6. Interstage Java EE Node Agentサービスを起動します。 注意 ・ その他の設定値は修正しないでください。 ・ サーバーインスタンスを増やすと、システム全体のメモリ使用量が増加する場合があるため注意してください。 - 111 - 5.3 IJServerクラスタのチューニング IJServerクラスタのチューニングについて、以下に説明します。 ここで説明するチューニング項目は、IJServerクラスタで動作するすべてのアプリケーションに有効です。 5.3.1 複数プロセス運用 IJServerクラスタの配下に複数のサーバーインスタンスを作成することで、同一の業務アプリケーションを複数のプロセスで運用できます。 サーバーインスタンスの数は、以下を考慮して設計します。 信頼性要件 複数のサーバーインスタンスを作成することにより、業務アプリケーションを運用するJava VMプロセスがダウンした場合でも、他の プロセスでシステムの運用を継続できます。 Java VMのメモリ使用量 メモリを多く使用する業務アプリケーションの場合、サーバーインスタンスを増やすことで1プロセスあたりのメモリ使用量を削減でき る可能性があります。 なお、サーバーインスタンスを増やすと、システム全体のメモリ使用量が増加する場合があるため注意してください。 負荷状況 業務アプリケーションへの負荷に応じて適切なサーバーインスタンスを作成します。 高負荷状況では、サーバーインスタンスの数を増やすことでスループットが向上する場合があります。 注意 複数プロセス運用における注意事項 ・ 設定値の妥当性は、必ず負荷試験を実施して確認してください。 ・ サーバーインスタンスを追加する場合は、物理メモリなどのシステム資源が十分かどうか確認してください。 ・ アプリケーションによっては、複数のサーバーインスタンスで動作させた場合に動作が変わることがあります。IJServerクラスタ配下 にサーバーインスタンスを複数作成する場合は、アプリケーションへの影響を事前に確認してください。 Interstage Java EE管理コンソール、およびasadminコマンドを使用することで、サーバーインスタンスの追加/削除を行うことができます。 詳細については、以下のマニュアルを参照してください。 ・ Interstage Java EE管理コンソールヘルプ ・ 「リファレンスマニュアル(コマンド編)」-「IJServerクラスタ運用」 また、複数のサーバーインスタンスによる運用については、「Java EE運用ガイド」-「IJServerクラスタの複数プロセス構成」を参照して ください。 5.3.2 Java VMのヒープ領域サイズ/Perm領域サイズ 以下のJava VMオプションの値を変更することで、Java VMのヒープ領域サイズ、およびPerm領域サイズを変更できます。 項目 デフォルト値 Java VMオプション Java VMの最大ヒープ領域サイズ -Xmx -Xmx256m Java VMのPerm領域サイズ -XX:MaxPermSize -XX:MaxPermSize=192m Java VMオプションの値は、Interstage Java EE管理コンソール、およびasadminコマンドを使用して変更できます。詳細については、以 下のマニュアルを参照してください。 ・ Interstage Java EE管理コンソールヘルプ ・ 「リファレンスマニュアル(コマンド編)」-「定義項目参照/更新」 ・ 「リファレンスマニュアル(コマンド編)」-「configs.config.java-configの定義項目」 - 112 - アプリケーションの運用中にjava.lang.OutOfMemoryErrorが多発する場合、Java VMの最大ヒープ領域サイズ、またはPerm領域サイズ が不足している可能性があります。「チューニングガイド」の「JDK/JREのチューニング」を参照し、適切な値にチューニングしてくださ い。 5.3.3 ガーベジコレクション発生回数 IJServerクラスタでは、JavaのRMI機能による自動ガーベジコレクションが1時間隔(デフォルトの場合)で動作します。 RMI機能による自動ガーベジコレクションの発生間隔を変更するには、以下のJava VMオプションの値を変更してください。 ・ -Dsun.rmi.dgc.client.gcInterval=発生間隔 ・ -Dsun.rmi.dgc.server.gcInterval=発生間隔 発生間隔: ミリ秒単位で数値を指定します。デフォルト値は、3600000です。 Java VMオプションの値は、Interstage Java EE管理コンソール、およびasadminコマンドを使用して変更できます。詳細については、以 下のマニュアルを参照してください。 ・ Interstage Java EE管理コンソールヘルプ ・ 「リファレンスマニュアル(コマンド編)」-「定義項目参照/更新」 ・ 「リファレンスマニュアル(コマンド編)」-「configs.config.java-configの定義項目」 なお、RMI機能による自動ガーベジコレクションの発生間隔をチューニングしても、ガーベジコレクション発生回数が削減されない場 合、Java VMのヒープ領域サイズが不足している可能性があります。この場合、Java VMのヒープ領域サイズのチューニングを行うこと で削減される場合があります。「5.3.2 Java VMのヒープ領域サイズ/Perm領域サイズ」を参照してください。 5.3.4 アプリケーション最大処理時間 想定される業務アプリケーションの最大処理時間を指定します。 アプリケーション最大処理時間の値は、Interstage Java EE管理コンソール、およびasadminコマンドを使用して変更できます。詳細につ いては、以下のマニュアルを参照してください。 ・ Interstage Java EE管理コンソールヘルプ ・ 「リファレンスマニュアル(コマンド編)」-「定義項目参照/更新」 ・ 「リファレンスマニュアル(コマンド編)」-「configs.config.ijserver-controlの定義項目」 5.3.5 グループ管理サービスの設定 IJServerクラスタはサーバーインスタンスが互いに起動状態を監視するためにグループ管理サービスを使用します。このサービスを利 用する機能については「Java EE運用ガイド」-「グループ管理サービス」を参照してください。 このサービスを使用すると、クラスタに設定されているハートビートアドレスとハートビートポートに各サーバーインスタンスが定期的に ハートビートの信号を送信し、その信号を別のサーバーインスタンスが受信することでサーバーインスタンスが正常に運用されているこ とを認識します。ハートビート信号が送信されなかったサーバーインスタンスについては、停止しているか異常が発生していると判断し て、グループから除外されます。 定期的に信号が送受信されるため、以下のような場合には各種定義をチューニングすることができます。また、このグループ管理サー ビスを使用する必要がない場合にはハートビートを無効にすることで、信号の送受信を行わないように変更できます。 ・ ネットワーク負荷が高いため、定期的な信号の送受信間隔を大きくしてサーバ負荷を軽減したい。 ・ 頻繁にアクセスがなく、システムでリアルタイムに異常を検知する必要がないため、異常を検知するまでの時間は若干遅くても良 いので、サーバの負荷を軽減したい。 以下に各種定義項目のチューニング観点を説明します。各信号を送信する時にはマルチキャストポートに対して約3300バイトのデー タを送信します。プロトコル最大試行/検証済みタイムアウト/pingタイムアウトは、値を小さくすると異常を検知するまでの時間を短くする ことができますが、一時的な高負荷状態をサーバーインスタンスが停止しているか異常が発生していると判断する場合がありますの で、特に理由がなければデフォルト値を使用することをお勧めします。 - 113 - 定義項目 チューニング観点 プロトコルタイムアウト 指定した間隔で約3300バイトのデータが定期的に送信されます。この値を 大きく設定することでネットワーク負荷を軽減することができますが、サー バーインスタンスの停止や異常を検知するタイミングが遅延します。 プロトコル最大試行 [プロトコルタイムアウト]×[プロトコル最大試行]の時間にグループに属す る他のサーバーインスタンスからハートビート信号が送信されなかった場 合に、信号が送信されないサーバーインスタンスに異常(または停止)が発 生している可能性があると判断します。 検証済みタイムアウト [プロトコルタイムアウト]×[プロトコル最大試行]の時間にハートビート信号 が送信されなかった場合、更に検証済みタイムアウトの時間超過してもハー トビート信号が送信されなければ、ping要求を送信します。 pingタイムアウト 最終的にサーバーインスタンスに異常(または停止)が発生しているかを確 認するping要求を送信して、サーバーインスタンスからの応答を待機する 時間です。 上記より、サーバーインスタンスが異常もしくは停止した場合に、そのサーバーインスタンスを除外するまでの時間の目安は以下となり ますので、異常を検知する時間のシステム要件と、ネットワーク負荷を照らし合わせてチューニングを行ってください。 サーバーインスタンスをグループから除外するまでの時間の目安 [プロトコルタイムアウト]×[プロトコル最大試行]+[検証済みタイムアウト]+[pingタイムアウト] 5.4 Interstage Java EE管理コンソールのチューニング ここでは、Interstage Java EE管理コンソールのチューニングについて説明します。 Interstage Java EE管理コンソールはInterstage Java EE DASサービス上で動作するため、「5.1 Interstage Java EE DASサービスのチュー ニング」も参照してください。 5.4.1 セッションタイムアウト セッションタイムアウトの初期値は、60分です。 セッションタイムアウト値を変更する場合の手順を以下に示します。 1. セッションタイムアウト値の変更 Interstage Java EE管理コンソールまたはasadminコマンドを利用してセッションタイムアウト値を変更します。 - Interstage Java EE管理コンソールを利用する場合 以下の画面からセッションタイムアウトの値を変更します。 [スタンドアロンインスタンス] > [server (Admin Server)] > [詳細] - asadminコマンドを利用する場合 asadminコマンドのsetサブコマンドによりセッションタイムアウトの値を変更します。 定義項目名などの詳細は、「リファレンスマニュアル(コマンド編)」の「Java EE運用コマンド」-「asadminコマンドで操作できる 定義項目」の「configs.config.admin-serviceの定義項目」を参照してください。 2. サービスの再起動 Interstage Java EE DASサービスを再起動します。 ijdasstopおよびijdasstartコマンドを実行して、Interstage Java EE DASサービスを再起動します。 - 114 - 5.4.2 アップロードファイルの最大サイズのチューニング Interstage Java EE管理コンソールによる配備(再配備)時において、アップロード可能なアプリケーションのデフォルトの最大ファイルサ イズは100000000byteです。 アップロードファイルの最大サイズを変更する場合、以下の手順を実行します。 1. Interstage Java EE DASサービスを停止します。 2. 以下のファイルをバックアップした後、編集します。 C:\Interstage\F3FMisjee\lib\install\applications\admingui\adminGUI_war\WEB-INF\web.xml /opt/FJSVisjee/lib/install/applications/admingui/adminGUI_war/WEB-INF/web.xml 編集内容 UploadFilterの初期化パラメータ「maxSize」に、変更したいアップロードファイルの最大サイズを設定します。無制限とする場 合は、「-1」を設定します。 例 上限値を200000000byteに変更する場合 <filter-name>UploadFilter</filter-name> <filter-class>com.sun.webui.jsf.util.UploadFilter</filter-class> <init-param> <param-name>maxSize</param-name> <param-value>200000000</param-value> </init-param> 例 無制限とする場合 <filter-name>UploadFilter</filter-name> <filter-class>com.sun.webui.jsf.util.UploadFilter</filter-class> <init-param> <param-name>maxSize</param-name> <param-value>-1</param-value> </init-param> 3. Interstage Java EE DASサービスを起動します。 注意 アップロードファイルの最大サイズを増やす場合や無制限にする場合、以下に注意してください。 ・ ファイルサイズの大きいアプリケーションの配備(再配備)は時間がかかります。 配備(再配備)処理中にInterstage Java EE DASサービスの停止やマシンの再起動を行わないでください。 ・ 2Gバイトを超えるファイルは配備(再配備)できません。2Gバイト未満のファイルを指定して配備(再配備)を行ってください。 - 115 - 5.4.3 ポート番号 Interstage Java EE管理コンソールで使用するHTTPリスナーポートは、Interstage Java EE DASサービスの運用管理用HTTPリスナー ポートと同一です。 HTTPリスナーポートのポート番号を変更する場合の手順を以下に示します。 1. ポート番号の変更 Interstage Java EE管理コンソールまたはasadminコマンドを利用してポート番号を変更します。 - Interstage Java EE管理コンソールを利用する場合 以下の画面から「リスナーポート」の値を変更します。 [設定] > [server-config] > [HTTPサービス] > [HTTPリスナー] > [admin-listener] - asadminコマンドを利用する場合 asadminコマンドのsetサブコマンドによりポート番号を変更します。 変更方法については、「5.1 Interstage Java EE DASサービスのチューニング」の「運用管理用HTTPリスナーのポート番号を 変更する場合」を参照してください。 2. サービスの再起動 Interstage Java EE DASサービスを再起動します。 ijdasstopおよびijdasstartコマンドを実行して、Interstage Java EE DASサービスを再起動します。 5.4.4 SSL通信の利用 Interstage Java EE管理コンソールでSSL通信を行うための設定は、Interstage Java EE DASサービスの運用管理用HTTPリスナーのSSL 通信利用設定と同じです。 SSL通信を行うための設定を変更する場合の手順を以下に示します。 1. SSL通信利用設定の変更 Interstage Java EE管理コンソールまたはasadminコマンドを利用してSSL通信利用設定を変更します。 - Interstage Java EE管理コンソールを利用する場合 以下の画面から「セキュリティー」の設定を変更します。 [設定] > [server-config] > [HTTPサービス] > [HTTPリスナー] > [admin-listener] - SSL通信を行う場合 「セキュリティー」の「有効」のチェックボックスを選択します。 - SSL通信を行わない場合 「セキュリティー」の「有効」のチェックボックスの選択を解除します。 - asadminコマンドを利用する場合 asadminコマンドのsetサブコマンドによりSSL通信利用設定を変更します。 変更方法については、「5.1 Interstage Java EE DASサービスのチューニング」の「運用管理用HTTPリスナーのSSL通信利用 設定を変更する場合」を参照してください。 2. サービスの再起動 Interstage Java EE DASサービスを再起動します。 ijdasstopおよびijdasstartコマンドを実行して、Interstage Java EE DASサービスを再起動します。 - 116 - 5.5 配備時のチューニング IJServerクラスタへアプリケーションの配備を行った後のIJServerクラスタ起動時に、Interstage Java EE Node AgentサービスはIJServer クラスタの起動に必要な資産を展開するプロセスを起動します。 このプロセスの最大ヒープ領域サイズが不足した場合、展開後のIJServerクラスタの起動に必要な資産に不整合が発生する可能性が あります。 以下のJava VMオプションを指定すると、IJServerクラスタの起動に必要な資産を展開するプロセスの最大ヒープ領域サイズをチューニ ングできます。 項目 Java VMの最大ヒープ領域サイズ Java VMオプション -Xmx アプリケーションを展開するプロセスのJava VMオプションは、Interstage Java EE管理コンソール、およびasadminコマンドを使用して変 更できます。詳細については、以下を参照してください。 ・ Interstage Java EE管理コンソールヘルプ ・ 「Java EE運用ガイド」-「Interstage Java EE Node Agentサービスの定義項目」の「Node Agentの追加プロパティ」 手順 1. 以下のプロパティを設定し、アプリケーション展開処理を実行するプロセスのヒープ領域サイズを設定します。 「Node Agentの追加プロパティ」のINSTANCE-SYNC-JVM-OPTIONS 例) asadmin set node-agent.ijna.property.INSTANCE-SYNC-JVM-OPTIONS=-Xmx256m 2. Interstage Java EE Node Agentサービスを再起動します。 5.6 Webコンテナのチューニング Webコンテナの処理の流れ Webコンテナは以下の流れでクライアントからリクエストを受け付けて処理します。 1. Webサーバがクライアントからリクエストを受け付け、Webサーバコネクタ経由でWebコンテナへ送信する。 2. WebコンテナがWebサーバコネクタからリクエストを受け付ける。 3. 受け付けたリクエストを一時的にHTTP接続キューに格納する。 4. 要求処理スレッドは一定間隔でHTTP接続キュー内を監視する。 5. HTTP接続キューにリクエストがあった場合、要求処理スレッドはリクエストを処理する。 上記はWebコンテナのチューニングポイントとして以下の2つに分類できます。 ・ 同時処理数(初期スレッド数、スレッド数、スレッドの増分) ・ 接続数(WebサーバコネクタのWebコンテナへの最大接続数、最大保留カウント、キューサイズ) Webコンテナの処理の流れの5.は同時処理数に関係しています。 5.は「初期スレッド数」、「スレッド数」、「スレッドの増分」で設定することが可能です。 Webコンテナの処理の流れの1.、2.、3.は接続数に関係しています。 1.は「WebサーバコネクタのWebコンテナへの最大接続数」で設定することが可能です。 2.は「最大保留カウント」で設定することが可能です。 3.は「キューサイズ」で設定することが可能です。 以下に、リクエストの流れを基に各設定項目の関係を示します。 - 117 - 同時処理数 同時処理数およびサーバーインスタンスを追加すると、Webアプリケーションの同時実行多重度を増やせます。 同時処理数を増やすと、1プロセスあたりの実行多重度を増やせますが、同時処理数が増えることによる負荷や資源の増加により効果 はみられない可能性があります。通常はデフォルト値以下で運用することを推奨しています。 アプリケーションから呼び出すEJBの「5.7.3 Enterprise Beanインスタンスのプーリング」と「5.7.2 Enterprise Beanインスタンスのキャッシン グ」、JDBCのコネクション数にあわせてチューニングしてください。 同時処理数については、以下が設定できます。 ・ 初期スレッド数 ・ スレッド数 ・ スレッドの増分 同時処理数は、Interstage Java EE管理コンソールの[設定] > [クラスタ名-config] または [server-config] > [HTTP サービス] > [要求処 理]タブ、およびasadminコマンドを使用して変更できます。詳細については、以下のマニュアルを参照してください。 ・ Interstage Java EE管理コンソールヘルプ ・ 「リファレンスマニュアル(コマンド編)」-「定義項目参照/更新」 ・ 「リファレンスマニュアル(コマンド編)」-「configs.config.http-serviceの定義項目」の request-processing.thread-count(スレッド数) request-processing.initial-thread-count(初期スレッド数) request-processing.thread-increment(スレッドの増分) 接続数 接続数は、運用するシステムの要求の違いによって以下のように設定します。 ・ Webコンテナの負荷が高く処理できないリクエストは、時間がかかってもかまわないので、正常に処理させたい場合 - 118 - 項目 設定値 WebサーバコネクタのWebコンテナへの 最大接続数 なし(無制限) Webコンテナの最大保留カウント リクエストを受け付けることができるだけの十分に大きな値を設 定 Webコンテナのキューサイズ 処理待ちのリクエストを保持することができるだけの十分に大き な値を設定 ・ Webコンテナの負荷が高く処理できないリクエストは、長時間待たせるのではなく、エラーとしてクライアントに通知したい場合 項目 設定値 WebサーバコネクタのWebコンテナへの 最大接続数 Webコンテナが処理可能な数を設定 Webコンテナの最大保留カウント リクエストを受け付けることができるだけの十分に大きな値を設 定 Webコンテナのキューサイズ Webコンテナの最大接続数と同じ値を設定 接続数に関する設定項目について、以下に説明します。 WebサーバコネクタのWebコンテナへの最大接続数 - WebサーバとWebコンテナを同一マシン内で運用する場合 Interstage Java EE管理コンソールの[クラスタ] または[スタンドアロンインスタンス] > [クラスタ名] または[サーバーインスタンス 名] > [Webサーバコネクタ]タブ、およびasadminコマンドを使用して変更できます。詳細については、以下のマニュアルを参照 してください。 - Interstage Java EE管理コンソールヘルプ - 「リファレンスマニュアル(コマンド編)」-「update-web-server-connector-configサブコマンド」の--maxprocessorsオプション - WebサーバとWebコンテナをそれぞれ別のマシンで運用する場合 Webサーバを運用するマシン側で設定します。 Interstage管理コンソールからWebサーバコネクタの最大接続数で設定します。また、isj2eeadminコマンドでも設定できます。詳 細については、以下のマニュアルを参照してください。 - Interstage管理コンソールのヘルプ - 「リファレンスマニュアル(コマンド編)」の「isj2eeadmin」 Webコンテナの最大保留カウント 本項目の値を増やすと、Webコンテナが同時に受け付けることができるリクエスト数を増やせます。運用中に高負荷な状態となった 場合に想定される、クライアントからの同時リクエスト数を指定しておくことを推奨します。 最大保留カウントは、Interstage Java EE管理コンソールの[設定] > [クラスタ名-config] または [server-config] > [HTTPサービス] > [接続プール]タブ、およびasadminコマンドを使用して変更できます。詳細については、以下のマニュアルを参照してください。 - Interstage Java EE管理コンソールヘルプ - 「リファレンスマニュアル(コマンド編)」-「定義項目参照/更新」 - 「リファレンスマニュアル(コマンド編)」-「configs.config.http-serviceの定義項目」の connection-pool.max-pending-count 注意 最大保留カウントに設定された値はWebコンテナが使用するSocketのbacklogに設定されます。Socketのbacklogに設定した値はOS によって有効となる範囲が決まっていますので、最大保留カウントに設定した値がすべて有効となるわけではありません。 - 119 - Socketのbacklogの有効範囲については各OSのドキュメントを参照してください。 なお、Windows (R)の場合、200より大きな値を設定しても有効になりません。 Webコンテナのキューサイズ 本項目の値を増やすと、Webコンテナが受け付けたクライアントからのリクエストを、Webコンテナが処理できるようになるまでの間保 持する数を増やせます。 運用時に一時的に負荷が高くなり、Webコンテナの同時処理数を超えるリクエストを受け付けることが想定される場合は、Webコン テナの同時処理数を抑えて、Webコンテナのキューサイズに大きな値を設定することで、サーバ全体のレスポンスの悪化を防ぐこと ができます。 - 設定ポイント1: 運用時に一時的に負荷が高くなり、クライアントからのリクエスト処理に失敗しかつ、サーバーログにWEB1505が出力されてい る場合は、キューサイズを大きくしてください。 - 設定ポイント2: キューサイズを増やしてリクエストを処理することができるだけの十分に大きなキューを用意した場合、クライアントからのリクエ ストに対するレスポンスに遅れが生じる可能性があります。Webサーバコネクタの送受信タイムアウト値を増やしてください。 キューサイズは、Interstage Java EE管理コンソールの[設定] > [クラスタ名-config] または [server-config] > [HTTPサービス] > [接 続プール]タブ、およびasadminコマンドを使用して変更できます。詳細については、以下のマニュアルを参照してください。 - Interstage Java EE管理コンソールヘルプ - 「リファレンスマニュアル(コマンド編)」-「定義項目参照/更新」 - 「リファレンスマニュアル(コマンド編)」-「configs.config.http-serviceの定義項目」の connection-pool.queue-size-in-bytes Webサーバコネクタの送受信タイムアウト - WebサーバとWebコンテナを同一マシン内で運用する場合 Interstage Java EE管理コンソールの[クラスタ] または[スタンドアロンインスタンス] > [クラスタ名] または[サーバーインスタンス 名] > [Webサーバコネクタ]タブ、およびasadminコマンドを使用して変更できます。詳細については、以下のマニュアルを参照 してください。 - Interstage Java EE管理コンソールヘルプ - 「リファレンスマニュアル(コマンド編)」-「update-web-server-connector-configサブコマンド」の--sendreceivetimeoutオプショ ン - WebサーバとWebコンテナをそれぞれ別のマシンで運用する場合 Webサーバを運用するマシン側で設定します。 Interstage管理コンソールからWebサーバコネクタの送受信タイムアウトで設定します。また、isj2eeadminコマンドでも設定できま す。詳細については、以下のマニュアルを参照してください。 - Interstage管理コンソールのヘルプ - 「リファレンスマニュアル(コマンド編)」の「isj2eeadmin」 キープアライブ キープアライブに関する設定項目について、以下に説明します。 キープアライブの有効/無効および、1回のコネクションで処理可能なリクエスト数 本項目では、HTTPのキープアライブの有効/無効および、1回のコネクションで処理可能なリクエスト数を設定します。 "無効"を指定した場合は、1つのリクエストが完了するたびに接続を閉じて、次のリクエストに対して新しく接続を行います。 "有効"を指定した場合は、Webコンテナがレスポンスを返した後、次のリクエストが来るまでの間、HTTP接続を確立し、リクエストの 転送効率を向上させることができます。 初期値は、"無効"です。 IPCOMなどの負荷分散装置と連携する場合は、負荷分散装置のキープアライブ機能の設定と合わせる必要があります。詳細につ いては、負荷分散装置のマニュアルを参照してください。 - 120 - キープアライブの有効/無効および、1回のコネクションで処理可能なリクエスト数は、Interstage Java EE管理コンソールの[設定] > [ ク ラ ス タ 名 -config] ま た は [server-config] > [HTTP サ ー ビ ス ] の [ 追 加 プ ロ パ テ ィ ] お よ び asadmin コ マ ン ド を 使 用 し て、"maxKeepAliveRequests"プロパティで変更することができます。詳細については、以下のマニュアルを参照してください。 - Interstage Java EE管理コンソールヘルプ - 「リファレンスマニュアル(コマンド編)」-「定義項目参照/更新」 - 「リファレンスマニュアル(コマンド編)」-「configs.config.http-serviceの定義項目」の「property.maxKeepAliveRequests(1回のコ ネクションで処理可能なリクエスト数)」 キープアライブのタイムアウト 本項目の値は、Webコンテナがレスポンスを返した後、次のリクエストが来るまでの間、キープアライブ接続を維持する時間を表し ます。クライアントのキープアライブのタイムアウト仕様に合わせて、タイムアウトを設定してください。 例えば、クライアントがサーバにつながっていることが前提でリクエストを投げてくる場合は、クライアント側のタイムアウトより大きい 値を設定してください。 ただし、この項目には10秒以下の値を設定できません。 キープアライブのタイムアウトは、asadminコマンドを使用して変更できます。詳細については、以下のマニュアルを参照してくださ い。 - 「リファレンスマニュアル(コマンド編)」-「定義項目参照/更新」 - 「リファレンスマニュアル(コマンド編)」-「configs.config.http-serviceの定義項目」の「keep-alive.timeout-in-seconds(キープアラ イブのタイムアウト)」 注意 キープアライブが"無効"な場合、リクエスト毎に接続が切断されるため、クライアント側(Webサーバ/Webサーバコネクタを使用する運用 の場合、Webサーバを運用するマシンを含む)にて、TCP/IP資源(エフェメラルポート)をより多く消費します。 短時間に多くのリクエストが行われる場合に、TCP/IP資源が枯渇する場合があります。 必要に応じて、キープアライブを"有効"にするか、または「3.4 TCP/IPパラメタのチューニング」を参照し、TCP/IPパラメタをチューニン グしてください。 5.7 EJBコンテナのチューニング EJBコンテナをチューニングする時に、考慮するポイントについて説明します。 5.7.1 スレッドプーリング クライアントからEnterprise JavaBeanに対して同時に要求が発行された場合、EJBコンテナは要求を別スレッドで実行して並列処理します。 スレッドの作成処理はレスポンス時間に影響するため、スレッドプールを活用してスレッドを再利用しています。 スレッドプーリングは以下のチューニングを行うことができます。 ・ EJBアプリケーションの同時処理数制御 ・ リクエストの優先順位付け スレッドはEnterprise JavaBeanのアクセスパターンにより、制御が異なります。以下にEnterprise JavaBeanのアクセスパターンとスレッド 制御の関係を説明します。 Enterprise JavaBeanのアクセスパターンとスレッド制御の関係 以下にEnterprise JavaBeanのアクセスパターンを示します。 - 121 - EJBコンテナがスレッド制御を行うアクセスパターン 以下の場合はEJBコンテナがスレッドプールを使用してスレッド制御します。 - RMI-IIOPによるリモートアクセスによりEnterprise JavaBeanに対して要求が発行される場合 - JMSメッセージが受信され、Message-driven Beanが実行される場合 - リソースアダプタのメッセージが受信され、Message-driven Beanが実行される場合 呼出し元のスレッドで動作するアクセスパターン 以下のJava VM内の呼出しの場合は呼出し元のスレッドで動作します。 - EJB間の呼出し - Servlet/JSPからのEJB呼出し - WebサービスからのEJB呼出し - JPA Entityに対する操作 HTTP通信によるアクセスの場合はスレッドのチューニングについては、「5.6 Webコンテナのチューニング」と「5.9 Webサービスの チューニング」を参照してください。 リソースアダプタのスレッドで動作するアクセスパターン リソースアダプタのメッセージを受信するMessage-driven Beanの場合、メッセージリスナーメソッドはリソースアダプタが作成したス レッドで動作します。 EJBアプリケーションの同時処理数制御 IJServerクラスタプロセス起動時にスレッドプールの最小プールサイズのスレッドを作成しプールに格納します。 要求の処理開始前にプールを検索し、プールにスレッドがない場合、スレッドを作成して要求を実行します。 処理完了後、作成したスレッドは削除されることなくプールに返却されます。現在のスレッド数がスレッドプールの最大プールサイズと なり、プールにスレッドがない状態で要求が配信された場合、スレッドがプールに戻るまで要求をキューに入れて待機します。 - 122 - リクエストの優先順位付け RMI-IIOPによるリモートアクセスが行われるEJBアプリケーションでは、EJBアプリケーションごとにスレッドプールを作成し最大プール 数を指定することにより、EJBアプリケーションごとに同時処理数を制御できます。 EJBアプリケーションに個別にスレッドプールを割り当てることによって、他のリモートアクセス対象のEJBアプリケーションよりも高い優 先度で実行できます。個別のスレッドプールに割り当てられたEJBアプリケーションは、他のEJBアプリケーションに対する要求がスレッ ドプールでキューイングされていても独立したスレッドプールで実行できるため、優先的に実行できます。 スレッドプールの設定 以下にスレッドプールのチューニング項目について説明します。 チューニング項目 意味 効果 最小プールサイズ スレッドプールの初期数および最小数です。 IJServerクラスタ起動時に作成するスレッド数です。 想定している同時に発行さ れる要求数を指定するとレ スポンスタイムを削減できま す。 最大プールサイズ スレッドプールの最大値です。 最大値のスレッドが動作した場合、要求が発行されて もスレッドを作成せず、スレッドが空くまで、要求はキュー に置かれます。 スレッドプールの最大値に よりスレッドプールが使用す るメモリやリソースを制御で きます。 アイドルタイムアウト プール内のスレッドがアイドル状態のままでいられる最 長時間(秒単位)です。 この期間を過ぎるとスレッドを破棄します。ただし、最小 値のスレッド数分はプーリングされ続けますので破棄 対象外となります。また、IJServerクラスタプロセスが停 止するとスレッドも削除されます。 不要になった過度のスレッ ドを破棄することによりメモリ やリソースの最適化ができ ます。 EJBアプリケーションでは、RMI-IIOPによるリモートアクセスにおいて、個別のスレッドプールが定義されている場合はそのスレッドプー ルが使用され、個別のスレッドプールが定義されていない場合は、用意されているデフォルトスレッドプールが使用されます。 デフォルトスレッドプールは、以下の機能でも使用されるため、EJBアプリケーションへの要求が多くなるとスレッドの空き待ちが発生し、 遅延が発生する場合や応答がなくなる場合があります。 ・ EJBタイマーサービスによるコールバックメソッドの実行 ・ Enterprise Beanインスタンスのキャッシングによるpassivate処理の実行 ・ Enterprise Beanインスタンスのプーリングによるプールの縮小や拡張処理の実行 ・ スレッドプールIDを定義していないリソースアダプタのWorkの実行 ・ 別プロセスのEJBアプリケーションを呼び出した場合のリクエスト受信処理 RMI-IIOPによるリモートアクセスが行われるEJBアプリケーションについては、必ずデフォルトスレッドプールとは別のスレッドプールを 作成し、「Enterprise Beanごとのスレッドプール設定」を行ってください。 デフォルトスレッドプールは、初期値が「thread-pool-1」になっています。このスレッドプールは削除しないでください。 Enterprise Beanごとのスレッドプールの最大プールサイズは、以下の見積もりを行ってください。 最大プールサイズ = 想定される最大クライアント多重度(注1) 注1) 想定されるスレッド多重度の合計。 デフォルトスレッドプール(thread-pool-1)の最大プールサイズは、以下の見積もりを行ってください。200より小さい値になった場合は、 200(デフォルト)にしてください。 最大プールサイズ = + + + + EJBタイマーサービスのタイマーの数 Enterprise Beanの数 リソースアダプタのWork数 (注1) 想定される同時接続クライアントのプロセス数 想定される最大クライアント多重度 (注2) - 123 - + 呼出し先IJServerクラスタのプロセス数 (注3) 注1) スレッドプールIDを定義していないリソースアダプタだけ。 注2) 想定されるスレッド多重度の合計。 注3) 他IJServerクラスタのEJBアプリケーションなどを呼び出した場合の、呼出し先IJServerクラスタのプロセス数。 スレッドプールの作成 スレッドプールは、Interstage Java EE管理コンソール、およびasadminコマンドを使用して作成できます。詳細は、以下のマニュアル を参照してください。 - Interstage Java EE管理コンソールヘルプ - 「リファレンスマニュアル(コマンド編)」の「create-threadpoolサブコマンド」 スレッドプールの設定値は、Interstage Java EE管理コンソール、およびasadminコマンドを使用して変更できます。詳細は、以下の マニュアルを参照してください。 - Interstage Java EE管理コンソールヘルプ - 「リファレンスマニュアル(コマンド編)」の「configs.config.thread-poolsの定義項目」 Enterprise Beanごとのスレッドプール設定 作成したスレッドプールを、使用するEJBアプリケーションのInterstage deployment descriptorで指定します。詳細は、以下のマニュ アルを参照してください。 - 「Java EE運用ガイド」-「Interstage EJB application deployment descriptor (sun-ejb-jar.xml)」の<use-thread-pool-id>タグ 5.7.2 Enterprise Beanインスタンスのキャッシング Stateful Session Beanの場合、クライアントの初期アクセスからRemove要求まで同一インスタンスを使用し、クライアントとの対話状態を 保持するため、他Enterprise Beanに比べてメモリ使用量が多くなります。メモリ使用量を制御するため、要求実行中ではないBeanイン スタンスをキャッシュする時間や数を調整することができます。 Stateful Session BeanインスタンスのライフサイクルはEJBの規約に説明されています。EJBコンテナはメソッド実行可状態のBeanインス タンスをキャッシュに格納します。クライアントからBeanのビジネスメソッドに対して再度要求がくると、Beanインスタンスをキャッシュから 取得し、メソッドを実行して、実行完了後にインスタンスをキャッシュに戻します。同じBeanに対して再度要求がくると、該当のBeanイン スタンスをキャッシュから取得し、メソッド実行完了後にキャッシュに戻します。 クライアントからBeanに対してRemove要求が発行されるとBeanインスタンスがキャッシュから削除され、インスタンスが破棄されます。 Stateful Session Beanでは以下のチューニング項目でBeanインスタンスのキャッシングを変更できます。 チューニング項目 SFSB持続性のタイプ 効果 「none」に設定することでBeanインスタンスをファイルシステムに 格納することを抑止するため、ユーザーは不要となったファイル の削除を意識する必要がありません。 「file」に設定することでキャッシュに格納されたBeanインスタン スから長時間使用されていないものをファイルシステムに passivateするため、不要なメモリの増加を防ぐことができます。 ただし、passivateしたファイルは、ユーザーが削除する必要が あります。 「SFSB持続性のタイプ」で「file」を設定する場合は「SFSB持続性のタイプ「file」で運用する場合の注意事項」を確認してください。 「SFSB持続性のタイプ」はIJServerクラスタごとに設定できます。この設定は、Interstage Java EE管理コンソール、およびasadminコマン ドを使用して変更できます。詳細は、「Java EE運用ガイド」-「EJBコンテナの定義項目」を参照してください。 キャッシュの設定 チューニング項目「SFSB持続性のタイプ」によって、キャッシングのチューニング項目の動作が変わります。 以下の表にキャッシング機能を制御するチューニング項目を説明します。 - 124 - チューニング項目 効果 最大キャッシュサイズ 同時にアクセスするクライアント数に設定することにより、メモリ の使用量を削減できます。 キャッシュのサイズ変更量 要求のピークが終わって不要になったインスタンスを素早く破 棄することによりメモリ消費を低減できます。 本設定はSFSB持続性のタイプがfileのときのみ有効です。 キャッシュアイドルタイムアウト クライアントがBeanに対してRemove要求を発行し忘れている場 合に、不要なBeanインスタンスが自動的に消去されるため、不 要なメモリの増加を防ぐことができます。 削除タイムアウト 長時間使用されていない不要なBeanインスタンスが消去される ため、資源の最適化ができます。 本設定はSFSB持続性のタイプがfileのときのみ有効です。 選択内容の削除ポリシー 削除ポリシーをBeanの使用パターンに合わせることでSFSB持 続性のタイプがnoneのとき、使用頻度の低いBeanインスタンス をキャッシュから削除できます。また、SFSB持続性のタイプが fileのとき頻繁に使用されるBeanインスタンスのpassivateと activate処理による性能劣化を縮小できます。 EJBコンテナがpassivateするインスタンスの保存場所は以下のチューニング項目で変更できます。 チューニング項目 セッション格納位置 効果 例えば容量にゆとりがある任意のディスクドライブを指定して資 源配置の最適化を図ったり、ファイルI/Oが速い任意のディスクド ライブを指定することによりファイル化したBeanインスタンスの操 作速度を向上させることができます。 本設定はSFSB持続性のタイプがfileのときのみ有効です。 デフォルトの格納場所とそのディレクトリ配下の構成については、「Java EE運用ガイド」-「IJServerクラスタのファイル構成」を参照して ください。ファイルはpassivateしたBeanインスタンスごとに作成され、Beanのactivate、削除タイムアウト、またはIJServerクラスタの削除時 に削除されます。セッション格納位置のディスク容量の見積もり方法については、「機能: Java EE」を参照してください。 キャッシュのチューニング設定はEnterprise Beanごとに指定できます。定義詳細については、以下のマニュアルを参照してください。 ・ 「Java EE運用ガイド」-「Interstage EJB application deployment descriptor (sun-ejb-jar.xml)」の<ejb><bean-cache>タグ Enterprise Beanのキャッシュ設定を指定しない場合はIJServerクラスタの値が使用されます。この値は、Interstage Java EE管理コンソー ル、およびasadminコマンドを使用して変更できます。詳細については、以下のマニュアルを参照してください。 ・ Interstage Java EE管理コンソールヘルプ ・ 「リファレンスマニュアル(コマンド編)」-「setサブコマンド」の「configs.config.ejb-containerの定義項目」 注意 Interstage Java EE DASサービスではSFSB持続性のタイプは「none」固定となります。 SFSB持続性のタイプ「none」で運用する場合の注意事項 ・ EJBコンテナはIJServerクラスタの停止時にキャッシュしている全Beanインスタンスを削除します。 SFSB持続性のタイプ「file」で運用する場合の注意事項 - 125 - ・ IJServerクラスタ停止状態でStateful Session Beanを配備解除した場合、「セッション格納位置」配下の資産は削除されません。この ときはアプリケーション配備解除後にユーザーが資産を削除してください。 ・ IJServerクラスタ起動状態でStateful Session Beanを配備解除した場合、「セッション格納位置」配下の資産は削除されます。IJServer クラスタ起動状態では「セッション格納位置」配下の資産の削除をユーザーは行わないでください。 ・ passivateする時には Beanインスタンスを直列化してファイルシステムに格納します。このため、Beanインスタンスから参照するオブ ジェクトが直列化できる (java.io.Serializableインタフェースを実装するなど)必要があります。Beanインスタンスが直列化できない場 合には java.io.NotSerializableException例外が発生してpassivateに失敗し、そのBeanインスタンスは削除されます ・ EJBコンテナはIJServerクラスタの停止時にキャッシュしている全Beanインスタンスをpassivateします。ただしIJServerクラスタを強制 停止した場合は、EJBコンテナはpassivateせずに終了します。 5.7.3 Enterprise Beanインスタンスのプーリング クライアントから要求がある前にBeanのインスタンスを生成しておくことでアクセス時のインスタンス生成処理時間が省略され、処理性 能が向上します。Enterprise Beanインスタンスのプーリング機能は以下のEnterprise Beanで利用されます。 ・ Stateless Session Bean ・ Message-driven Bean 以下にStateless Session BeanとMessage-driven Beanインスタンスのライフサイクルとプールについて説明します。 Stateless Session Beanの場合、クライアントからBeanに対して要求があると、EJBコンテナはプールからBeanインスタンスを1つ取得し、 そのインスタンスに対してビジネスメソッドを実行します。Message-driven Beanの場合、メッセージが届くと、同様にプールからBeanイン スタンスを取得しそのインスタンスに対してメッセージリスナーメソッドを実行します。実行完了時にインスタンスをプールに戻します。 EJBタイマーによるコールバック処理の場合にも同様に、プールからインスタンスを取得しタイマーコールバックメソッドを実行し、実行 完了時にインスタンスをプールに戻します。 以下の表にプーリング機能を制御するチューニング項目を説明します。 チューニング項目 効果 初期および最小プールサイズ インスタンスをあらかじめ生成しておくことにより、プールされている インスタンスを利用してすぐに実行できるため処理性能が向上しま す。 最大プールサイズ プールの最大値によりメモリ使用量を制御できます。 プールサイズ変更量 クライアントからの要求数の急増によってメソッド実行可状態のイン スタンスが足りなくなった場合でも、プールサイズの即時拡張により、 インスタンス生成処理によるレスポンス遅延が軽減されます。 プールアイドルタイムアウト 不要になった過度のインスタンスを破棄することによりメモリの最適 化ができます。 - 126 - 注) プールの監視は指定値の間隔で実施しますが、起動後に1回行った後はEJBアプリケーションの使用状況を確認し、使用されてい ないBeanインスタンスはプールサイズを調整しません。 注意 Message-driven Beanはインスタンスごとにセッションを使用してメッセージを受信します。そのため、プールの最大値を2以上に設定す るとメッセージ順序性が保証されません。 プール設定はEnterprise Beanごとに指定できます。定義詳細については、以下のマニュアルを参照してください。 ・ 「Java EE運用ガイド」-「Interstage EJB application deployment descriptor (sun-ejb-jar.xml)」の<ejb><bean-pool>タグ Enterprise Beanのキャッシュ設定を指定しない場合はIJServerクラスタの値が使用されます。この値は、Interstage Java EE管理コンソー ル、およびasadminコマンドを使用して変更できます。詳細については、以下のマニュアルを参照してください。 ・ Interstage Java EE管理コンソールヘルプ ・ 「リファレンスマニュアル(コマンド編)」-「setサブコマンド」の「configs.config.ejb-containerの定義項目」、または「configs.config.mdbcontainerの定義項目」 5.7.4 同一Java VM内のリモートアクセスでデータコピーを防ぐ機能 Enterprise Beanのリモートビジネスインタフェースにアクセスすると、同一Java VM内のアクセスであっても、ビジネスメソッドの引数と返 却値は値のコピーを転送します。このため、引数の値を呼出し先で変更したり、返却された値を呼出し元で変更しても、呼出し先と呼 出し元のコピーされた値には影響を与えません。 これは、IIOP経由でJava VM外からEnterprise Beanにアクセスした場合には、必ずビジネスメソッドの引数と返却値は値のコピーを転 送するため、同一Java VMで呼び出した場合とIIOP経由でJava VM外から呼び出した場合の仕様を統一するためです。仕様が統一 されるためアプリケーションの汎用性が向上します。 しかし、値のコピーを作成することは、オーバーヘッドが大きく、性能に影響を与えます。転送する値を変更しなければ値の参照を転 送しても動作上の差異はありません。 以上より、同一Java VM内でEnterprise Beanのリモートビジネスインタフェースにアクセスした場合、引数と返却値のコピーではなく参 照を転送するように変更してメソッドのアクセス性能を改善できます。 参照 本機能の定義詳細については、以下のマニュアルを参照してください。 ・ 「Java EE運用ガイド」-「Interstage EJB application deployment descriptor (sun-ejb-jar.xml)」の<ejb><pass-by-reference>タグ 5.8 JPAのチューニング JPAはOLTP系(データの検索が多く、更新が少ない)のJava EEアプリケーションによく使用されます。Interstage永続性プロバイダはデー タベースで検索したデータをキャッシングすることにより性能を向上させることができます。 Interstage永続性プロバイダのチューニングオプションにはデータベースを検索したデータから作成するEntityインスタンスをキャッシュ するオプションが用意されています。これに合わせてJDBCの接続プールまたはデータベースのチューニングも実施してください。 キャッシュは以下の2つが使用できます。 ・ 永続性コンテキストキャッシュ ・ 永続性ユニットの共有キャッシュ 以下に各キャッシュについて説明します。 5.8.1 永続性コンテキストキャッシュ エンティティマネージャを使用してEntityをデータベースから取得する場合、または作成したEntityを永続性コンテキストにマージする 場合、Entityインスタンスが永続性コンテキストキャッシュに格納されます。このキャッシュのライフサイクルは永続性コンテキストと同じ です。 - 127 - 以下に永続性コンテキストキャッシュの特徴を説明します。 findメソッド エンティティマネージャのfindメソッドでEntityを検索すると、まずは永続性コンテキストキャッシュから探します。 キャッシュにある場合は、データベースに問い合わせずにキャッシュされたインスタンスを返却します。キャッシュにない場合は、「5.8.2 永続性ユニットの共有キャッシュ」を探します。共有キャッシュにもない場合、SQL文を発行しデータベースに問い合わせします。検索 が成功した場合、Entityインスタンスを永続性コンテキストキャッシュに格納し、アプリケーションに返却します。 クエリメソッド エンティティマネージャを使用してJPQLクエリメソッドを実行すると、SQL文を発行しデータベースから検索します。ただ、レコードを見 つけた場合、レコードと同じプライマリキーのEntityがすでに永続性コンテキストキャッシュに存在しているかどうか確認します。 存在している場合は、現在の永続性コンテキストで行った更新やEntity間のリレーション関係の整合性を保つため、キャッシュしたイン スタンスを返却します。 存在していない場合は、永続性ユニットの共有キャッシュを探します。共有キャッシュにもない場合、SQL文を発行しデータベースに問 い合わせします。検索が成功した場合、Entityインスタンスを永続性コンテキストキャッシュに格納し、アプリケーションに返却します。 Entityインスタンスの更新、マージ、削除 管理されているEntityインスタンスの更新、削除、または非管理状態のEntityインスタンスの永続性コンテキストへのマージは永続性コ ンテキストキャッシュに反映されます。 データベースのレコードとの不整合について エンティティマネージャを使用し各操作を実行する際、同一トランザクションや別トランザクションにおいて、そのエンティティマネージャ 以外のアクセス方法でデータベースの同一レコードを更新すると、永続性コンテキスト内で管理されたEntityインスタンスとデータベー スのレコード間で不整合が発生する可能性があります。 これを回避するためには、エンティティマネージャの各操作に対するフラッシュやEntityデータの最新化を必要に応じて明示的に実行 してください。 エンティティマネージャの各操作をフラッシュする方法は、JPA規約を参照してください。また、Entityデータを最新化する方法につい ては以下に説明します。 Entityデータの最新化 Entityインスタンスの永続化フィールドの最新データをデータベースから取得するため、以下の方法があります。 エンティティマネージャのrefreshメソッドを実行 Entityインスタンスをエンティティマネージャのrefreshメソッドに指定し本メソッドを実行すると、SQL文が発行され、レコードの最新 データが取得されます。最新データがEntityインスタンスに反映され永続性コンテキストキャッシュも更新されます。 JPQLクエリメソッドにInterstage永続性プロバイダのクエリヒントを使用 JPQLクエリーにリフレッシュのヒントを指定しクエリメソッドを実行すると、永続性コンテキストキャッシュと共有キャッシュを検索せず にデータベースに問い合わせます。成功した場合、レコードを取得してEntityインスタンスのコピーを作成して、コピーを共有キャッ シュに格納し、もとのEntityインスタンスをアプリケーションに返却します。永続性コンテキストキャッシュにそのEntityがすでに存在 した場合、既存のオブジェクトが非管理状態になり、まだフラッシュしなかった修正がデータベースに更新されません。共有キャッ シュにEntityがすでに存在した場合、既存のオブジェクトを新しいオブジェクトに上書きします。 注意 データの最新化の各機能における注意事項を以下に説明します。 ・ エンティティマネージャのrefreshメソッドを実行する場合 - コンテナ管理のエンティティマネージャを使用した場合、このメソッドをトランザクション中しか実行できないため、データ更新の ない操作でもトランザクションを開始する必要があります。 - refreshメソッドに指定するEntityインスタンスを取得した時にもSQL文を発行するので、データベースへ2回アクセスします。 - 128 - ・ Interstage永続性プロバイダのクエリヒントを使用する場合 - 永続性コンテキストですでに行った更新やEntity間のリレーション関係の整合性を保てません。 - Interstage永続性プロバイダの独自機能であるため、その他の永続性プロバイダで該当するヒントがない可能性があり、移植性 に影響があります。 リフレッシュ機能は以下のクエリヒントで指定します。 クエリヒント名 toplink.refresh toplink.refresh.casca de 値 (太字:省略値) 説明 true キャッシュに問い合わせせずにデータベースを検索します。検 索したEntityのコピーを作成しコピーを共有キャッシュに格納し ます。もとのEntityインスタンスをアプリケーションに返却しま す。 false データベースからの検索結果をキャッシュ内のEntityと比較し、 すでに存在した場合、キャッシュされたEntityインスタンスをア プリケーションに返却します。 CascadeAllParts 検索したEntityをリフレッシュします。このEntityとリレーションが 持つEntityが検索結果に含まれている場合、そのEntityもリフ レッシュします。 CascadeByMappin g 検索したEntityをリフレッシュします。リレーションのcascade定 義にCascadeType.REFRESHまたはCascadeType.ALLを指定 したEntityもリフレッシュします。その他のリレーションのEntityイ ンスタンスをリフレッシュしません。 NoCascading 検索したEntityをリフレッシュしますが、このEntityインスタンス とリレーションが持つEntityインスタンスはキャッシュ内に存在し た場合、データをリフレッシュせずにキャッシュしたオブジェクト を返却します。 値は大文字と小文字を区別しません。 toplink.refresh.cascadeヒントの設定を有効にするためには、toplink.refreshヒントをtrueに指定する必要があります。 クエリヒントはマッピング定義ファイルdeployment descriptor (orm.xml)のquery-hintタグ、アノテーション(@QueryHint)、または Query.setHintメソッドで指定します。 例 リフレッシュのヒントの定義例 @NamedQuery(name="Order.findOrdersByPK", query="SELECT o FROM Order o WHERE o.id = :id", hints={@QueryHint(name="toplink.refresh", value="true"), @QueryHint(name="toplink.refresh.cascade", value="CascadeAllParts")}) 5.8.2 永続性ユニットの共有キャッシュ 永続性ユニットはEntityクラスごとに共有キャッシュを管理しています。このキャッシュはすべての永続性コンテキストから参照できます。 このキャッシュのライフサイクルは永続性ユニットと同じなので、エンティティマネージャファクトリの作成からクローズまで使用されます。 以下に永続性ユニットの共有キャッシュの特徴を説明します。 - 129 - 共有キャッシュの参照タイミング 共有キャッシュの参照タイミングについては、「5.8.1 永続性コンテキストキャッシュ」を参照してください。 共有キャッシュの更新タイミング 永続性コンテキストをクローズする時、キャッシュ内のEntityインスタンスがコピーされ、共有キャッシュにマージされます。 以下に永続性コンテキストキャッシュと共有キャッシュの関係図と検索順番を示します。 1. クライアントからの要求により検索メソッドが実行される場合、まずは永続性コンテキストキャッシュから検索します。 2. 永続性コンテキストキャッシュにある場合、そのEntityインスタンスを返却します。ない場合は共有キャッシュを検索します。 3. 共有キャッシュにある場合、そのEntityインスタンスのコピーを作成してコピーを永続性コンテキストキャッシュに格納し、アプリ ケーションに返却します。共有キャッシュにもない場合、データベースへ問い合わせします。 データ更新の場合は、共有キャッシュ内のデータとデータベースのデータの整合性を保つために、キャッシュ機能を行のロック機能と 合わせて使用してください。行のロック機能については、「Java EE運用ガイド」-「行のロック機能」を参照してください。 共有キャッシュの解放タイミング 共有キャッシュ内に格納されているEntityインスタンスはエンティティマネージャファクトリがクローズされるタイミングで解放されます。コ ンテナ管理のエンティティマネージャを使用した場合、アプリケーションの停止時にエンティティマネージャファクトリがクローズされま す。チューニング設定により、Entityインスタンスがガーベッジコレクション(以降、GC)により破棄されます。 以下に、共有キャッシュに格納されるEntityインスタンスがGC対象になるタイミングを制御するオプションを説明します。 こ の 永 続 性 ユ ニ ッ ト プ ロ パ テ ィ を deployment descriptor (persistence.xml) ま た は javax.persistence.Persistence の createEntityManagerFactory(String, Map)メソッドに指定してください。 プロパティ名 toplink.cache.type.< ENTITY> toplink.cache.type.d efault 値 (太字:省略値) ・ Full 説明 特定のEntityに対応する共有キャッシュのタイプ ・ Weak ・ HardWeak その他のEntityの共有キャッシュのタイプ ・ SoftWeak toplink.cache.size.< ENTITY> toplink.cache.size.de fault 0~ MAX_INTEGER 省略値:1000 特定のEntityに対応する共有キャッシュタイプによるサイズ その他のEntityの共有キャッシュタイプによるサイズ - 130 - プロパティ名 toplink.cache.share d.<ENTITY> 値 (太字:省略値) ・ true 説明 特定のEntityに対応する共有キャッシュを有効・無効にする ・ false その他のEntityの共有キャッシュを有効・無効にする toplink.cache.share d.default 値は大文字と小文字を区別します。 プロパティの<ENTITY>にEntity名またはパッケージ名を含むEntityクラス名を記載します。定義しないEntityにはdefaultを記載したプ ロパティの設定、または省略値が使用されます。 フィールドの更新を行わずにテーブルからいつも最新の情報を取得したい場合は共有キャッシュを無効にしますが、一般的には共有 キャッシュを無効にする必要はありません。 特定のEntityに対応する共有キャッシュを無効にした場合、データの一貫性を保つためにそのEntityとrelationshipが持つEntityの共有 キャッシュも無効にしてください。 各共有キャッシュタイプについて以下に説明します。 キャッシュタ イプ 意味 推奨条件 Full Entityは削除されない限りメモリからフラッシュされま せん。指定したキャッシュサイズは初期サイズとして 使用され、上限サイズの設定はありません。 データが少なく、メモリが多い場合に使 用します。 Weak 弱い参照(java.lang.ref.WeakReference)でEntityイン スタンスを参照することにより、Fullよりメモリ使用量が 少なくなります。指定したキャッシュサイズは初期サ イズとして使用され、上限サイズの設定はありませ ん。 Java VM上でオブジェクトの参照がなく なるとEntityインスタンスがGCにより破棄 される可能性があるため、開始したトラン ザクションがサーバ側で継続される場合 だけ使用します。 HardWeak Weakに似ていますが、ハード参照を参照するサブ キャッシュも持っています。サブキャッシュサイズを超 えると使用頻度が低いEntityインスタンスがサブキャッ シュから弱い参照を使用しているキャッシュに移動さ れます。 指定したキャッシュサイズはサブキャッシュに格納す るEntityインスタンスの最大数です。 ハード参照されるEntityインスタンスが破 棄されないため、キャッシュするインスタ ンスの最大数をトランザクション中に参 照するEntityインスタンスの最大数と同 じに設定してください。 SoftWeak HardWeakとほぼ同じですが、サブキャッシュにソフト 参照(java.lang.ref.SoftReference)を使用しています。 指定したキャッシュサイズはサブキャッシュに格納す るEntityインスタンスの最大数です。 通常の環境でこのタイプを使用します。 キャッシュするインスタンスの最大数をト ランザクション中に参照するEntityインス タンスの最大数と同じに設定してくださ い。 アプリケーションの運用でサブキャッシュ にキャッシュされるオブジェクトが頻繁に GCにより破棄される場合、HardWeakの 使用を検討してください。 例 共有キャッシュタイプの定義例 <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" - 131 - version="1.0"> <persistence-unit name="com.company.my.pu"> <jta-data-source>jdbc/myDatasource</jta-data-source> <properties> <property name="toplink.cache.type.CountryCode" value="Full"/> <property name="toplink.cache.size.CountryCode" value="100"/> <property name="toplink.cache.shared.StockQuote" value="false"/> <property name="toplink.cache.size.default" value="200"/> </properties> </persistence-unit> </persistence> 5.9 Webサービスのチューニング Webサービスでは、Webコンテナの同時処理数や接続数などのチューニングが有効です。これらの設定については、「5.6 Webコンテ ナのチューニング」を参照してください。 また、エンドポイントがStateless Session Beanの場合、EJBコンテナのインスタンスプールのチューニングも有効です。インスタンスプー ルのチューニングについては「5.7.3 Enterprise Beanインスタンスのプーリング」を参照してください。 5.10 データベース連携環境のチューニング 物理的なデータベース接続はプール管理されてアプリケーションで共有されます。アプリケーションから接続の要求があった場合、ア プリケーションサーバは、接続プールから接続を取得して、アプリケーションに返却します。また、アプリケーションが接続を解放した場 合、アプリケーションサーバは、その接続をプールに返却します。このJDBC接続プールに対して以下のチューニングができます。 ・ プール内の接続数 ・ 接続検証 ・ トランザクション管理 ・ 詳細属性 各項目のチューニングは、Interstage Java EE管理コンソールの[JDBC] > [接続プール]、およびasadminコマンドで設定できます。詳細 は、以下のマニュアルを参照してください。また、詳細属性の定義項目は、JDBC接続プールの作成後に値を更新してください。 ・ Interstage Java EE管理コンソールヘルプ ・ 「リファレンスマニュアル(コマンド編)」-「定義項目参照/更新」 ・ 「リファレンスマニュアル(コマンド編)」-「create-jdbc-connection-poolサブコマンド」 ・ 「リファレンスマニュアル(コマンド編)」-「resources.jdbc-connection-poolの定義項目」 5.10.1 プール内の接続数 JDBC接続プールの接続数をチューニングするため、以下を設定できます。 プールサイズのスケールアップは、アプリケーションから接続要求を受けたときに必要に応じて実行されます。また、プールサイズのス ケールダウンは一定時間の間隔で定期的に実行されます。 プールされた接続は、IJServerクラスタまたはInterstage Java EE DASサービスの停止時に削除されます。 ・ 初期および最小プールサイズ ・ 最大プールサイズ ・ プールサイズ変更量 ・ アイドルタイムアウト ・ 最大待ち時間 これらの項目のチューニングは、Interstage Java EE管理コンソールまたはasadminコマンドで設定できます。 - 132 - ・ Interstage Java EE管理コンソールの場合 以下の画面で、設定できます。 - 「リソース」>「JDBC」>「接続プール」>「一般」 詳細はInterstage Java EE管理コンソールヘルプを参照してください。 ・ asadminコマンドの場合 JDBC接続プールを作成する時は、「リファレンスマニュアル(コマンド編)」-「create-jdbc-connection-poolサブコマンド」を参照して ください。 JDBC接続プールの項目を更新する時は、「リファレンスマニュアル(コマンド編)」-「定義項目参照/更新」と「resources.jdbc-connectionpoolの定義項目」を参照してください。 以下に、プールサイズのスケールダウン、およびスケールアップの動作について説明します。 プールの定期監視(プールサイズのスケールダウン) アプリケーションサーバでは、接続プールの状態を定期的に監視し、プールのリサイズを行います。以下の契機でプール監視用のリ サイザがスケジューリングされ、アイドルタイムアウトの間隔でリサイズタスクを実行します。 ・ プールの初期化時(注1) ・ 「すべての障害で」を有効に設定し、接続障害が検出された時(注2) 注1)プールの初期化は、IJServerクラスタまたはInterstage Java EE DASサービスがアプリケーションから最初の接続要求を受けたとき に実行されます。 注2)接続障害と判断される条件は、「5.10.2 接続検証」を参照してください。 プールのリサイズタスクでは、アイドルタイムアウトまたは接続検証に失敗するような不正な接続をすべてプールから取り除き、プール サイズ変更量を超えない範囲でサイズをスケールダウンさせようとします。不正な接続の数によっては、プールサイズ変更量を超える だけ削除されることがあります。削除の結果プールサイズの最小値を下回ってしまった場合には、最小値に達するまで接続を補完します。 具体的には、以下の手順で処理を実行します。ただし、説明のため以下の定義を使用します。 [プール内の接続数] = [使用されていない接続数] + [使用中の接続数] [削除予定数] = [プールサイズ変更量] - [1.~2.の処理で削除した数] [削除許容数] = [プール内の接続数] - [初期および最小プールサイズ] 1. アイドルタイムアウトが発生した接続を削除 接続のタイムスタンプから、アイドルタイムアウトが発生した接続を検出しプールから削除します。 2. 接続検証に失敗した接続を削除 検証に失敗した接続をプールから削除します。接続検証の詳細は、「5.10.2 接続検証」を参照してください。 3. 最大でも削除予定数だけの接続を削除 以下の条件を満たす場合、使用されていない接続を検索し、[削除予定数]を最大としてプールから削除します。条件を満たさな い場合は削除されません。 0 < [削除予定数] <= [削除許容数] 4. プールサイズの修正 1.~3.の処理の結果、以下を満たした場合は、[初期および最小プールサイズ]に達するまで接続を作成します。 [プール内の接続数] < [初期および最小プールサイズ] 接続要求に応じたプールサイズのスケールアップ アプリケーションからの接続要求の処理時、プール内の使用されていない接続の中で以下の2つの条件を満たす接続が存在しない場 合、プールサイズ変更量を超えない範囲でサイズをスケールアップさせます。 ・ 接続のマッチングに成功 - 133 - ・ 接続検証に成功 スケールアップ時のプール内の動作は、以下です。次の2つの定義を説明の中で使用します。 [プール内の接続数] = [使用されていない接続数] + [使用中の接続数] [生成許容数] = [最大プールサイズ] - [プール内の接続数] 条件 プール内の動作 [初期および最小プールサイズ]未満 (注1) [初期および最小プールサイズ]へ 達するまで接続を生成します。 [初期および最小プールサイズ]以 上、[最大プールサイズ]未満 [プールサイズ変更量]だけ生成可 能な場合 [プールサイズ変更量]だけ接続を 生成します。 [プールサイズ変更量]だけ生成す ると、[最大プールサイズ]を超えて しまう場合 [生成許容数]だけ接続を生成しま す。 接続は生成されません。(注2) [最大プールサイズ]と一致 注1) 接続検証の失敗により、プール内の使用されていない接続がすべて削除された場合などに該当します。 注2) ただし、接続のマッチングに失敗した未使用の接続が存在する場合、最大でプールサイズ変更量分だけ接続を再作成します。 接続のマッチング 接続のマッチングとは、プール内の接続の認証情報が接続要求時の認証情報と一致しているかを検証する機能です。接続要求時の 認証情報の指定方法は、「Java EE運用ガイド」-「リソースアクセス時の認証情報」を参照してください。 5.10.2 接続検証 プールされた接続をアプリケーションに返却する前に、アプリケーションサーバは接続が有効か検証できます。この検証によって、デー タベースがネットワーク障害かデータベース・サーバ障害により利用不可となった場合、その接続をプールから破棄し、再度プールか ら接続を獲得して有効な接続を返却します。プールに有効な接続が存在しなかった場合、データベースから新たな接続を獲得するた め、データベース接続を再確立できます。 接続検証が有効の場合には、以下が設定できます。 ・ 検証方法 ・ テーブル名 ・ すべての障害で これらの項目のチューニングは、Interstage Java EE管理コンソールまたはasadminコマンドで設定できます。 ・ Interstage Java EE管理コンソールの場合 以下の画面で、設定できます。 - 「リソース」>「JDBC」>「接続プール」>「一般」 詳細はInterstage Java EE管理コンソールヘルプを参照してください。 ・ asadminコマンドの場合 JDBC接続プールを作成する時は、「リファレンスマニュアル(コマンド編)」-「create-jdbc-connection-poolサブコマンド」を参照して ください。 JDBC接続プールの項目を更新する時は、「リファレンスマニュアル(コマンド編)」-「定義項目参照/更新」と「resources.jdbc-connectionpoolの定義項目」を参照してください。 また、接続検証が有効の場合には、アプリケーションサーバは以下の契機で接続検証を実効します。 - 134 - 接続検証の実行契機 A)プールの定期監視時の接続検証 アイドルタイムアウトの間隔で定期的に接続検証を実行します。 B)アプリケーションからの接続要求時の接続検証 接続を生成してからプールへ格納する前(B1)とプールから取得後にアプリケーションへ返却する前(B2)の2種類の契機で接続検 証が実行されます。 B1)接続生成時の接続検証 アプリケーションサーバはDBとの接続確立の直後、プールへ格納する前に事前に接続検証を実行します。 接続検証に失敗した場合、接続生成に失敗と判断し、アプリケーションへ例外を返却します。 B2)プール内から取得した接続に対する接続検証 プール内から取得した接続をアプリケーションへ返却する前に、接続検証を実行します。 プールサイズのスケールアップにより新規作成された接続のうちアプリケーションへ返却する接続に対しては、検証不要のため 接続検証をスキップします。プール初期化時に生成される接続は、プール内から取得した接続と見なし接続検証を実行しま す。 - 「すべての障害で」が有効の時: 「すべての障害で」の処理で一時的にプール内の接続が0になるのを補うために新たな接続を生成します。もしこの時点で 再確立の処理が完了し未使用な接続があれば、置き換えて(破棄して)要求元へ接続を返却します。 - 「すべての障害で」が無効の時: 検証失敗の接続を削除し、プールから次の接続を取り出して再度接続検証を実施します。プール内の使用されていない 接続がすべて接続検証に失敗した場合の動作は、「接続要求に応じたプールサイズのスケールアップ」を参照してくださ い。 注意 Interstage側のプーリング機能が無効の場合、接続を生成してからプールへ格納する前(B1) のタイミングのみで接続検証が実行され ます。 接続障害と判断される条件 「すべての障害で」が有効の場合に接続障害と判断される条件は、以下です。 ・ 接続検証の実行時にJDBCドライバから例外が返却された場合 注意 ・ データベース接続を再確立できなかった場合には、例外が返却されます。 ・ 自動的に再接続を行うことでデータベースで異常が発生しても業務継続ができるため、接続検証を有効にすることがお勧めです が、アプリケーションでgetConnectionメソッドを実行して接続プールから接続を獲得する時にも検証を行うため、性能オーバーヘッ ドが発生します。接続検証が不要な場合で、処理性能を向上させたい場合には必要に応じて接続検証を無効にしてください。 ・ 接続検証を無効に設定した場合、検証方法およびテーブル名の指定も無効となります。 ・ 接続生成時に実行される接続検証は、モニタロギングの採取対象外です。このため、「検証に失敗した物理接続数」は更新されま せん。 5.10.3 トランザクション管理 JDBC接続プールのトランザクション管理では、以下を設定できます。詳細は、「Java EE運用ガイド」-「データベース連携アプリケー ションの作成方法」を参照してください。 ・ 非トランザクション接続 ・ トランザクション開始後の接続のみ参加 - 135 - ・ トランザクション遮断 ・ 遮断レベル これらの項目のチューニングは、Interstage Java EE管理コンソールまたはasadminコマンドで設定できます。 ・ Interstage Java EE管理コンソールの場合 以下の画面で、設定できます。 - 「リソース」>「JDBC」>「接続プール」>「一般」 詳細はInterstage Java EE管理コンソールヘルプを参照してください。 ・ asadminコマンドの場合 JDBC接続プールを作成する時は、「リファレンスマニュアル(コマンド編)」-「create-jdbc-connection-poolサブコマンド」を参照して ください。 JDBC接続プールの項目を更新する時は、「リファレンスマニュアル(コマンド編)」-「定義項目参照/更新」と「resources.jdbc-connectionpoolの定義項目」を参照してください。 5.10.4 詳細属性 定義済みのJDBC接続プールをチューニングするため、以下を設定できます。 ・ 文のタイムアウト ・ プーリング ・ リークタイムアウト ・ リーク再要求 ・ 作成再試行回数 ・ 再試行間隔 ・ 監査ログへのアクセス情報出力 これらの項目のチューニングは、Interstage Java EE管理コンソールまたはasadminコマンドで設定できます。 ・ Interstage Java EE管理コンソールの場合 以下の画面で、設定できます。 - 「リソース」>「JDBC」>「接続プール」>「詳細」 詳細はInterstage Java EE管理コンソールヘルプを参照してください。 ・ asadminコマンドの場合 「リファレンスマニュアル(コマンド編)」-「定義項目参照/更新」と「resources.jdbc-connection-poolの定義項目」を参照してください。 各定義項目の詳細は、「Java EE運用ガイド」-「JDBC接続プールの定義項目」を参照してください。 注意 文のタイムアウトに関する注意事項 ・ データベースにSymfowareを使用する場合、文のタイムアウトは利用できません。 ・ PowerGres PlusはStatementのsetQueryTimeoutメソッドをサポートしません。setQueryTimeoutメソッドは実装されていません。このメ ソッドを使用する場合、エラーとはならず、文のタイムアウトも発生しません。 詳細は、以下のURLを参照してください。 http://archives.postgresql.org/pgsql-bugs/2008-04/msg00161.php PowerGres Plusの詳細は、PowerGres Plusのマニュアルを参照してください。 リークタイムアウトとリーク再要求に関する注意事項 - 136 - リーク再要求が有効と設定された場合、接続リークが検出されると、自動的にその物理接続を破棄します。接続時にデータベースにア クセス中、または、トランザクション中の場合、ユーザアプリケーションの実行に失敗する可能性があります。このようなことを避けるため に、アプリケーションが発行するSQL文の実行時間や環境に応じて見積もった値を、利用するJDBC接続プールの「文のタイムアウト」 に設定してください。 SQL文の実行時間を制限することにより、リーク再要求で自動的に物理接続を破棄するとき、その接続がデータベースにアクセスして いる可能性を低下させます。 なお、「リークタイムアウト」に十分に長い時間を設定することにより、検出された接続に確実にリークが発生した(つまり、接続がデータ ベースアクセスに使われない)ことを保証します。また、JDBC接続を利用するときに、同一の接続を長時間利用しないように、利用完了 後すぐにクローズしてください。 プーリングに関する注意事項 Interstage側のプーリング機能が無効の場合、以下のチューニングはできません。 ・ 初期および最小プールのサイズ ・ 最大プールのサイズ ・ プールサイズの変更量 ・ アイドルタイムアウト ・ 最大待ち時間 ・ すべての障害で 5.11 コネクタのチューニング 物理的なEISとの接続はプール管理されてアプリケーションで共有されます。アプリケーションから接続の要求があった場合、アプリケー ションサーバは、接続プールから接続を取得して、アプリケーションに返却します。また、アプリケーションが接続を解放した場合、アプ リケーションサーバは、その接続をプールに返却します。このコネクタ接続プールに対して以下のチューニングができます。 ・ プール内の接続数 ・ 接続検証 ・ トランザクション管理 ・ シャットダウンタイムアウト 各項目のチューニングは、Interstage Java EE管理コンソールの[コネクタ] > [コネクタ接続プール]、およびasadminコマンドで設定でき ます。詳細は、以下のマニュアルを参照してください。 ・ Interstage Java EE管理コンソールヘルプ ・ 「リファレンスマニュアル(コマンド編)」-「定義項目参照/更新」 ・ 「リファレンスマニュアル(コマンド編)」-「create-connector-connection-poolサブコマンド」 ・ 「リファレンスマニュアル(コマンド編)」-「resources.connector-connection-poolの定義項目」 5.11.1 プール内の接続数 コネクタ接続プールの接続数をチューニングするため、以下を設定できます。 プールサイズのスケールアップは、アプリケーションから接続要求を受けたときに必要に応じて実行されます。また、プールサイズのス ケールダウンは一定時間の間隔で定期的に実行されます。プールされた接続は、IJServerクラスタまたはInterstage Java EE DASサー ビスの停止時に削除されます。 ・ 初期および最小プールサイズ ・ 最大プールサイズ ・ プールサイズ変更量 ・ アイドルタイムアウト - 137 - ・ 最大待ち時間 以下に、プールサイズのスケールダウン、およびスケールアップの動作について説明します。 プールの定期監視(プールサイズのスケールダウン) アプリケーションサーバでは、接続プールの状態を定期的に監視し、プールのリサイズを行います。以下の契機でプール監視用のリ サイザがスケジューリングされ、アイドルタイムアウトの間隔でリサイズタスクを実行します。 ・ プールの初期化時(注1) ・ 「すべての障害で」を有効に設定し、接続障害が検出された場合(注2) 注1)プールの初期化は、IJServerクラスタまたはInterstage Java EE DASサービスがアプリケーションから最初の接続要求を受けたとき に実行されます。 注2)接続障害と判断される条件は、「5.10.2 接続検証」を参照してください。 プールのリサイズタスクでは、アイドルタイムアウトまたは接続検証に失敗するような不正な接続をすべてプールから取り除き、プール サイズ変更量を超えない範囲でサイズをスケールダウンさせようとします。不正な接続の数によっては、プールサイズ変更量を超える だけ削除されることがあります。削除の結果プールサイズの最小値を下回ってしまった場合には、最小値に達するまで接続を補完します。 具体的には、以下の手順で処理を実行します。ただし、説明のため以下の定義を使用します。 [プール内の接続数] = [使用されていない接続数] + [使用中の接続数] [削除予定数] = [プールサイズ変更量] - [1.~2.の処理で削除した数] [削除許容数] = [プール内の接続数] - [初期および最小プールサイズ] 1. アイドルタイムアウトが発生した接続を削除 接続のタイムスタンプから、アイドルタイムアウトが発生した接続を検出しプールから削除します。 2. 接続検証に失敗した接続を削除 検証に失敗した接続をプールから削除します。接続検証の詳細は、「5.10.2 接続検証」を参照してください。 3. 最大でも削除予定数だけの接続を削除 以下の条件を満たす場合、使用されていない接続を検索し、[削除予定数]を最大としてプールから削除します。条件を満たさな い場合は削除されません。 0 < [削除予定数] <= [削除許容数] 4. プールサイズの修正 1.~3.の処理の結果、以下を満たした場合は、[初期および最小プールサイズ]に達するまで接続を作成します。 [プール内の接続数] < [初期および最小プールサイズ] 接続要求に応じたプールサイズのスケールアップ アプリケーションからの接続要求の処理時、プール内の使用されていない接続の中で以下の2つの条件を満たす接続が存在しない場 合、プールサイズ変更量を超えない範囲でサイズをスケールアップさせます。 ・ 接続のマッチングに成功 ・ 接続検証に成功 スケールアップ時のプール内の動作は、以下です。次の2つの定義を説明の中で使用します。 [プール内の接続数] = [使用されていない接続数] + [使用中の接続数] [生成許容数] = [最大プールサイズ] - [プール内の接続数] 条件 プール内の動作 [初期および最小プールサイズ]未満 (注1) [初期および最小プールサイズ]へ 達するまで接続を生成します。 - 138 - 条件 [初期および最小プールサイズ]以 上、[最大プールサイズ]未満 プール内の動作 [プールサイズ変更量]だけ生成可 能な場合 [プールサイズ変更量]だけ接続を 生成します。 [プールサイズ変更量]だけ生成す ると、[最大プールサイズ]を超えて しまう場合 [生成許容数]だけ接続を生成しま す。 接続は生成されません。(注2) [最大プールサイズ]と一致 注1) 接続検証の失敗により、プール内の使用されていない接続がすべて削除された場合などに該当します。 注2) ただし、接続のマッチングに失敗した未使用の接続が存在する場合、最大でプールサイズ変更量分だけ接続を再作成します。 接続のマッチング 接続のマッチングとは、プール内の接続の認証情報が接続要求時の認証情報と一致しているかを検証する機能です。Java EE Connector Architecture規約の「Connection Matching Contract」に該当します。接続のマッチングが成功、または失敗と判定される条件は以下で す。また、接続要求時の認証情報の指定方法は、「Java EE運用ガイド」-「リソースアクセス時の認証情報」を参照してください。 ・ マッチングに失敗: javax.resource.spi.ManagedConnectionFactory イ ン タ フ ェ ー ス の matchManagedConnections() メ ソ ッ ド の 返 却 値 が null 、 ま た は ResourceExceptionが返却される場合 ・ マッチングに成功: javax.resource.spi.ManagedConnectionFactoryインタフェースのmatchManagedConnections()メソッドの返却値がManagedConnection オブジェクトの場合 5.11.2 接続検証 プールされた接続をアプリケーションに返却する前に、アプリケーションサーバは接続が有効か検証できます。この検証によって、EIS がネットワーク障害かEIS自身の障害により利用不可となった場合、その接続をプールから破棄し、再度プールから接続を獲得して有 効な接続を返却します。プールに有効な接続が存在しなかった場合、EISから新たな接続を獲得するため、接続を再確立できます。 接続検証には、以下が設定できます。 ・ 接続検証 ・ すべての障害で 接続検証の成功/失敗について 接続検証が有効の場合、以下の処理により判定します。 ・ 検証成功 - javax.resource.spi.ValidatingManagedConnectionFactoryインタフェースを実装していない時 - ValidatingManagedConnectionFactoryインタフェースのgetInvalidConnections()メソッドの返却値がnull、サイズ0のSetオブジェ クト、またはjavax.resource.ResourceExceptionを返却する時 ・ 検証失敗 - ValidatingManagedConnectionFactoryインタフェースのgetInvalidConnections()メソッドの返却値が0より大きなサイズのSetオブ ジェクトを返却する時 - 接続検証の実行前に、すでに対象となる接続で障害が検出されているとき 接続検証の実行契機 A)プールの定期監視時の接続検証 アイドルタイムアウトの間隔で定期的に接続検証を実行します。接続検証に失敗した場合の動作は、「プールの定期監視(プール サイズのスケールダウン)」を参照してください。 - 139 - B)アプリケーションからの接続要求時の接続検証 プール内から取得した接続をアプリケーションへ返却する前に、接続検証を実行します。プールサイズのスケールアップにより新規 作成された接続のうちアプリケーションへ返却する接続に対しては、検証不要のため接続検証をスキップします。また、プール初期 化時に生成される接続は、プール内から取得した接続と見なし接続検証を実行します。接続検証に失敗した場合は、「すべての 障害で」が有効かどうかで動作が変わります。 - 「すべての障害で」が有効の時: 「すべての障害で」の処理で一時的にプール内の接続が0になるのを補うために新たな接続を生成します。もしこの時点で再 確立の処理が完了し未使用な接続があれば、置き換えて(破棄して)要求元へ接続を返却します。 - 「すべての障害で」が無効の時: 検証失敗の接続を削除し、プールから次の接続を取り出して再度接続検証を実施します。プール内の使用されていない接続 がすべて接続検証に失敗した場合の動作は、「接続要求に応じたプールサイズのスケールアップ」を参照してください。 接続障害と判断される条件 「すべての障害で」が有効の場合に接続障害と判断される条件は、以下です。 ・ javax.resource.spi.ManagedConnectionインタフェースのcleanup()メソッドの実行時に例外が発生した場合 ・ javax.resource.spi.ConnectionEventListenerインタフェースのconnectionErrorOccurred()メソッドをリソースアダプタから呼び出した場 合 javax.resource.spi.ConnectionEventListener の 実 装 は 、 ア プ リ ケ ー シ ョ ン サ ー バ か ら javax.resource.spi.ManagedConnection の addConnectionEventListener()メソッドが呼び出されたときに渡されます。「すべての障害で」を有効にする場合、EISとの接続障害に対 する通知処理を実装してください。 注意 ・ 接続を再確立できなかった場合には、例外が返却されます。 ・ 接続の検証には若干の性能オーバーヘッドが発生します。 5.11.3 トランザクション管理 コネクタ接続プールのトランザクション管理では、以下を設定できます。詳細は、「Java EE運用ガイド」-「アウトバウンド・リソースアダプ タのトランザクション制御」を参照してください。 ・ トランザクションサポート 5.11.4 シャットダウンタイムアウト コネクタサービスで以下を設定できます。 ・ シャットダウンタイムアウト リソースアダプタクラスを実装したアプリケーションを運用する場合、アプリケーションサーバーは、リソースアダプタの停止処理である endpointDeactivation()メソッドおよびstop()メソッドの完了を指定した時間だけ待ち合わせます。 指定した時間内に停止処理が完了しない場合、アプリケーションサーバーはその後のアプリケーションの非活性化処理を継続します。 endpointDeactivation()メソッドやstop()メソッドからの復帰が遅延する可能性のあるアプリケーションの運用に有効です。 リソースアダプタの停止処理は、リソースアダプタ単位に生成される停止用スレッドにより並列に処理されます。シャットダウンタイムアウ トは、Interstage Java EE DASサービスやIJServerクラスタの単位に設定でき、設定したターゲットに配備された全リソースアダプタに対 して適用されます。 以下の方法で設定してください。 1. ツリービューから「設定」を選択し、設定名をクリックします。 2. 「コネクタサービス」を選択します。 3. シャットダウンタイムアウト(秒)を入力し「保存」をクリックします。 4. IJServerクラスタ、またはInterstage Java EE DASサービスを再起動します。 - 140 - 同様の操作は、asadminコマンドのsetサブコマンドからも行うことができます。詳細は、「リファレンスマニュアル(コマンド編)」-「configs の定義項目」を参照してください。 注意 リソースアダプタの停止処理はendpointDeactivation()メソッド、stop()メソッドの順番に実行されます。endpointDeactivation()メソッドから の復帰がシャットダウンタイムアウトで指定した時間以内に完了せず、エンドポイントの回収処理がstop()メソッドの呼び出し直前に未完 了だった場合、再度endpointDeactivation()メソッドを呼び出してからstop()を呼び出します。 5.12 トランザクションサービスのチューニング トランザクションサービスのチューニングについて、以下に説明します。 各定義項目の詳細は、「Java EE運用ガイド」-「トランザクションサービスの定義項目」を参照してください。 トランザクションサービスの時間監視機能の設定値について トランザクションサービスの時間監視機能には以下の3種類の機能があります。 機能名 説明 トランザクションタイムアウト トランザクションが完了するまでの時間を監視します。 再試行タイムアウト グローバルトランザクション使用時に使用できます。 トランザクションが複数のサーバにわたっている場合、トラン ザクション情報の問い合わせに失敗したサーバに対して再 接続を試みる時間を設定します。 XAResourceに設定するトランザクションタイムアウ ト グローバルトランザクション使用時に使用できます。 グローバルトランザクションで利用するXAResourceに対して setTransactionTimeoutメソッドを使用してタイムアウト値を設 定します。 上記の監視機能を併用する場合、時間の設定は以下のように設定してください。 ・ T(x)>T(t)>T(r) T(x):XAResourceに設定するトランザクションタイムアウト T(t):トランザクションタイムアウト T(r):再試行タイムアウト キーポイント処理 キーポイント処理とは、トランザクションログファイルを圧縮する処理のことです。トランザクションサービスの定義でキーポイント処理を 実行するトランザクション数の間隔を指定できます。 キーポイント処理の実行頻度の大小は、トランザクションのログファイルサイズとパフォーマンスに対して以下のように影響します。設定 値のキーポイント処理への影響度合いは、トランザクションの処理内容に依存します。 ・ 大きくした場合 - ログファイルサイズ:大きくなる - パフォーマンス:向上する ・ 小さくした合 - ログファイルサイズ:小さくなる - パフォーマンス:劣化する ログファイルサイズは以下の式で見積もりできます。 ・ キーポイント間隔の設定値 × 0.0005Mバイト + 0.15Mバイト - 141 - 5.13 ORBのチューニング ORBのチューニングについて説明します。 5.13.1 ORB Java EEは、異なるマシンに配置されているオブジェクトや別プロセスのオブジェクト間でリクエストを呼び出す場合、ORBを介してIIOP 通信できます。 ORBの設定について以下に説明します。 IJServerクラスタの場合、以下に示すORBの設定項目を変更できます。 ORB設定 デフォルト値 意味 効果 総接続数 1024 IIOP通信の最大同時接続数を指定しま す。 (注1)(注2) 総接続数を超えて同時に通信することは できません。 (注3) 最大同時接続数を指定することによっ て、コネクション接続で使用するメモリや リソースを制御します。 最大メッセージ分割 サイズ (byte単位) 1024 IIOPメッセージの最大フラグメントサイズ を設定します。 (注4)(注5) (注6)(注7) IIOPメッセージのエンコード処理を最大 フラグメントサイズで行います。全データ をまとめてエンコードするのに比べて使 用するJavaヒープ領域を圧縮できます。 アプリケーションクライアントコンテナまたはスタンドアロンクライアントの場合、以下に示すORBの設定項目を変更できます。 ORB設定 最大メッセージ分割 サイズ (byte単位) デフォルト値 4096 意味 効果 IIOPメッセージの最大フラグメントサイズ を設定します。(注4)(注5)(注6)(注7) IIOPメッセージのエンコード処理を最大 フラグメントサイズで行います。全データ をまとめてエンコードするのに比べて使 用するJavaヒープ領域を圧縮できます。 注1) 100未満の値を設定しても、接続数が100以上にならないと接続の回収は行われません。 注2) 確立済みの接続が存在する場合、その接続を使用して通信します。例えばあるプロセスがマルチスレッドでリクエストを呼び出し た場合、呼出し先が単一プロセスならば接続は1つだけ使用されます。 注3) 接続数がこの値を超えるとアイドル状態の接続の回収(コネクション切断)が行われます。使用中の接続数が総接続数まで到達し ている状態で、新規接続を行おうとすると、新規接続のコネクション自身が回収されます。 注4) 最大メッセージ分割サイズはデータ送信時の設定であり、クライアントからのリクエスト送信時と、サーバーからのリプライ送信時に 有効な機能になります。 例えば、エンコードされた通信データが70000byteで、最大メッセージ分割サイズが30000byteの場合、図のように分割して、IIOP通信 が開始されます。 - 142 - 送信された通信データは、受信側の受信バッファに格納された後、先頭データから順に業務データにデコードされ、ユーザアプリケー ションに渡されます。 注5) 1024byteより小さな値は設定しないでください。最大メッセージ分割サイズが1024byteより小さい場合、想定される最大クライアン ト多重度の2倍のスレッドが必要になります。このため、サーバー側で必要なスレッド数が見積もり数を超過してしまう可能性があります。 なお、スレッド数の見積もりについては、「5.7.1 スレッドプーリング」を参照してください。 注6) 256000以上の値を設定する場合、接続先の最大受信バッファサイズを本設定値より大きい値とする必要があります。最大受信 バッファサイズについては、「5.13.2 通信データサイズに関する注意事項」を参照してください。 注7) 設定値は、Java VM上でのヒープ使用量に影響します。 最大メッセージ分割サイズにより、IIOP通信時に獲得するバッファ領域のサイズが変動しますので、最大メッセージ分割サイズを変更 する際は、実際に送受信される業務データとは別に、最大メッセージ分割サイズの設定によるヒープ使用量を考慮して、Java VMの ヒープ領域サイズを見積もってください。 以下の計算式のうち、大きいほうの結果が必要なヒープ使用量になります。 ・ IJServerクラスタ起動時に必要なヒープ使用量 IJServerクラスタを起動するためのIIOP通信では、以下のヒープ使用量が必要です。 IJServerクラスタ起動時のヒープ使用量=最大メッセージ分割サイズ×3 ・ アプリケーション実行時に必要なヒープ使用量 アプリケーションを実行するためのIIOP通信では、以下のヒープ使用量が必要です。 クライアント側で必要なヒープ使用量=(最大メッセージ分割サイズ+最大受信バッファサイズ)×最大同時リクエスト送信数 サーバー側で必要なヒープ使用量=(最大メッセージ分割サイズ+最大受信バッファサイズ)×想定される最大クライアント同時 接続数 最大同時リクエスト送信数:クライアントプロセスの同時実行スレッド数に相当します。 想定される最大クライアント同時接続数:デフォルトスレッドプールの最大プールサイズに相当します。 - 143 - ORB設定は、以下の方法で設定します。 総接続数 Interstage Java EE管理コンソール、およびasadminコマンドを使用して変更・参照できます。詳細については、以下のマニュアルを参照 してください。 ・ Interstage Java EE管理コンソールヘルプ ・ リファレンスマニュアル(コマンド編)の「configs.config.iiop-serviceの定義項目」のorb.max-connections(総接続数) 設定変更時は、IJServerクラスタを再起動する必要があります。 最大メッセージ分割サイズ ・ IJServerクラスタの場合 Interstage Java EE管理コンソール、およびasadminコマンドを使用して変更・参照できます。詳細については、以下のマニュアルを 参照してください。 - Interstage Java EE管理コンソールヘルプ - リファレンスマニュアル(コマンド編)「configs.config.iiop-serviceの定義項目」の orb.message-fragment-size(最大メッセージ分 割サイズ) 設定変更時は、IJServerクラスタを再起動する必要があります。 ・ アプリケーションクライアントコンテナに設定する場合 環境変数VMARGSに以下の値を設定します。 -Dcom.sun.corba.ee.giop.ORBFragmentSize=設定値 詳細については、以下のマニュアルを参照してください。 - 「Java EE運用ガイド」-「Java EEアプリケーションクライアントの環境設定」 ・ スタンドアロンクライアントの場合 Java VMオプションに以下の値を設定します。 -Dcom.sun.corba.ee.giop.ORBFragmentSize=設定値 5.13.2 通信データサイズに関する注意事項 最大受信バッファサイズの拡張について 最大メッセージ分割サイズの拡張や、非フラグメントモード使用時、接続先の送信データサイズが256000byteを超える場合がないか確 認してください。 接続先の送信データサイズが256000byteを超える場合、最大受信バッファサイズを拡張する必要があります。 最大受信バッファサイズの設定は、Java VMオプションで指定します。 最大受信バッファサイズはデータ受信時の設定であり、クライアントからのリクエスト受信時と、サーバーからのリプライ受信時に有効な 機能になります。 プロパティ名 com.sun.corba.ee.transport.ORBMaximumReadByteBufferSize 設定値 byte 値の範囲 256000~2147483647 - 144 - デフォルト値 256000 設定方法 - スタンドアロンクライアントの場合 Java VMオプションに設定します。 -Dcom.sun.corba.ee.transport.ORBMaximumReadByteBufferSize=設定値 - アプリケーションクライアントコンテナに設定する場合 環境変数VMARGSに設定します。 詳細については、以下のマニュアルを参照してください。 - 「Java EE運用ガイド」-「Java EEアプリケーションクライアントの環境設定」 - IJServerクラスタに設定する場合 Interstage Java EE管理コンソール、またはasadminコマンドを使用してJava VMオプションに設定します。 -Dcom.sun.corba.ee.transport.ORBMaximumReadByteBufferSize=設定値 詳細については、以下のマニュアルを参照してください。 - Interstage Java EE管理コンソールヘルプ - リファレンスマニュアル(コマンド編)の「configs.config.java-configの定義項目」のjava-config.jvm-options(JVMオプション) 設定変更時は、IJServerクラスタを再起動する必要があります。 接続先から受信したデータは、受信バッファに格納されます。受信バッファのサイズは、受信するデータサイズにより、初期値64000byte から、最大受信バッファサイズの設定値まで、2倍ずつ(64000→128000→256000)拡張されます。 受信するデータサイズが、最大受信バッファサイズを超過した場合、データ受信処理は失敗し、以下の警告メッセージが通知されま す。 ・ IOP00410233 本警告メッセージが通知された場合は、接続先の送信データサイズが最大受信バッファサイズより小さくなるようにチューニングしてく ださい。 Windows Server(R) 2008/Windows Server(R) 2008 R2における処理遅延について オペレーションシステムの仕様(KB2020447)により、以下の条件でデータ送受信中に5秒間の処理遅延が発生する場合があります。 ・ Java EEのクライアントとサーバを同一マシンで運用する。 ・ 65536バイトから1048576バイトの通信データを一度に送受信する。 本現象を回避するためには、以下のどちらかの対処を行ってください。 ・ 最大メッセージ分割サイズを65536バイト未満に設定する。 ・ ユーザーアプリケーションで一度に送受信する通信データサイズを以下の範囲で調整する。 - 65536バイト未満 - 1048577バイト以上 5.14 予兆監視機能から警告が通知された場合の対処 予兆監視機能が提供する警告メッセージ(ISJEE_OM3204)には、以下の2つの種類があります。事象の種類は、警告メッセージの可変 情報である詳細メッセージで通知します。 - 145 - ・ 予兆監視警告メッセージ(Javaヒープ) Java VMのメモリ割当てプール(注)およびPermanent世代領域を監視して、Javaヒープ不足の危険性を警告メッセージで通知しま す。 ・ 予兆監視警告メッセージ(ガーベジコレクション) Java VMのガーベジコレクション処理の影響で業務レスポンス低下が発生する可能性を検出し、警告メッセージで通知します。 注) Javaヒープは、メモリ割当てプール(New世代領域とOld世代領域)およびPerm世代領域に大別されます。以下の説明で、単に「Java ヒープ」と記載している場合は、メモリ割当てプールを指します。Javaヒープの構造については、「チューニングガイド」の「JDK/JREの チューニング」の「基礎知識」を参照してください。 なお、警告メッセージに含まれる詳細メッセージが同一の場合、同一Java VMプロセス上で同じ詳細メッセージの予兆が検出されて も、前回の出力から10分間抑止します。これは同一原因のメッセージの出力過多を防ぐためです。 また、何らかの要因でJavaアプリケーションの実行環境が変わった場合には、たとえ実行するJavaアプリケーション自体に変更がない 場合であっても、Javaアプリケーション実行時におけるオブジェクトの使われ方(オブジェクトの生成や不要となるタイミングなど)が変化 し、それに伴ってガーベジコレクション処理の発生状況も変化する場合があります。 その結果、従来環境では出力されなかった本メッセージが、変更後の実行環境では出力されるようになることがあります。 そのためJavaアプリケーションを変更しない場合であっても、以下の例のような要因でJavaアプリケーションの実行環境を変更した場合 には、Javaヒープに関する指定を、再度、チューニングする必要があります。 例 ・ アプリケーションサーバーのバージョンを変更した場合 ・ JDK/JREのバージョンを変更した場合 ・ 実行モードを32ビットから64ビットの環境へ変更した場合 ・ ハードウェアを変更した場合 ・ OSを変更した場合 5.14.1 予兆監視警告メッセージ(Javaヒープ) Java VMのメモリ割当てプールおよびPermanent世代領域を監視して、Javaヒープ不足の危険性を警告メッセージ(ISJEE_OM3204)で 通知します。 JavaヒープおよびPermanent世代領域の問題を通知する警告メッセージには、3種類の詳細メッセージがあります。この他の詳細メッ セージは、「5.14.2 予兆監視警告メッセージ(ガーベジコレクション)」を参照してください。 詳細メッセージは、以下の発生条件で出力されます。 なお、詳細メッセージに含まれる時刻情報のフォーマットは「年/月/日 時:分:秒.ミリ秒」となります。 詳細メッセージ 警告の意味 発生条件 There are possibilities of OutOfMemoryError because of the lack of the memory: TIME={0} SIZE={1} TIME: 発生時刻 SIZE: Javaヒープ領域への追加量 の目安(バイト単位)(注) Javaヒープ不足のため、 OutOfMemoryErrorが発生する危 険性があります。 Full GC直後のJavaヒープ使用率 が95%より大きい場合。 または、Full GC直後のJavaヒープ 使用率が90%より大きく、かつ、前 回のFull GC発生時よりJavaヒープ 使用サイズが増加している状態が 3回以上続いた場合。 There are possibilities of OutOfMemoryError because of the lack of the Perm region: TIME={0} SIZE={1} TIME: 発生時刻 SIZE: Permanent世代領域への追 加量の目安(バイト単位)(注) Permanent世代領域不足のため、 OutOfMemoryErrorが発生する危 険性があります。 Permanent世代領域の使用量が 90%より大きい場合。 - 146 - 詳細メッセージ 警告の意味 発生条件 OutOfMemoryError warning is occurred because the Perm region is exhausted: TIME={0} SIZE={1} TIME: 発生時刻 SIZE: Permanent世代領域の増加 量(バイト単位) Permanent世代領域の使用量が急 増しているため、 OutOfMemoryErrorが発生する危 険性があります。 前回の測定からのPermanent世代 領域の使用量の増加が、 Permanent世代領域全体の1割より 大きく、かつ、次も同じ割合で増え ると仮定したときのPermanent世代 領域の使用率が、90%より大きい 場合。 なお「SIZE」として通知している値 は、同じ割合で増えると仮定した際 に用いた大きさ(増加量)です。 注) 警告を回避するためには、警告発生時のJavaヒープ領域またはPermanent世代領域のサイズを大きくする必要があります。「SIZE」 として通知している値は、そのための目安となる追加量です。 なお「SIZE」として通知している値は、あくまで目安です。実際に必要な追加量とは異なる場合がありますので、不足リソースの情報を 元に、きちんとチューニングを実施してください。 予兆監視警告メッセージ(Javaヒープ不足)の想定される原因と対処 Javaヒープ不足により警告メッセージが出力される原因は、Java VMによってあらかじめ予約されたJavaヒープまたはPermanent世代領 域の不足です。予約するJavaヒープサイズ、Permanent世代領域のサイズが不適切(小さすぎる、または大きすぎる)な場合や、Javaア プリケーションがメモリリークを起こしている可能性があります。 警告メッセージが出力された場合、そのまま業務を継続するとメモリ不足やレスポンス低下などの問題が発生する可能性があります。 これらの問題を解決するために警告メッセージに記載されている不足リソースの情報やモニタロギング機能を使用してチューニングを 実施してください。 警告メッセージを回避するひとつの方法として、以下のようにJavaヒープまたはPermanent世代領域を増加する方法があります。 1. 現在の不足リソースの上限値を20%増加させて運用を再開します。 2. それでも警告が出力された場合にはさらに20%増加させ、警告が出力されなくなるまで繰り返しチューニングを実施します。 チューニングを繰り返して警告メッセージが出力されない状態とすることにより、安定稼動するシステムを構築できます。Javaヒープサイ ズとPermanent世代領域サイズの上限値を増加しても回避できない場合は、Javaアプリケーションが大量にメモリを消費していないか、 メモリリークを起こしていないか見直しを行ってください。 Java VMのヒープ領域およびPerm領域をチューニングする場合、IJServerクラスタのJava VMオプションに、ヒープ領域およびPerm領 域の上限値を設定するオプションを記載します。詳細は、「5.3.2 Java VMのヒープ領域サイズ/Perm領域サイズ」を参照してください。 なお、チューニングは開発フェーズ(システムテスト)で実施し、問題を解決してください。 また、チューニング方法には、上記に挙げたヒープ領域またはPerm領域を増加する方法の他に、IJServerクラスタのサーバーインスタ ンスを追加する方法もあります。 5.14.2 予兆監視警告メッセージ(ガーベジコレクション) Java VMのガーベジコレクション処理の影響で業務レスポンス低下が発生する可能性を検出し、警告メッセージ(ISJEE_OM3204)で通 知します。 Java VMのガーベジコレクションの影響を通知する警告メッセージには、5種類の詳細メッセージがあります。この他の詳細メッセージ は、「5.14.1 予兆監視警告メッセージ(Javaヒープ)」を参照してください。 ・ ガーベジコレクション処理時間に関する警告メッセージ(1種類) ・ ガーベジコレクション間隔に関する警告メッセージ(4種類) 警告メッセージは、ガーベジコレクション処理による業務レスポンス低下の危険性を通知するもので、Java VMの動作異常を示すもの ではありません。また、警告が出力された状態で業務を継続したときに、Javaアプリケーションの実行に支障が発生すると一概に言え ませんが、警告メッセージが出力されない状態にすることにより、安定稼動するシステムを構築できます。 - 147 - ガーベジコレクション処理時間に関する警告メッセージ 詳細メッセージは、以下の発生条件で出力されます。 なお、詳細メッセージに含まれる時刻情報のフォーマットは「年/月/日 時:分:秒.ミリ秒」となります。 詳細メッセージ 警告の意味 発生条件 It takes long time to do the garbage collections many times: TIME={0} AVERAGE={1} TIME: 発生時刻 AVERAGE: 過去3回のFull GCの 平均時間(ミリ秒単位) Full GCに長い時間かかる状態が 続いています。 過去3回のFull GC時間の平均値 が5秒より長い場合。 ガーベジコレクション処理中は、メッセージに記載されたFull GCの平均時間の間、アプリケーションが停止する場合があります。メッ セージが出力された場合、レスポンス低下などの問題が発生する可能性があります。 予兆監視警告メッセージ(ガーベジコレクション処理時間)の原因と対処 ガーベジコレクション処理時間に関する警告メッセージが出力される原因は、以下が考えられます。 ・ 物理メモリの枯渇など、システムのリソースが不足している。 ・ CPU負荷の高い別のアプリケーションが同時に動作しているなど、メッセージの対象となったJavaプロセスの実行が阻害されてい る。 ・ Javaヒープのサイズ指定が大きすぎて、ガーベジコレクション処理に時間を要している。 アプリケーションのレスポンスに問題がある場合は、これらの要因を確認してください。 Javaヒープサイズの指定を小さくするチューニングは、十分な検証が必要です。JavaアプリケーションがJavaヒープを多く消費するプロ グラムの場合、Javaヒープサイズの指定を小さくするとOufOfMemoryErrorが発生することも考えられます。 ガーベジコレクション間隔に関する警告メッセージ 詳細メッセージは、以下の発生条件で出力されます。いずれも、ガーベジコレクションが短い間隔で連続して発生した場合に発生しま す。頻繁なガーベジコレクション処理の実行は、アプリケーションのレスポンス低下などの問題が発生する可能性があります。 なお、詳細メッセージに含まれる時刻情報のフォーマットは「年/月/日 時:分:秒.ミリ秒」となります。 詳細メッセージ 警告の意味 発生条件 (注) Inefficient garbage collections are run with the short intervals: TIME={0} WEIGHT={1} TIME: 発生時刻 WEIGHT: Full GC直前の旧世代 の使用率(%単位) 非効率なFull GCが短い間隔で発 生しています。 過去3回のFull GC間隔時間が20 秒より短い場合、かつ、Full GC直 前のOld世代領域の使用率が65% よりも小さい場合。 The garbage collections are run with the short intervals because of the lack of the memory: TIME={0} SIZE={1} TIME: 発生時刻 SIZE: Javaヒープ領域への追加量 の目安(バイト単位)(注2) Javaヒープ不足のため、Full GCが 短い間隔で発生しています。 過去3回のFull GC間隔時間が20 秒より短い場合、かつ、Full GC直 後のJavaヒープ使用率が65%より 大きい場合。 System.gc() are run with the short intervals: TIME={0} INTERVAL={1} TIME: 発生時刻 INTERVAL: java.lang.System.gc()メソッドや java.lang.Runtime.gc()メソッドのイ ンターバル時間(ミリ秒単位) java.lang.System.gc()メソッドや java.lang.Runtime.gc()メソッドが短 い間隔で発生しています。 過去3回のFull GC間隔時間が20 秒より短い場合、かつ、 java.lang.System.gc()メソッドや java.lang.Runtime.gc()メソッドに よって発生したFull GCの頻度が高 い場合。 - 148 - 詳細メッセージ 警告の意味 発生条件 (注) The garbage collections are run with the short intervals: TIME={0} INTERVAL={1} TIME: 発生時刻 INTERVAL: Full GCのインターバ ル時間(ミリ秒単位) Full GCが短い間隔で発生してい ます。 過去3回のFull GC間隔時間が20 秒より短い場合。 注1) 発生条件を満たした場合でも、ガーベジコレクションの処理時間が短い場合は、メッセージの出力を行わない場合があります。 注2) 警告を回避するためには、警告発生時のJavaヒープ領域のサイズを大きくする必要があります。「SIZE」として通知している値は、 そのための目安となる追加量です。 なお「SIZE」として通知している値は、あくまで目安です。実際に必要な追加量とは異なる場合がありますので、不足リソースの情報を 元に、きちんとチューニングを実施してください。 予兆監視警告メッセージ(ガーベジコレクション間隔)の原因と対処 「Inefficient garbage collections are run with the short intervals」が出力された場合 Javaヒープの空きがあるにもかかわらず、ガーベジコレクション処理が発生している可能性があります。原因として以下が考えられま す。 - Javaヒープの初期サイズ(-Xms)が小さく、Javaヒープ拡張を繰り返している。 - JavaヒープのNew世代領域の割合が大きくなるように指定している(New世代領域については、「チューニングガイド」の「JDK/JRE のチューニング」の「基礎知識」を参照してください)。 アプリケーションのレスポンスに問題がある場合は、Javaヒープに関するチューニングオプションに問題がないか確認してください。 「The garbage collections are run with the short intervals because of the lack of the memory」が出力された場合 Javaヒープの不足が考えられます。「予兆監視警告メッセージ(Javaヒープ不足)の想定される原因と対処」を参照して、対処してくだ さい。Javaヒープサイズの上限値を増加しても警告が出力される場合、Javaアプリケーションが短時間に大量のメモリを消費してい る可能性があります。 「System.gc() are run with the short intervals」が出力された場合 アプリケーションがjava.lang.System.gc()メソッド、java.lang.Runtime.gc()メソッドを短い間隔で呼び出しています。頻繁なガーベジコ レクション実行が、アプリケーションのレスポンスに影響している場合は、これらのメソッドの利用が必要かアプリケーションの見直し を行ってください。 FJVM の java.lang.System.gc() 実 行 時 に お け る ス タ ッ ク ト レ ー ス 出 力 機 能 を 利 用 す る と 、 java.lang.System.gc() メ ソ ッ ド、 java.lang.Runtime.gc()メソッドの実行箇所を特定することができます。詳細は、以下のマニュアルを参照してください。 「 Interstage Application Server/Interstage Web Server チ ュ ー ニ ン グ ガ イ ド 」 > 「 JDK/JRE の チ ュ ー ニ ン グ 」 > 「 FJVM 」 > 「java.lang.System.gc()実行時におけるスタックトレース出力機能」 なお、JavaのRMI機能による自動ガーベジコレクション間隔が極端に短く設定されている場合、本メッセージが出力されることがあ ります。アプリケーションでjava.lang.System.gc()メソッド、java.lang.Runtime.gc()メソッドを頻繁に実行していない場合は、JavaのRMI 機能による自動ガーベジコレクション間隔の設定値を確認してください。詳細は、「5.3.3 ガーベジコレクション発生回数」を参照し てください。 上記の3つのメッセージの発生条件以外で、ガーベジコレクション処理が短い間隔で発生した場合 「The garbage collections are run with the short intervals」のメッセージが出力されます。 5.15 Interstage Java EE DASサービスのヒープ領域サイズとアドレス空 間 ヒープ領域サイズ 作成したIJServerクラスタ、サーバーインスタンスの数が多い場合や、配備済みアプリケーションの数が多い場合、メモリ不足により Interstage Java EE DASサービスの起動失敗やプロセスダウンが発生することがあります。 - 149 - メモリ不足が発生している場合は、Interstage Java EE DASサービスのヒープ領域サイズをデフォルトの512MBから増やしてください。-targetオプションには server を指定します。 設定例 asadmin delete-jvm-options --target server \-Xmx512m asadmin create-jvm-options --target server \-Xmx1024m asadmin delete-jvm-options --target server \\-Xmx512m asadmin create-jvm-options --target server \\-Xmx1024m 上記設定には、Interstage Java EE DASサービスが起動している必要があります。Interstage Java EE DASサービスが起動できない場 合は、「Interstage Java EE DASサービスが起動しない場合の対処方法」を参照してください。 アドレス空間 上記ヒープ領域サイズを増やしても起動に失敗する場合、Interstage Java EE DASサービスが、プロセスのアドレス空間の上限を超え ている可能性があります。 Interstage Java EE DASサービスが使用するプロセスのアドレス空間の領域は、以下の見積もり式で算出してください。 IJServerクラスタ数およびサーバーインスタンスの数を元に算出した値が、プロセスのアドレス空間の上限値を下回ることを確認してく ださい。もし上限値を超える場合は、上限値を超えない範囲にまでIJServerクラスタ数およびサーバーインスタンスの削除を検討してく ださい。 上限を超え、Interstage Java EE DASサービスが起動できない場合は、IJServerクラスタを削除してください。削除手順は「IJServerクラ スタを削除する方法」を参照してください。 [最大ヒープ領域サイズ] + [最大Perm領域サイズ] + [数値1] + ( [IJServerクラスタ数] × 22 + [サーバーインスタンス数] × 10 + 82 ) × [数値2] 数値1、数値2 使用するプラットフォームにより異なります。数値1、数値2は下記表を参照してください。 項番 プラットフォーム 数値1 数値2 1 Windows(R) 300 Mバイト 0.25 Mバイト 2 Solaris 500 Mバイト 1.0 Mバイト 3 Linux 500 Mバイト 0.5 Mバイト 最大ヒープ領域サイズ、最大Perm領域サイズ Interstage Java EE DASサービスの最大ヒープ領域サイズ、最大Perm領域サイズは、以下のコマンドで確認してください。 asadmin get server.java-config.jvm-options 最大ヒープ領域サイズ: -Xmx (デフォルトは512Mバイト) 最大Perm領域サイズ: -XX:MaxPermSize (デフォルトは192Mバイト) Interstage Java EE DASサービスが起動しない場合の対処方法 IJServerクラスタの数が多く、Interstage Java EE DASサービスが起動しない場合は、下記手順に従いdomain.xmlを編集してください。 domain.xmlの格納先 [Java EE共通ディレクトリ]\domains\interstage\config\domain.xml - 150 - [Java EE共通ディレクトリ]/domains/interstage/config/domain.xml 編集手順 1. Interstage Java EE Node Agentサービスを停止してください。 2. Interstage Java EE DASサービスを停止してください。通常停止を実施できない場合には、本手順実施後にシステムを再起動し てください。 3. domain.xmlを編集し、ヒープ領域サイズを増やしてください。 テキストエディタなどでファイルを開き、下記 -Xmx512m を -Xmx1024m に変更してください。 - 編集する要素 <domain> <configs> <config dynamic-reconfiguration-enabled="true" name="server-config"> <java-config> <jvm-options>-Xmx512m</jvm-options> 4. Interstage Java EE DASサービスを起動してください。通常停止を行う際に失敗していた場合は、システムを再起動してください。 5. Interstage Java EE Node Agentサービスを起動してください。 IJServerクラスタを削除する方法 上記の見積もり式に当てはめて削除する必要のあるIJServerクラスタ数を算出し、以下の手順でIJServerクラスタを削除してください。 作業を行う前に、事前にIJServerクラスタの配備資源やdomain.xml、workers2.propertiesのバックアップをとることを推奨します。バック アップの方法は、「運用ガイド(基本編)」-「資源のバックアップとリストア」を参照してください。 domain.xmlの格納先 [Java EE共通ディレクトリ]\domains\interstage\config\domain.xml [Java EE共通ディレクトリ]/domains/interstage/config/domain.xml workers2.propertiesの格納先 C:\Interstage\F3FMjs5\conf\jk2\[Webサーバ名]\workers2.properties /opt/FJSVjs5/conf/jk2/[Webサーバ名]/workers2.properties IJServerクラスタの削除手順 1. Interstage Java EE Node Agentサービスを停止してください。通常停止を実施できない場合には、プロセスを強制停止してくださ い。 2. Interstage Java EE DASサービスを停止してください。通常停止を実施できない場合には、プロセスを強制停止してください。 3. Webサーバを停止してください。 (注1) 4. Interstage管理コンソールを停止してください。 (注2) - 151 - 5. domain.xmlを編集し、削除対象のIJServerクラスタに対応した以下の要素を削除してください。 - config要素の削除 削除対象のIJServerクラスタに対応したconfig要素を削除してください。 <config dynamic-reconfiguration-enabled="true" name="${IJServerクラスタ名}-config"> ~ </config> - cluster要素の削除 削除対象のIJServerクラスタに対応したcluster要素を削除してください。 <cluster config-ref="${IJServerクラスタ名}-config" heartbeat-address="${ハートビートアドレス}" heartbeat-enabled="${ハートビート}" heartbeat-port="${ハートビートポート}" name="${IJServerクラスタ名}"> ~ </cluster> - server要素の削除 削除対象のIJServerクラスタに対応したserver要素を削除してください。 サーバーインスタンスが2つ以上のIJServerクラスタの場合、複数のserverタグを削除する必要があります。 <server config-ref="${IJServerクラスタ名}-config" lb-weight="100" name="${IJServerクラスタ名}-${シーケンス番号}" node-agent-ref="ijna" start-instance-in-startup="true"> ~ </server> 6. Webサーバコネクタの環境設定ファイルworkers2.propertiesを編集し、削除対象のIJServerクラスタに対応した以下の定義が存 在する場合は定義を削除します。workers2.propertiesはWebサーバごとに存在します。Webサーバが複数存在する場合は、す べてのworkers2.propertiesを編集してください。 - channel.socketセクションの削除 削除対象のIJServerクラスタのサーバーインスタンスに対応したchannel.socketセクションを削除します。 [channel.socket:${IJServerクラスタのIPアドレス}_${サーバーインスタンスのポート番号}] ~ disabled=0 - httpセクションの削除 削除対象のIJServerクラスタのサーバーインスタンスに対応したhttpセクションを削除します。 [http :${IJServerクラスタのIPアドレス}_${サーバーインスタンスのポート番号}] ~ debug=0 - lbセクションの削除 削除対象のIJServerクラスタに対応したlbセクションを削除します。 [lb: ${IJServerクラスタ名}] ~ worker=http:${IJServerクラスタのIPアドレス}_${サーバーインスタンスのポート番号} ~ createdby=javaee - uriセクションの削除 groupプロパティに削除対象のIJServerクラスタ名が設定されているuriセクションをすべて削除します。 - 152 - [uri:/${コンテキストルート}/*] group=${IJServerクラスタ名} 7. Webサーバを起動してください。 (注1) 8. Interstage管理コンソールを起動してください。 (注2) 9. Interstage Java EE DASサービスを起動してください。 10. Interstage Java EE Node Agentサービスを起動してください。サービス起動時に、4.で削除したIJServerクラスタの定義情報に対 応する資源は自動的に削除されます。 注1) 詳細は、「Interstage HTTP Server 運用ガイド」を参照してください。 注2) 詳細は、「運用ガイド(基本編)」を参照してください。 5.16 時間監視機能の相関関係 アプリケーションからの要求でネットワーク通信が発生する以下の機能について応答時間に影響する時間監視機能と、その各時間監 視機能の相関関係を説明します。 応答時間に影響する時間監視機能以外の、不当に残存したオブジェクトを解放する無通信時間を監視する機能(コネクションプーリ ング機能など)については、各機能説明を参照してください。 ・ HTTP通信 ・ IIOP通信 ・ トランザクションとデータベースアクセス 時間監視機能により異常を検出するまでの時間をタイムアウト時間と呼び、タイムアウト時間を超過したことにより異常を検知することを タイムアウトと呼びます。 タイムアウトによる異常を検出して呼び出し元で処理を中断するか再実行するかなどの判断を行うため、タイムアウト時間は呼び出し元 に近いほど大きな値に設定するのが一般的です。 相関関係の図において実線は処理の流れを表します、点線は時間監視機能の監視間隔を表します。 緑色の部分がアプリケーションの処理部分です。 - 153 - HTTP通信 相関関係 ※1 HTTPリスナー/Webコンテナに接続されてからリクエストの処理が開始するまでの待機時間です。詳細は以下を参照してください。 ・ 「5.6 Webコンテナのチューニング」 ・ 「5.18.3 性能情報の分析」 時間監視項目 監視対 象となる 時間 (a) 時間監視機能 説明 Webサーバコネクタの送受信タイムアウト WebサーバコネクタがHTTPリスナー/Webコンテ ナとの間でデータパケットを送受信するときの待 機時間を監視します。 <設定方法> 以下の項目でタイムアウト時間を設定します。 「5.6 Webコンテナのチューニング」 ・ Webサーバコネクタの送受信タイムアウト その際、以下の関係を満たすように設定してください。 (a) > (b) + (c) + 図中※1 (b) HTTPリスナーのタイムアウト 注) 本項目はWebサーバ(Webサーバコネクタ)を使 用する運用の場合のみWebサーバコネクタによ り監視されます。 その際、Webサーバコネクタは相関関係図の「ク ライアント」に相当します。 HTTPリスナー/Webコンテナがクライアントから のデータパケットを受信するときの待機時間を 監視します。 <設定方法> 以下の項目でタイムアウト時間を設定します。 ・ 「Java EE運用ガイド」-「HTTPサービスの定義項目」 - 項目名:タイムアウト時間 - プロパティ名: connectionUploadTimeout - 154 - 監視対 象となる 時間 (c) 時間監視機能 説明 アプリケーション最大処理時間 ユーザアプリケーションの呼び出しからレスポン ス送信までの処理時間を監視します。 監視対象の時間にはリクエストのメッセージボ ディの読み込み時間も含まれます。 <設定方法> 以下の項目でタイムアウト時間を設定します。 ・ 「Java EE運用ガイド」-「プロセス制御の定義項目」 - 項目名:アプリケーション最大処理時間 ポイント 以下の現象が頻繁に発生する場合、対処方法を行うことで回避できる可能性があります。 回避できない場合は、サーバの処理能力を超えている可能性があります。 サーバの増設または、より性能の良いサーバへのリプレースを検討してください。 - 現象:WebサーバコネクタのログにIJServer12035、IJServer12044が出力される 対処方法:(a)の設定値を大きくする - 現象:イベントログ/システムログにISJEE_OM1005、またはISJEE_OM1020が出力される 対処方法:(c)の設定値を大きくする 注意 以下の条件に該当する場合、プロセスが強制停止します。 - (b) > (c) に設定した、かつ - プロセス制御の定義項目 [アプリケーション最大処理時間超過時の制御]を"true"に設定した、かつ - 相関関係図における“リクエストのメッセージボディの送信”が(c)の設定値を超えても完了しなかった場合 - 155 - IIOP通信 相関関係 時間監視項目 時間監視間隔 時間監視機能 (a) IIOP接続の待機時間監視機能 (b) IIOP通信ソケットの送受信待機時間監視機能 (c) IIOP通信時のサーバメソッド復帰時間監視機能 (d) アプリケーションの最大処理時間監視機能 (e) IIOP通信クライアントの無通信監視機能 - 156 - トランザクションとデータベースアクセス 相関関係 時間監視項目 時間監視間隔 時間監視機能 (a) EJBコンテナのトランザクション完了時間監視機能 (b) トランザクションサービスのトランザクションタイムアウト (c) JDBC接続プールの最大待ち時間 (d) JDBC接続プールの文のタイムアウト 5.17 モニタリング情報の監視 Interstage Java EE管理コンソールにて、運用中のサーバーインスタンスの稼動情報を参照できます。これにより、ボトルネックを検出し たり、性能チューニングの効果を確認することができます。 稼働情報には、以下の情報が出力されます。各項目の意味については、項目と合わせて表示される説明を参照してください。 - 157 - 表示項目 説明 ランタイム Java VMの情報などプロセスの情報が表示されます。 アプリケーション サーバーインスタンスに配備された各アプリケーションの情 報が表示されます。 リソース サーバーインスタンスに有効になっている各リソースの情報 が表示されます。 トランザクション サーバーインスタンスで動作している各トランザクションの情 報が表示されます。 監視を有効にするには、監視サービスの設定で各項目に対して「LOW」もしくは「HIGH」を設定します。 Java VMの情報として表示されるUpTime(開始時間)とHeapSize(ヒープサイズ)の情報はデフォルトで表示されます。 「LOW」より「HIGH」を指定することで多くの情報を表示することができますが、表示項目が多いと若干の性能影響があります。このた め、必要な監視情報のみ有効にしてください。 モニタロギング機能を使用することで、表示される情報をログに出力することもできます。モニタロギング機能については、「5.18 モニタ ロギング」を参照してください。 5.17.1 注意事項 JDBCリソース/JMS/コネクタリソースの監視情報について JDBCリソース/JMS/コネクタリソースの監視情報は、サーバーインスタンス上で各リソースのConnectionFactoryに対してコネクションの 獲得要求を実行した時の情報が反映されます。このため、以下の情報は反映されません。 ・ Message-driven Beanのメッセージ受信で使用するコネクション Message-driven Beanのメッセージ受信で使用するコネクションの情報は、JMS/コネクタリソースの監視情報に反映されません。 Message-driven Beanでは、Message-driven Beanの起動時にメッセージブローカへのコネクションが1つ生成され、このコネクション が使用されます。 JMS/コネクタリソースの監視情報でコネクション数を確認する場合には、表示される情報以外に運用中のMessage-driven Beanの 数分のコネクションが使用されていると判断してください。 ・ クライアントアプリケーションで使用するコネクション クライアントアプリケーション(Java EEアプリケーションクライアントなど)で使用するコネクションの情報はサーバーインスタンスの監 視情報には反映されません。 5.18 モニタロギング IJServerクラスタの性能情報をロギングする機能が提供されています。この機能を利用することで、JavaVMやJDBCデータソースなどの 性能情報を定期的に採取し、結果をログファイルへ出力することができます。ログファイルはCSV形式のファイルに出力されるため、容 易にExcelなどで読み込んで性能情報を分析することができ、統計情報の蓄積にも役立ちます。 IJServerクラスタのモニタロギングは以下の図に示すようにasadminコマンドを使用します。 asadminコマンドのsetサブコマンド、またはInterstage Java EE管理コンソールによりIJServerクラスタのモニタロギングを有効に設定する と、Interstage Java EE DASサービスを経由してIJServerクラスタの各サーバーインスタンスへ定義変更イベントが通知されます。 サーバーインスタンスのプロセスでは、指定された時間間隔で性能情報をCSV形式のファイルに出力します。 なお、モニタロギングが無効に設定された場合、以降の性能情報の出力は行われません。 - 158 - 設計方法 IJServerクラスタ運用中に継続してモニタロギング機能を使用してログを採取することにより、業務運用中の性能情報の記録が残るた め、問題発生時の原因究明が確実かつ簡単になります。 しかし、ログ採取タイミングではログ情報をファイルに出力するためにJava VMのヒープメモリ使用量やCPU使用率が若干増加します。 このため、大量の情報を頻繁にログファイルに出力すると性能に影響が発生する可能性があります。テスト運用中にモニタロギング機 能を評価し、運用に影響がないログ採取間隔で採取してください。 5.18.1 モニタロギングの操作手順 ここでは、モニタロギングの以下運用操作について説明します。 ・ モニタロギングの開始操作 ・ モニタロギングの終了操作 ・ 監視操作(特定時刻のログだけ採取する場合) ・ 監視操作(継続的にログを採取する場合) モニタロギングの開始操作 モニタロギングを開始するには、監視したい項目に応じて「監視サービス」の監視レベルを変更し、モニタロギングを有効に設定しま す。 1. 監視レベルの変更 IJServerクラスタ起動前に、asadmin コマンドのsetサブコマンドを利用して、IJServerクラスタの「監視サービス」の定義項目のうち、 監視したい性能情報の監視レベルを「LOW」または「HIGH」に設定します。 例えば、Java VMの性能情報を監視したい場合は、以下のように操作します。 asadmin set IJServer001.monitoring-service.module-monitoring-levels.jvm=LOW 2. モニタロギングの有効化 asadminコマンドを利用し、IJServerクラスタのモニタロギングを有効に設定します。 asadmin set IJServer001.monitoring-service.logging-enabled=true - 159 - ポイント ・ モニタロギングによる性能情報の出力は、対象のIJServerクラスタの運用中にのみ行われます。 ・ IJServerクラスタの運用中に設定変更した場合は、設定値はすぐに反映され、指定された採取間隔経過後に性能情報がログファ イルに出力されます。 モニタロギングの終了操作 asadminコマンドを利用し、モニタロギングを無効に設定します。 asadmin set IJServer001.monitoring-service.logging-enabled=false 注意 モニタロギングの終了操作では、監視レベルの変更は不要です。「LOW」または「HIGH」に設定した性能情報を監視する必要がなく なった場合、監視レベルを「OFF」にしてください。 監視操作(特定時刻のログだけ採取する場合) トラブル調査などのため、ある特定の時間だけ性能情報を採取したい場合は、以下のようにIJServerクラスタの起動後にモニタロギング を開始します。 1. IJServerクラスタの起動 Interstage Java EE管理コンソール、またはasadminコマンドのstart-clusterサブコマンドでIJServerクラスタを起動します。 2. 監視レベルの変更 Interstage Java EE管理コンソール、またはasadminコマンドのsetサブコマンドで監視レベルを変更します。 3. モニタロギングの開始 Interstage Java EE管理コンソール、またはasadminコマンドのsetサブコマンドでモニタロギングを有効に設定します。 4. 性能情報の分析 出力された情報をMicrosoft(R) Excelなどで分析します。 5. モニタロギングの終了 Interstage Java EE管理コンソール、またはasadminコマンドのsetサブコマンドでモニタロギングを無効に設定します。 6. 3.~5.を繰り返します。 7. IJServerクラスタの停止 Interstage Java EE管理コンソール、またはasadminコマンドのstop-clusterサブコマンドでIJServerクラスタを停止します。 監視操作(継続的にログを採取する場合) 継続的にログを採取して性能チューニングの妥当性を検証したい場合は、以下のようにモニタロギングを有効に設定した後にIJServer を起動してください。 1. モニタロギングの設定変更 Interstage Java EE管理コンソール、またはasadminコマンドのsetサブコマンドで監視レベルを変更し、モニタロギングを有効に設 定します。 2. IJServerクラスタの起動 Interstage Java EE管理コンソール、またはasadminコマンドのstart-clusterサブコマンドでIJServerクラスタを起動します。 3. 性能情報の分析 出力された情報をMicrosoft(R) Excelなどで分析します。 4. IJServerクラスタの停止 Interstage Java EE管理コンソール、またはasadminコマンドのstop-clusterサブコマンドでIJServerクラスタを停止します。 5. 2.~4.を繰り返します。 - 160 - 注意 Interstage Java EE DASサービスのメモリについて モニタロギングを利用するために、IJServerクラスタやInterstage Java EE DASサービスの監視サービスの定義を有効にすると、サーバー インスタンス数、配備済みのアプリケーション数に応じてInterstage Java EE DASサービスのメモリが使用されます。 監視サービスを有効に設定した場合は、Interstage Java EE DASサービスでメモリ不足が発生していないことを確認してください。メモ リ不足が発生した場合は、「5.15 Interstage Java EE DASサービスのヒープ領域サイズとアドレス空間」を参照して対処を行ってくださ い。 5.18.2 モニタロギングのログファイル モニタロギングのログファイルについて、以下を説明します。 ・ ログファイル名 ・ ローテーション後のファイル名 ・ ログファイルのライフサイクル ・ ファイルのアクセス権 ・ 出力ディレクトリ ログファイル名 モニタ情報を出力するログファイルは、プロセスごと、かつ、採取対象ごとに出力されます。ログファイルのファイル名は以下の命名規 則で出力されます。 命名規則:monitor-[採取対象名].log ファイル名一覧を以下に記載します。 ファイル ファイル名 Java VM情報ログファイル monitor-jvm.log HTTP接続キュー情報ログファイル monitor-connectionqueue.log HTTPリスナー情報ログファイル monitor-httplistener.log IIOPコネクション情報ログファイル monitor-connection.log スレッドプール情報ログファイル monitor-threadpool.log Stateless Session Bean情報ログファイル monitor-statelesssession.log Stateful Session Bean情報ログファイル monitor-statefulsession.log Message-driven Bean情報ログファイル monitor-messagedriven.log Entity Bean情報ログファイル monitor-entitybean.log JDBC接続プール情報ログファイル monitor-jdbcpool.log トランザクション情報ログファイル monitor-transaction.log JMS/コネクタ接続プール情報ログファイル monitor-connectorpool.log - 161 - ローテーション後のファイル名 出力されたログファイルは一定間隔でローテーションされます。ローテーション後のログファイルは、以下のようにローテーションした日 時情報を付加してバックアップされます。ログファイル名の末尾に、日時を示す文字列が追加されます。また、ログファイル名と日時文 字列の間はハイフン(「_」)で区切られます。 ファイル名:monitor-[採取対象名].log_yyyy_MM_dd-hh_mm_ss 日時情報について以下に説明します。 YYYY 年を4桁の数字(0000~9999)で表示します。 MM 月を2桁の数字(01~12)で表示します。 DD 日を2桁の数字(01~31)で表示します。 hh 時を2桁の数字(00~23)で表示します。 mm 分を2桁の数字(00~59)で表示します。 ss 秒を2桁の数字(00~59)で表示します。 例 monitor-jvm.log_2006_06_24-01_00_00 ログファイルのライフサイクル ログファイルのライフサイクルについて説明します。 IJServerクラスタプロセスがログを出力する場合、ログ出力ディレクトリに「ログファイル名」で説明しているファイルが存在しなければファ イルを新規に作成します。また、ログファイルは以下の条件の場合にローテーションされます。ローテーションのタイプ、開始時刻、サ イズは、モニタロギングを開始する前に定義項目として設定できます。詳細は、「リファレンスマニュアル(コマンド編)」-「Java EE運用 コマンド」の「asadmin」を参照してください。 ローテーション条件 - ローテーションのタイプが「サイズ」の場合 - ログファイルのサイズがローテーションサイズに達する場合 - ローテーションのタイプが「時刻」の場合 - ローテーション時刻にIJServerクラスタプロセスが起動している場合 - ログが採取されるタイミングで、以前のログファイルがログ出力ディレクトリに残存しており、かつ、そのファイルの更新日時 が前回のローテーション日時より前の場合 ローテーションは以下のように行われます。 1. 既存のログファイルを「ローテーション後のファイル名」で説明している名前に変名してバックアップします。 2. 新規に「ログファイル名」で説明している名前の新規ファイルを作成します。 3. バックアップされているファイルのファイル数がログファイルの世代数以上となっている場合、ファイルの更新日時が古いファイル を削除します。バックアップされたファイルのファイル数が世代数となるまで削除します。 ファイルのアクセス権 出力されるファイルの所有者はIJServerクラスタの起動ユーザとなり、ファイルの権限は「644」となります。 出力ディレクトリ モニタロギングのログファイルは、IJServerクラスタのログ出力ディレクトリに出力されます。 IJServerクラスタのログ出力ディレクトリについては、「Java EE運用ガイド」-「IJServerクラスタのファイル構成」を参照してください。 - 162 - 5.18.3 性能情報の分析 ログファイルに採取した性能情報の分析方法について説明します。 出力情報 モニタ情報ログファイルは、以下のようにCSV形式(カンマ区切りで並べた形式)で出力されます。 D1,D2,D3,D4,D5,・・・ 性能情報の項目内容 IJServer(J2EE)におけるモニタロギング機能では、データ採取区間内での集計データ(データ採取時間帯での最大値など)を採取して いました。 IJServerクラスタで使用できるモニタロギングでは、IJServerクラスタ起動時からのデータだけ出力します。 性能情報中の日時情報は、以下の値が「DD/MM/YYYY hh:mm:ss.SSS」のフォーマットで出力されます。 DD 日を2桁の数字(01~31)で表示します。 MM 月を2桁の数字(01~12)で表示します。 YYYY 年を4桁の数字(0000~9999)で表示します。 hh 時を2桁の数字(00~23)で表示します。 mm 分を2桁の数字(00~59)で表示します。 ss 秒を2桁の数字(00~59)で表示します。 SSS ミリ秒を3桁の数字(000~999)で表示します。 例 24/06/2006 01:00:00.200 性能情報中の「ミリ秒」単位は、以下の値が「h:mm:ss.SSS」のフォーマットで出力されます。 h 時を可変桁の数字(0~)で表示します。値が0の場合は「0」と表示します。 mm 分を2桁の数字(00~59)で表示します。 ss 秒を2桁の数字(00~59)で表示します。 SSS ミリ秒を3桁の数字(000~999)で表示します。 例 0:00:00.200 性能情報として出力される項目について説明します。各表の項番に書かれているD1、D2、・・・は、CSV形式で出力されるD1、D2、・・・ に対応しています。 なお、先頭の出力項目は、必ず当該レコードの性能情報を採取した日時となります。 性能情報を出力するには、asadminコマンドのsetサブコマンドでconfigs.config.monitoring-serviceの定義項目に、出力する情報の監視 レベルを指定する必要があります。各表の監視レベルは、指定した監視レベルによって出力される情報です。監視レベルがHIGHの 項目(薄い緑色の行)は、指定された監視レベルがHIGHの場合だけ出力される項目です。それ以外は指定された監視レベルにかか わらず出力される項目です。 性能情報一覧 1) Java VM情報 2) HTTP接続キュー情報 - 163 - 3) HTTPリスナー情報 4) IIOPコネクション情報 5) スレッドプール情報 6) Stateless Session Bean情報 7) Stateful Session Bean情報 8) Message-driven Bean情報 9) Entity Bean情報 10) JDBC接続プール情報 11) トランザクション情報 12) JMS/コネクタ接続プール情報 性能情報の説明 1) Java VM情報 アプリケーションを運用しているJava VMの性能情報です。 項番 項目の内容 採取条件 D1 当該レコードの性能情報を採取した日時 D2 インスタンス名 D3 プロセスID D4 Java VM起動時間(単位:ミリ秒) D5 Java VMヒープサイズの下限値(単位:バイト) D6 Java VMヒープサイズの上限値(単位:バイト) (注1) D7 Java VMヒープサイズの最小値(単位:バイト) D8 Java VMヒープサイズの最大値(単位:バイト) (注1) D9 Java VMヒープサイズの現在値(単位:バイト) D10 Perm領域の上限値(単位:バイト) D11 Perm領域の最小使用量(単位:バイト) D12 Perm領域の最大使用量(単位:バイト) D13 Perm領域の現在使用量(単位:バイト) D14 ガーベジコレクション発生回数 (注2) D15 ガーベジコレクション処理トータル時間(単位: ミリ秒) (注 2) 注1):Java VMヒープサイズの上限値は動的に増減するため、Java VMヒープサイズの上限値をJava VMヒープサイズの最大値が上回 る場合があります。 注2):ガーベジコレクション情報に対して以下の制限事項があります。 JDK/JRE 5.0において、ガーベジコレクション制御としてCMS付きパラレルGC、FJGCまたはシリアルGCを使用する場合、ガーベジコレ クション発生回数およびガーベジコレクション処理トータル時間は正しくありません。 2) HTTP接続キュー情報 HTTPの接続キューの性能情報です。 - 164 - 項番 項目の内容 採取条件 D1 当該レコードの性能情報を採取した日時 D2 インスタンス名 D3 プロセスID D4 キューがいっぱいになったためにHTTPリクエストを格 納できなかった回数 D5 キュー内に現在存在しているHTTPリクエストの数 D6 キュー内HTTPリクエスト数の過去15分間における平均 値 D7 キュー内HTTPリクエスト数の過去1分間における平均 値 D8 キュー内HTTPリクエスト数の過去5分間における平均 値 D9 受け付けられたHTTPリクエストの合計数 D10 キューに格納されたHTTPリクエストの合計数 1つのHTTPリクエストがキュー内に複数回格納される可 能性があります。そのため、D9の「受け付けられたHTTP リクエストの合計数」より値が大きくなる場合があります。 D11 キューのID D12 キューの最大サイズ D13 キュー内に同時に存在していたHTTPリクエストの最大 数 3) HTTPリスナー情報 HTTPリスナーの性能情報です。 項番 項目の内容 採取条件 D1 当該レコードの性能情報を採取した日時 D2 インスタンス名 D3 プロセスID D4 各要求プロセッサが受信したバイトの累計値(単位:バイ ト) D5 各要求プロセッサが送信したバイトの累計値(単位:バイ ト) D6 使用しません D7 使用しません D8 使用しません D9 使用しません D10 使用しません D11 使用しません D12 使用しません D13 使用しません D14 使用しません D15 使用しません - 165 - 項番 項目の内容 採取条件 D16 使用しません D17 使用しません D18 現在HTTPリスナーが受け付けているHTTPリクエストの 数 この情報が利用不可能な場合は0。 D19 その他の応答コードを含む応答の合計数 D20 HTTPリスナー内に現在存在している要求処理スレッド の数 D21 現在使用されている要求処理スレッドの数 D22 エラー回数の累計値 応答コードが400以上になった場合の回数を表します。 D23 HTTPリスナーが同時に受け付けることの出来るHTTP リクエストの最大数 この情報が利用不可能な場合は0。 D24 存在可能な未使用要求処理スレッドの最大数 D25 リスナーが作成する要求処理スレッドの最大数 D26 スレッド処理時間の最大値(単位:ミリ秒) D27 存在可能な未使用要求処理スレッドの最小数 D28 各要求の処理に要した時間の累計値(単位:ミリ秒) D29 その時点までに処理された要求の合計数 要求処理スレッドの平均処理時間の求め方 D28(各要求の処理に要した時間の累計値) ÷ D29(その時点までに処理された要求の合計数) 4) IIOPコネクション情報 ORBへの接続の性能情報です。 項番 項目の内容 採取条件 D1 当該レコードの性能情報を採取した日時 D2 インスタンス名 D3 プロセスID D4 ORBへの接続のうち、アイドル状態の接続の合計数 D5 ORBへの接続のうち、使用中の接続の合計数 D6 ORBへの接続の下限数 D7 ORBへの接続の上限数 D8 ORBへの接続の最小数 D9 ORBへの接続の最大数 D10 ORBへの接続の合計数 5) スレッドプール情報 EJBコンテナのスレッドプール(※)に対する性能情報です。スレッドプールごとに情報を出力します。 スレッドプール追加時、モニタ情報を有効にするにはIJServerクラスタの再起動が必要です。 - 166 - ※:主にEJBコンテナがスレッド制御を行うアクセスパターンで呼出しが行われた場合に使用されます。 EJBコンテナのスレッドプールについての詳細については「5.7.1 スレッドプーリング」を参照してください。 項番 項目の内容 採取条件 D1 当該レコードの性能情報を採取した日時 D2 インスタンス名 D3 プロセスID D4 スレッドプール名 D5 キュー内の要求が処理されるまで待っていた最小待ち 時間(単位:ミリ秒) D6 キュー内の要求が処理されるまで待っていた最大待ち 時間(単位:ミリ秒) D7 キュー内の要求が処理されるまでの平均待ち時間(単 位:ミリ秒) D8 1つの作業の平均完了時間の最短時間(単位:ミリ秒) D9 1つの作業の平均完了時間の最長時間(単位:ミリ秒) D10 1つの作業の平均完了時間(単位:ミリ秒) D11 要求処理スレッドの下限数 D12 要求処理スレッドの上限数 D13 要求処理スレッドの最小数 D14 要求処理スレッドの最大数 D15 要求処理スレッドの現在数 D16 利用可能なスレッドの数 D17 作業中状態のスレッドの数 D18 その時点までに作業キューに追加された作業項目の合 計数 なお、1つの要求を実行するために、1つ以上の 作業項目が作業キューに追加されます。 D19 キュー内の作業項目の下限数 D20 キュー内の作業項目の上限数 D21 キュー内の作業項目の最小数 D22 キュー内の作業項目の最大数 D23 キュー内の作業項目の数 6) Stateless Session Bean情報 Stateless Session Beanの性能情報です。Beanごとに情報を出力します。 ・ 指定したIJServerクラスタにユーザがStateless Session Beanを配備していない場合でも、システムが利用するアプリケーションであ る「MEjbApp」の情報が出力されます。 ・ HotDeployしたアプリケーションの情報は、次回の採取タイミングから反映されます。 ・ 初期化に失敗したアプリケーションの情報は出力されません。 項番 項目の内容 D1 当該レコードの性能情報を採取した日時 D2 インスタンス名 D3 プロセスID 採取条件 - 167 - 項番 項目の内容 D4 Application名 D5 EJBモジュール名 D6 Stateless Session Bean名 D7 プール内のインスタンスの最小数 D8 プール内のインスタンスの最大数 D9 プール内のインスタンスの現在数 D10 EJBのcreateメソッドが呼び出された回数 D11 EJBのremoveメソッドが呼び出された回数 採取条件 7) Stateful Session Bean情報 Stateful Session Beanの性能情報です。Beanごとに情報を出力します。 ・ 指定したIJServerクラスタにStateful Session Beanがひとつも配備されていない場合は情報が出力されません。 ・ HotDeployしたアプリケーションの情報は、次回の採取タイミングから反映されます。 ・ 初期化に失敗したアプリケーションの情報は出力されません。 項番 項目の内容 採取条件 D1 当該レコードの性能情報を採取した日時 D2 インスタンス名 D3 プロセスID D4 Application名 D5 EJBモジュール名 D6 Stateful Session Bean名 D7 Passivateされたインスタンス数の最小値 D8 Passivateされたインスタンス数の最大値 D9 Passivateされたインスタンス数 D10 キャッシュ内のアイドル状態となっているBeanインスタ ンスの最小数 D11 キャッシュ内のアイドル状態となっているBeanインスタ ンスの最大数 D12 キャッシュ内のアイドル状態となっているBeanインスタ ンスの現在数 D13 EJBのcreateメソッドが呼び出された回数 D14 EJBのremoveメソッドが呼び出された回数 8) Message-driven Bean情報 Message-driven Beanの性能情報です。Beanごとに情報を出力します。 ・ 指定したIJServerクラスタにMessage-driven Beanがひとつも配備されていない場合は情報が出力されません。 ・ HotDeployしたアプリケーションの情報は、次回の採取タイミングから反映されます。 ・ 初期化に失敗したアプリケーションの情報は出力されません。 項番 D1 項目の内容 採取条件 当該レコードの性能情報を採取した日時 - 168 - 項番 項目の内容 採取条件 D2 インスタンス名 D3 プロセスID D4 Application名 D5 EJBモジュール名 D6 Message-driven Bean名 D7 Message-driven Beanに対して受信されたメッセージ 数 D8 Message-driven Beanのcreateメソッドが呼び出された 回数 D9 Message-driven Beanのremoveメソッドが呼び出され た回数 9) Entity Bean情報 Entity Beanの性能情報です。Beanごとに情報を出力します。 ・ 指定したIJServerクラスタにEntity Beanがひとつも配備されていない場合は情報が出力されません。 ・ HotDeployしたアプリケーションの情報は、次回の採取タイミングから反映されます。 ・ 初期化に失敗したアプリケーションの情報は出力されません。 項番 項目の内容 採取条件 D1 当該レコードの性能情報を採取した日時 D2 インスタンス名 D3 プロセスID D4 Application名 D5 EJBモジュール名 D6 Entity Bean名 D7 プール内のインスタンスの最小数 D8 プール内のインスタンスの最大数 D9 プール内のインスタンスの現在数 D10 キャッシュ内のアイドル状態となっているBeanインスタ ンスの最小数 D11 キャッシュ内のアイドル状態となっているBeanインスタ ンスの最大数 D12 キャッシュ内のアイドル状態となっているBeanインスタ ンスの現在数 注) 以下のシステムが利用するアプリケーションの性能情報が出力されます。 __ejb_container_timer_app 10) JDBC接続プール情報 JDBC接続プールの性能情報です。接続プールごとに情報を出力します。 指定したIJServerクラスタに関連付けられたJDBCリソースがひとつもない場合は情報が出力されません。なお、関連付けを行った後は 情報が出力されます。 プーリングが無効の場合には一部の情報が出力されません。この場合、"プーリングが無効の場合"の欄が「-」の項目には必ず0が出 力されます。 背景色が薄い緑色の行は、監視レベルがHIGHの項目です。 - 169 - 項番 項目の内容 プーリングが無 効の場合 D1 当該レコードの性能情報を採取した日時 ○ D2 インスタンス名 ○ D3 プロセスID ○ D4 JDBC接続プール名 ○ D5 接続要求の平均待機時間(単位:ミリ秒) (注1) ○ D6 接続要求の最短待機時間(単位:ミリ秒) (注1) ○ D7 接続要求の最長待機時間(単位:ミリ秒) (注1) ○ D8 最近受け付けた接続要求の待機時間(単位:ミ リ秒) (注1) ○ D9 プールから獲得した論理接続数 (注1) ○ D10 作成された物理接続数 (注2) ○ D11 破棄された物理接続数 (注2) ○ 採取条件 ・ プーリングが有効の場合、以下の時に物理接 続が破棄されます。 - アイドルタイムアウトにより接続が破棄され た時 - 接続検証で失敗して接続が破棄された 時。「すべての障害で」が有効の場合に は、接続検証で失敗した接続以外も破棄 されます。 ・ プーリングが無効の場合、以下の時に物理接 続が破棄されます。 - アプリケーションでConnectionオブジェクト に対してcloseメソッドが実行された時。た だし、トランザクション内で接続が キャッシュ されている場合には、トランザクションが完 了した時。 D12 検証に失敗した物理接続数 (注1)(注2) - ・ 接続検証の有効時、かつ接続検証に失敗した 時 ・ 接続検証の有効時、かつ「すべての障害で」 の有効時、かつ接続障害と判断された時 D13 使用されていない物理接続の最小数 (注2) - D14 使用されていない物理接続の最大数 (注2) - D15 使用されていない物理接続の現在数 (注2) - D16 認証情報のマッチングに失敗した物理接続 数 (注1)(注2) ○ D17 プールに戻された論理接続数 (注1) ○ D18 認証情報のマッチングに成功した物理接続 数 (注1)(注2) ○ 接続のマッチングに成功した時 D19 タイムアウトになった物理接続数 (注1)(注2) - 接続要求のタイムアウト発生時(最大待ち時間 > 0) D20 使用中の物理接続の最小数 (注2) ○ D21 使用中の物理接続の最大数 (注2) ○ D22 使用中の物理接続の現在数 (注2) ○ - 170 - 接続のマッチングに失敗した時 項番 項目の内容 プーリングが無 効の場合 採取条件 D23 待機しているキュー内の接続要求の数 - プール内の接続数が最大値に達し、全接続が使 用中の時 (注3) D24 リークが発生した接続の数(注1) ○ 接続リーク発生時 注1):この項目は、監視レベルをHIGHに設定した場合のみ出力されます。 注2):この物理接続は、JDBCドライバ側から取得した接続です。通常、JDBCドライバ側から取得した接続は物理接続となります。JDBC ドライバ側のプーリング機能を利用する場合、実際の物理接続は、JDBCドライバ側でキャッシュされるため、JDBCドライバ側から取得 した接続は実際の物理接続ではない場合もあります。 注3):プーリングが無効のときに、接続プールから取得する接続は最大プールサイズの制限がありません。そのため、プーリングが無 効の場合、プール内の接続数は最大値に達しません。 11) トランザクション情報 トランザクションの性能情報です。 項番 項目の内容 D1 当該レコードの性能情報を採取した日時 D2 インスタンス名 D3 プロセスID D4 ロールバックされたトランザクションの数 D5 コミットされたトランザクションの数 D6 アクティブなトランザクションの数 採取条件 12) JMS/コネクタ接続プール情報 JMS接続ファクトリ、またはコネクタ接続プールの性能情報です。プールごとに情報を出力します。 コネクタ接続プールの場合、指定したIJServerクラスタに関連付けられたコネクタリソースがひとつもない場合は情報が出力されませ ん。なお、関連付けを行った後は情報が出力されます。 背景色が薄い緑色の行は、監視レベルがHIGHの項目です。 項番 項目の内容 採取条件 D1 当該レコードの性能情報を採取した日時 D2 インスタンス名 D3 プロセスID D4 コネクタ接続プール名 D5 接続要求の平均待機時間(単位:ミリ秒) (注) D6 接続要求の最短待機時間(単位:ミリ秒) (注) D7 接続要求の最長待機時間(単位:ミリ秒) (注) D8 最近受け付けた接続要求の待機時間(単位:ミリ秒) (注) D9 プールから獲得した論理接続数 (注) D10 作成された物理接続数 D11 破棄された物理接続数 D12 検証に失敗した物理接続数 (注) アイドルタイムアウトにより接続が破棄 された時 ・ 接続検証の有効時、かつ接続検 証に失敗した時 - 171 - 項番 項目の内容 採取条件 ・ 接続検証の有効時、かつ「すべて の障害で」の有効時、かつ接続障 害と判断された時 D13 使用されていない物理接続の最小数 D14 使用されていない物理接続の最大数 D15 使用されていない物理接続の現在数 D16 認証情報のマッチングに失敗した物理接続数 (注) D17 プールに戻された論理接続数 (注) D18 認証情報のマッチングに成功した物理接続数 (注) 接続のマッチングに成功した時 D19 タイムアウトになった物理接続数 (注) 接続要求のタイムアウト発生時(最大 待ち時間 > 0) D20 使用中の物理接続の最小数 D21 使用中の物理接続の最大数 D22 使用中の物理接続の現在数 D23 待機しているキュー内の接続要求の数 D24 採取対象外の項目です。 (注) 接続のマッチングに失敗した時 プール内の接続数が最大値に達し、 全接続が使用中の時 注):この項目は、監視レベルをHIGHに設定した場合のみ出力されます。 5.19 プロファイラ設定 プロファイラ設定により、プロファイラツール用の設定を管理できます。 必要に応じてプロファイラの有効/無効を切り替えることができるため、普段はプロファイラを無効にしておき、性能問題の解析が必要と なった際、プロファイラを有効にして分析を行うといった運用が可能です。 定義項目の詳細については、「Java EE運用ガイド」-「Java VMの定義項目」を参照してください。 なお、プロファイラツールと組み合わせた運用については、Interstage Application Serverの技術情報サイト(http://software.fujitsu.com/ jp/technical/interstage/apserver/)でも情報を公開しています。 5.19.1 プロファイラ設定の運用方法 プロファイラ設定の基本運用の流れは、以下のとおりです。 - 172 - プロファイラ設定の作成 プロファイラ設定の作成は、Interstage Java EE管理コンソール、またはasadminコマンドにより行います。 操作方法の詳細については、以下を参照してください。 - Interstage Java EE管理コンソールヘルプ - 「リファレンスマニュアル(コマンド編)」-「create-profilerサブコマンド」 プロファイラ設定の削除 プロファイラ設定の削除は、Interstage Java EE管理コンソール、またはasadminコマンドにより行います。 操作方法の詳細については、以下を参照してください。 - Interstage Java EE管理コンソールヘルプ - 「リファレンスマニュアル(コマンド編)」-「delete-profilerサブコマンド」 プロファイラ設定配下のJVMオプションの作成 プロファイラ設定配下のJVMオプションの作成は、Interstage Java EE管理コンソール、またはasadminコマンドにより行います。 操作方法の詳細については、以下を参照してください。 - Interstage Java EE管理コンソールヘルプ - 「リファレンスマニュアル(コマンド編)」-「create-jvm-optionsサブコマンド」 プロファイラ設定配下のJVMオプションの削除 プロファイラ設定配下のJVMオプションの削除は、Interstage Java EE管理コンソール、またはasadminコマンドにより行います。 操作方法の詳細については、以下を参照してください。 - Interstage Java EE管理コンソールヘルプ - 「リファレンスマニュアル(コマンド編)」-「delete-jvm-optionsサブコマンド」 - 173 - 第6章 J2EEのチューニング J2EEのチューニングについては、「J2EE ユーザーズガイド(旧版互換)」を参照してください。 - 174 - 第7章 業務構成管理機能のチューニング 業務構成管理機能が管理するリポジトリの設定値をチューニングすることで、最適な状態での運用を行うことが可能となります。ここで は、業務構成管理機能が管理するリポジトリのチューニングについて説明します。 7.1 リポジトリのチューニング リポジトリのチューニングについては、以下のマニュアルを参照してください。 ・ “運用ガイド(基本編)”の“業務構成管理機能” - 175 - 第8章 JDK/JREのチューニング CやC++では、メモリに割り当てた領域は、不要になった時点でプログラマーが明示的に解放する必要があります。しかし、この解放 処理に漏れやミスがあると、メモリリーク、プログラム停止および暴走が発生するデメリットがあります。 Javaでは、ガーベジコレクション(GC)を導入したことにより、プログラマーがメモリ管理において作業の負担を軽減できるようになりまし た。その反面、GCが発生するたびにJavaアプリケーションが一時停止するため、パフォーマンス劣化の要因になることがあります。ま た、Java独特のメモリリークも存在します。 Javaでは、スレッドを管理しやすいため、大量のスレッドを生成する傾向があります。このため、スタックが大量に生成されて、メモリ不 足になることもあります。 以上から、多くの場合において、JDK/JREのチューニングは、スタックサイズ、または、GCの発生頻度とその処理時間を調整すること になります。本章では、Javaアプリケーションのチューニングにあたって、必要な基礎知識やチューニング方法などを説明します。 8.1 基礎知識 本項では、JDK/JREのチューニングを行う際に必要な知識を説明します。 8.1.1 JDK関連のドキュメント ■JDKドキュメント 本製品に搭載しているJDK 5.0、6のドキュメントは、それぞれ次のURLにあります。 ・ JDK 5.0: http://java.sun.com/j2se/1.5.0/ja/docs/ja/index.html ・ JDK 6 : http://java.sun.com/javase/ja/6/docs/ja/index.html 上記のドキュメントは、オンラインマニュアルCDの次の箇所にも格納しています。 ・ JDK 5.0: \ApplicationServer\javadocs\jdk5-jdkdocs.zip ・ JDK 6 : \ApplicationServer\javadocs\jdk6-jdkdocs.zip Java VisualVMのドキュメントは、オンラインマニュアルCDに含まれていません。 Java VisualVMに関しては、以下のURLを参照してください。 http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/visualvm/index.html なお、Java VisualVMは、JDK 6から搭載しているツールです。 また、javaコマンドおよびJava VMのオプションには、チューニングに関するオプションがあります。本章では、これらのオプションを随 所で紹介します。 各オプションの詳細は、次を参照してください。なお、本マニュアル内で具体的に説明していないJava VMのチューニングに関する オプションは、富士通版Java VMではサポートしておりません。 ・ javaコマンドのオプション JDKドキュメントの「JDKツールとユーティリティ」の「java」 ・ Java HotSpot VM Options http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html ■Java プラットフォーム移行ガイド JDK 1.3で開発されたJavaプログラムを、JDK 5.0に移行する際の非互換や問題点については、「Java プラットフォーム移行ガイド (バー ジョン 1.3 から 5.0 へ)」を参照してください。 このガイドは、オンラインマニュアルCDの次の箇所に格納しています。 ・ \ApplicationServer\JavaplatformMigration\jm_white_paper_r6a-jp.pdf - 176 - JDK5.0からJDK6への移行については、以下のURLを参照してください。 ・ http://www.oracle.com/technetwork/java/javase/adoptionguide-137484.html 8.1.2 Java VM ■製品搭載のJava VM JDK/JREには、Javaのバイトコードを解釈・実行するエンジン部であるJava仮想マシン(Java VM)があります。 “表8.1 Java VMの種類と特徴”に、Java VMの種類と特徴を示します。 表8.1 Java VMの種類と特徴 Java VMの名称 Java VMの特徴 Java HotSpot Client VM アプリケーション起動時間を短縮し、メモリ消費を抑制するように設計されたクライ アント環境向けのJava VMです。 富士通版Java HotSpot Client VMでは、Oracle CorporationのJava VMであるJava HotSpot Client VMをベースに、富士通独自技術によるトラブルシューティングに関 する機能強化などを追加実装しています。 そのため、ベースとしたJava HotSpot Client VMと機能的な互換性を基本的にもっ ています。 追加実装された機能項目については、“8.1.3 FJVM”を参照してください。 Java HotSpot Server VM (FJVM) アプリケーション起動時間の短縮などよりも、安定性および、スループットの向上を 考慮して設計されたサーバ環境向けのJava VMです。 富士通版Java HotSpot Server VMでは、Oracle CorporationのJava VMである Java HotSpot Server VMをベースに、富士通独自技術による性能改善やトラブル シューティングに関する機能強化などを追加実装しています。 そのため、ベースとしたJava HotSpot Server VMと機能的な互換性を基本的にもっ ています。 富士通版Java HotSpot Server VMは、Interstage Application Server搭載のJDK/ JREにおけるデフォルトのJava VMであることから、このJava VMを特にFJVMと呼 びます。 追加実装された機能項目については、“8.1.3 FJVM”を参照してください。 Interstage Application Server搭載のJDK/JREでは、Java HotSpot Client VMとFJVM(=Java HotSpot Server VM)を搭載しています。 デフォルトのJava VMは、FJVMです。これは、javaコマンドのオプションに、“-server”または“-fjvm”を指定することと同義です。Java HotSpot Client VMを使用したい場合は、オプションに“-client”を指定してください。 実行モードが64ビットモードのJDK/JREではFJVMのみ使用可能です。Java HotSpot Client VMは搭載していません。 エルゴノミクス機能によるJava VMの自動選択機能 富士通版JDK/JRE 5.0、6では、エルゴノミクス機能によるJava VMの自動選択機能(マシンのCPU数や物理メモリ量などに応じて、使 用するJava VMを自動的に選択する機能)は無効になっています。 ■Java VM関係の資料 Java VMの詳細は、JDKドキュメンテーションの次を参照してください。 ・ JDK 5.0の場合: [J2SEの概要] > [Java 仮想マシン] および [新機能と拡張機能] > [仮想マシン] ・ JDK 6の場合 : [Java SE 6 概要] > [Java 仮想マシン] および http://java.sun.com/javase/ja/6/docs/ja/technotes/guides/vm/index.html 他にも、Java VMに関連する資料があります。 - 177 - ・ The Java Virtual Machine Specification (Java VM仕様書) http://java.sun.com/docs/books/jvms/ ・ Java HotSpot VM Options http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html ・ Tuning Garbage Collection with the 5.0 Java Virtual Machine http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html 8.1.3 FJVM 本章におけるJava VMに関する情報は、デフォルトのJava VMである「富士通版Java HotSpot Server VM(=FJVM)」を中心に説明し ています。なお、特に断り書きの無い限り、それらの情報は「富士通版Java HotSpot Client VM(=Java HotSpot Client VM)」に対して も、そのまま適用されます。 FJVMにおいて提供される「富士通独自技術により強化された機能および固有機能」は以下のとおりです。 FJVM固有機能を除き、Java HotSpot Client VMも同様です。 ・ New世代領域サイズ自動調整機能付きGC(FJGC)(注) ・ New世代領域用制御処理並列化機能付きGC(パラレルGC) ・ コンカレント・マーク・スイープGC付きパラレルGC(CMS付きパラレルGC) ・ オブジェクト参照の圧縮機能 (注) ・ ガーベジコレクションのログ出力 ・ コンパイラ異常発生時の自動リカバリ機能 (注) ・ 長時間コンパイル処理の検出機能 (注) ・ 動的コンパイル発生状況のログ出力機能 (注) ・ クラスのインスタンス情報出力機能 ・ java.lang.System.gc()実行時におけるスタックトレース出力機能 ・ Java VM終了時における状態情報のメッセージ出力機能 ・ ログ出力における時間情報のフォーマット指定機能 ・ FJVMログ ・ メモリ領域不足事象発生時のメッセージ出力機能の強化 ・ スタックオーバーフロー検出時のメッセージ出力機能 注) FJVMにだけ提供されるFJVM固有機能です。 8.1.4 仮想メモリと仮想アドレス空間 Javaアプリケーションを開発・運用するにあたり、OSのメモリ管理の概要を知っておく必要があります。本節では、OSの一般的なメモリ 管理技法の1つである仮想アドレス空間を説明します。 なお、仮想アドレス空間の具体的なアーキテクチャーはOSごとに異なりますが、本節では各OSに共通する内容を説明します。 ■仮想メモリ OSは、物理メモリ(RAM)だけでなくスワップファイルを活用することにより、多くのメモリ領域を使用することができます。このテクノロ ジーを仮想メモリといいます。仮想メモリの容量は、RAMとスワップファイルのサイズの合計になります。 図1 OSが利用可能なメモリ容量 - 178 - ただし、ハードディスクへのアクセスはRAMより低速なので、メモリのスワッピングは性能に大きく影響を与えますので、注意が必要に なります。 ■仮想アドレス空間 OS上でプログラムを起動すると、OSがプログラムを実行・管理する単位としてのプロセスが生成されます。同様にして、Javaアプリケー ションを起動すると、Javaプロセスが生成されます。 OS上で生成されたプロセスには、仮想アドレス空間が割り当てられます。仮想アドレス空間は、それぞれのプロセスで独立したもので あり、あるプロセスから別のプロセスの仮想アドレス空間にアクセスすることはできません。マシンに積んでいる物理メモリ(RAM)のサイ ズとは関係なく、仮想アドレス空間のサイズは、常に一定です。たとえば、32ビットアーキテクチャーのOSの場合、物理メモリ(RAM)の サイズに依存せず、仮想アドレス空間のサイズは常に4GB(2の32乗バイト)です。 このため、大量の仮想メモリを用意しても、1つのプロセスで使用できるメモリ量の上限は仮想アドレス空間の上限になりますから、プ ロセスが仮想アドレス空間の大きさ(実際には後述のユーザ空間の大きさ)を越えるメモリ量を必要とする場合は、メモリ不足の状態に なります。 逆に、プロセスが必要とするメモリ量が仮想アドレス空間の大きさ(実際には後述のユーザ空間の大きさ)の上限未満だったとしても、 そのメモリ量に相当する仮想メモリ量がOS上になければ、メモリ不足の状態になります。 また、大量の仮想メモリを用意しても、OS上で大量のプロセスが動作していて仮想メモリを大量に消費している状態であれば、各プロ セスに割り当てられた仮想アドレス空間を使い切っていなくても、メモリ不足の状態になる場合があります。 ■ユーザ空間 プロセスが持つ仮想アドレス空間のうち、実際にプロセスが使用できる空間を、ユーザ空間といいます。ユーザ空間には、プログラム の実体(Windows(R)でJavaアプリケーションを実行する場合は、java.exeなど)がコピーされるだけでなく、スタックやヒープなどのさまざ まなセグメントがあります。更にユーザ空間は、実行するプログラムだけでなく、そのプログラムを実行させるためのOS側のプログラムな どでも使用します。Javaプロセスのユーザ空間の場合には、前述の各セグメントの他に、Javaオブジェクトを格納するセグメント(=Java ヒープ)があります。このため、Javaアプリケーションをチューニングする際の対象となるJavaヒープのサイズの上限値は、ユーザ空間の サイズよりも少なくなります。 Javaアプリケーションのチューニングを実施する際は、仮想メモリの容量やプロセスの使用状況など、システムの状態を考慮する必要 があります。なおOSの種類やアプリケーションの実行モードによって、ユーザ空間として使用できる上限値が異なるため、注意が必要 です。 なお、各セグメント獲得・解放時の実際の制御処理はOSが行います。そのため、各セグメントに関する管理方法/動作仕様/大きさに ついては、JDK/JREを実行する各OSの仕様に依存します。そして、プロセス外部からはユーザ空間に空きが存在するように見える場 合であっても、OSの制御処理上は利用できる空きが無いと判断され、セグメントに対応するメモリ領域が獲得できず、プロセス動作が 異常となる場合がありますので注意してください。 また、OSの制御処理上、各セグメント間には、アプリケーションから利用できない隙間領域が存在する場合があります。そのため、通 常、ユーザ空間としての上限値まで仮想メモリを使用することはできません。プロセスが使用するメモリ量として、ユーザ空間の上限値 まで使えることを前提とした設計にはしないでください。 ■実行モード 実行モードが変わると、プログラムの実行に必要な基本メモリ量が変わります。 具体的には、プログラムの実行モードを32ビットモードから64ビットモードに変更して実行する場合、ポインタを扱うために必要となる メモリ量の単位が、4バイトから8バイトになります(OSによっては、整数を扱う際に必要となるメモリ量の単位も異なります)。そのため、 同じソースから作られたプログラムの場合であっても、64ビットOS上で64ビットモードのプログラムを使ってアプリケーションを動作させ る場合は、32ビットOSまたは64ビットOS上で32ビットモードのプログラムを使ってアプリケーションを動作させる場合よりも、より大きなメ モリ量が必要となります。 64ビットモード時のCデータ型モデル - 179 - LP64モデル:long型/ポインタが32ビット(4バイト)から64ビット(8バイト)へ変更されます。 P64モデル :ポインタが32ビット(4バイト)から64ビット(8バイト)へ変更されます。 Javaアプリケーションの場合もC/C++アプリケーションの場合と同様、実行モードが変わると、プログラムの実行に必要な基本メモリ量 が変わります。 特に、オブジェクトを構成するデータ内容にはポインタを扱う情報も多数あるため、 64ビットモードの場合、1オブジェクトあたりに必要 となるメモリ域の大きさは32ビットモードの場合よりも大きくなります。 そのため、通常、64ビットOS上で64ビットモードのJDK/JREを使ってJavaアプリケーションを動作させる場合、32ビットOSまたは64ビッ トOS上で32ビットモードのJDK/JREを使ってJavaアプリケーションを動作させた場合の設定に対して、1.5~2倍のJavaヒープ量が必要 です。 8.1.5 スタック ここでは、スタックについて簡単に説明します。 プログラムがスレッドを生成すると、OSがそのスレッドに対してスタックと呼ばれるメモリ領域をそのスレッドの終了時まで自動的に割り 当てます。スタックは、スレッド上で実行されるメソッドや関数が使用するローカル変数などの一時的なデータを格納するための作業域 として使用されます。 スレッド上では多くのメソッドや関数が入れ子状態で呼び出されるので、これらのメソッドや関数が使用する一時的な作業域を管理す るために、OSはフレームと呼ばれる区切りで個々の作業域をスタック上に積み上げることで管理しています。(メソッドや関数が呼び出 されるごとに、これらが使用する作業域をフレームという区切りでスタック上に積み上げ、フレーム内のデータは呼び出したメソッドや関 数からの復帰時に破棄されます。) このため、あるメソッドを再帰的に無限に呼び出すなどしてメソッドを深く呼び出した場合や、非常に大きなサイズのローカル変数など を使用するメソッドを呼び出した場合などには、スタック域の枯渇により、スタック上にフレームを積み上げることができなくなり、スタック オーバーフローが発生する場合があります。 Javaアプリケーションの場合、通常、スタックオーバーフローが発生すると、java.lang.StackOverflowErrorがスローされます。ただし、 Javaプロセス中のネイティブモジュール実行時の処理でスタックオーバーフローが発生した場合には、java.lang.StackOverflowErrorは スローされません。なお、FJVMを使用しているJavaプロセス中のネイティブモジュール実行時にスタックオーバーフローが発生した場 合は、“8.6.3.1 スタックオーバーフロー検出時のメッセージ出力機能”によってスタックオーバーフローの発生を検出できる場合があり ます。 スタック領域の管理 スタック領域の実際の管理はOSが行います。そのため、スタック領域に関する管理方法/動作仕様/大きさについては、JDK/JRE を実行する各OSの仕様に依存します。 なお、Javaアプリケーション実行時のスタックオーバーフロー発生をJava VMが検出できる様にするために、スタック領域の一部を Java VMの制御用領域として使用します。そのため、Javaアプリケーションから使用できるスタック領域の大きさは、スタックとして割 り当られた領域の大きさよりも若干小さな大きさになります。 クラスファイル実行時のスタック領域の利用 Javaの実行環境であるJava VMが起動された後、Java VMは、実行対象プログラムであるクラスファイルを読み込み、クラスファイ ルを以下の2つの方法を用いて実行します。 ・ インタプリタによるバイトコードの実行 ・ 動的コンパイルにより、バイトコードを機械命令に翻訳してから実行 あるクラスファイル中の同じJavaメソッドを実行する場合であっても、Java VMによる実行方法が異なる場合は、実行時に使用され るスタックの大きさが異なります。 なお、クラスファイルの実行方法については、“8.3 動的コンパイル”を参照してください。 - 180 - ユーザ空間のメモリ不足によるスレッド生成エラー スタックは、プロセス内のユーザ空間から割り当てられます。 そして、ユーザ空間のメモリ不足によりスタックなどを割り当てることができなった場合には、スレッド生成処理でエラーが発生します。 Javaプロセスの場合、Javaヒープなどのサイズを大きく確保すると、その分だけスタックとして割当て可能な領域が減少するため、 Javaプロセス内で生成可能なスレッドの個数も減少します。 このため、Javaプロセス内のスレッド生成処理がエラーとなる要因の1つとして、Javaヒープなどのサイズを大きく確保したことによる ユーザ空間のメモリ不足が考えられます。 Javaプロセスの消滅 Windows(R)では、Javaプロセス内でスタックオーバーフローが発生した場合、システム状態やプログラム状態によっては、OSから FJVMやワトソン博士に制御が渡らず、痕跡を残さずにJavaプロセスが消滅する場合があります。 なお、ワトソン博士の説明は、“8.5.9.1 クラッシュダンプ”を参照してください。 8.1.6 Javaヒープとガーベジコレクション ここでは、Javaヒープとガーベジコレクション(GC)を説明します。 Javaヒープは、Javaプロセス内に存在するJavaオブジェクトを格納するための領域です。 Javaヒープは、New世代領域、Old世代領域およびPermanent世代領域に大別され、Java VMが管理・制御します。なお、New世代 領域とOld世代領域は、メモリ割り当てプールという形で各領域を合わせて一括的に管理・制御します。 Java VMは、Javaアプリケーションの実行時に、JavaオブジェクトをJavaヒープの各領域に格納します。Javaヒープの空き容量がなく なった場合は、java.lang.OutOfMemoryErrorがスローされます。 また、不要となったJavaオブジェクトはGCにより回収され、Javaヒープの空き領域が増加します。なお、New世代領域に存在する不要 となったJavaオブジェクトを回収するGC処理を「NewGC処理(またはマイナーGC処理)」といいます(NewGCまたはマイナーGCと略す 場合もあります)。また、New世代領域だけでなく、Old世代領域やPermanent世代領域を含むJavaヒープ全体に存在する不要となっ たJavaオブジェクトを回収するGC処理を「FullGC処理」といいます(FullGCと略す場合もあります)。 図1 Javaヒープの構造 ・ New世代領域とOld世代領域(メモリ割り当てプール) New世代領域とOld世代領域は、インスタンスや配列などのJavaオブジェクトを管理する領域です。 New世代領域は寿命の短いJavaオブジェクトを管理します。通常、Javaアプリケーションで要求されたオブジェクトは、New世代領 域に生成されます。一定期間New世代領域で生存したJavaオブジェクトは、GC処理によってOld世代領域に移動されます。そし て、Old世代領域に存在する不要となったJavaオブジェクトは、FullGC処理によって回収されます。領域がNew世代とOld世代に 分かれるのは、世代別にGC処理を実行するためです。 なお、メモリ割り当てプール全体のサイズの初期値および最大値は、それぞれ、“-Xms”オプションおよび“-Xmx”オプションで指 定することができます。 ・ Permanent世代領域 Permanent世代領域は、Javaのクラス、メソッドや定数など、永続的に参照される静的オブジェクトを管理する領域です。 Permanent世代領域に存在する不要となったオブジェクトは、FullGC処理によって回収されます。 なお、Permanent世代領域の大きさの初期値および最大値は、それぞれ、“-XX:PermSize”オプションおよび“-XX:MaxPermSize” オプションで指定することができます。 - 181 - ユーザ空間 Javaヒープは、Javaプロセスのユーザ空間内に割り当てられます。 また指定された最大値までJavaヒープが利用できる環境にするため、Java VM起動時に、メモリ割り当てプールおよびPermanent世 代領域を、各最大値の大きさで連続領域としてリザーブします(同一プロセス内の他の処理から使用できないようにします)。 このため、Javaヒープの最大値を大きく設定すると、その分だけスタックなど他の処理に割り当てられるメモリ領域が減少します。 別な言い方をすれば、ユーザ空間内で使用できるメモリ量の上限から、Javaアプリケーション自身、Java VM、そしてネイティブモジュー ル(OSを含む)が使用するメモリ量などを差し引いた値が、Javaヒープとして使用できる上限となります。 なおJava VM起動時に指定されたJavaヒープの大きさが利用できない場合、Java VMは以下のメッセージを出力し、Javaプロセスを 終了させます。 Error occurred during initialization of VM Could not reserve enough space for object heap このメッセージが出力された場合は、Javaヒープを小さくするチューニングを行ってください。 またSolaris用およびLinux用のJava VMにおいて、Java VM起動時またはJavaアプリケーション実行中に「ユーザ空間不足」または「仮 想メモリ不足」が発生した場合、Java VMは以下のメッセージを出力し、Javaプロセスを終了させます。 Java VM起動時の場合: 制御名: mmap failed: errno=エラー情報, 制御情報.... Error occurred during initialization of VM mmap failure Javaアプリケーション実行中の場合: 制御名: mmap failed: errno=エラー情報, 制御情報.... (上記メッセージに続いて、java.lang.OutOfMemoryErrorメッセージが出力される場合があります。) 制御名 : メモリ不足が発生した際のJava VMの制御名 エラー情報:メモリ不足が発生した際のJava VMのエラー情報 制御情報 : メモリ不足が発生した際のJava VMの制御情報 ユーザ空間が不足している場合は、Javaヒープを小さくするチューニングを行ってください。 仮想メモリが不足している場合は、他の不要なプロセスを終了して仮想メモリに余裕を持たせるか、物理メモリ(RAM)またはスワップ ファイルを拡張して仮想メモリを増やすようにチューニングを行ってください。 ユーザ空間 Java VMは、OSの仮想メモリ資源を効率的に利用するために、起動時にJavaヒープの各領域の初期値を割り当て、各領域の最大値 まで段階的に拡大する制御方法を用いています。 具体的には、Javaプロセスの起動時はメモリ割り当てプールおよびPermanent世代領域の各初期値のサイズを割り当てます。その 後、FullGC処理の結果、各領域が不足した場合、各領域の最大値まで、段階的に拡大していきます(GC処理としてパラレルGCを使 用している場合は、メモリ割り当てプールの大きさが、初期値よりも小さくなる場合があります)。 なお、各領域を拡大していく過程で、OS側で物理メモリの資源をディスクにスワップする処理が発生する場合があります。このスワッ プ処理により、各領域を拡大するFullGC処理に時間がかかる場合があります。FullGC処理中のスワップ処理発生による時間遅延が 問題になる場合は、Javaヒープの各領域に対する初期値と最大値は同じ値に指定してください(GC処理としてパラレルGCを使用して いる場合は、メモリ割り当てプールの最小使用量保証機能を有効にすることが必要となる場合があります)。 パラレルGCについては、“8.2.4 New世代領域用制御処理並列化機能付きGC(パラレルGC)”を参照してください。 - 182 - 8.1.7 FJVMに対して指定可能なチューニング用オプション Javaヒープのチューニングなど、FJVMに対して指定可能なJava VMのチューニングに関するオプションを、図1に示します。 各オプションの使用法については、本マニュアルを参照してください。 なお、本マニュアル内で具体的に説明していないJava VMのチューニングに関するオプションは、FJVMではサポートしておりません。 図1 FJVMに対して指定可能なJava VMのチューニングに関するオプション 【Javaヒープチューニング用のオプション】 -Xms -Xmx -XX:NewSize -XX:MaxNewSize -XX:NewRatio -XX:SurvivorRatio -XX:TargetSurvivorRatio -XX:PermSize -XX:MaxPermSize 【スタックサイズチューニング用のオプション】 -Xss -XX:CompilerThreadStackSize 【使用するガーベジコレクション処理を選択するオプション】 -XX:+UseSerialGC -XX:+UseFJGC -XX:+UseParallelGC -XX:UseFJcmsGC 【ガーベジコレクション処理のチューニング用オプション】 パラレルGC用: -XX:ParallelGCThreads -XX:+UseAdaptiveSizePolicyMinHeapSizeLimit -XX:-UseAdaptiveSizePolicyMinHeapSizeLimit -XX:+AutomaticallyJavaHeapSizeSetting -XX:GCTimeLimit -XX:GCHeapFreeLimit -XX:+UseGCTimeLimit (JDK/JRE 5.0の場合) -XX:+UseGCOverheadLimit (JDK/JRE 6の場合) CMS付きパラレルGC用: -XX:ParallelGCThreads -XX:ConcGCThreads (JDK/JRE 6の場合) 共通: -XX:-UseCompressedOops (64ビットモード版JDK/JRE 6の場合) 【チューニングの際に使用するログ出力などのデバッグ用オプション】 - 183 - ガーベジコレクションのログ出力用: -verbose:gc -XX:+UseFJverbose -XX:-ClassUnloadingInfo -Xloggc 動的コンパイルのログ出力用: -XX:+PrintCompilationCPUTime -XX:+FJPrintCompilation ログ出力共通: -XX:FJverboseTime その他: -XX:-OmitStackTraceInFastThrow -XX:+PrintClassHistogram -XX:+PrintJavaStackAtSystemGC -XX:+VMTerminatedMessage -Xcheck:jni -XX:+PrintCompilerRecoveryMessage -XX:CompileTimeout 8.1.8 Java Native Interface(JNI) アプリケーションミスのトラブルの確実な事前防止のためには、(CやC++等を使用した)ネイティブプログラムを、Java Native Interface(JNI) 経由で利用してはいけません。実現しようとしている機能が、Javaにより記述できないか設計段階で十分に検討を行ってください。やむ をえず利用する場合でも、JNIの利用は最小限にし、十分な確認とデバッグを実施してください。 JNIを利用する場合の前提スキルとして、以下は必須です。 ・ C/C++によるマルチスレッドプログラミングの経験がある ・ トラブル発生時、自分でデバッグできる ファイナライズ処理を期待したリソース管理は、行わないでください。JNI関連で、もっともトラブルが多いのは、ネイティブプログラム側 で確保したメモリの後処理漏れです。例えば、次のようなプログラミングをしてはいけません。 ------- Java --------------class A { native long nativeAlloc(); native void nativeFree(long a); long address; A() { address = nativeAlloc(); } public void finalize() { nativeFree(address); } } ------- Java --------------------- C -----------------JNIEXPORT jlong JNICALL Java_A_nativeAlloc(JNIEnv *env, jobject o) { return (jlong)malloc(10); - 184 - } JNIEXPORT void JNICALL Java_A_nativeFree(JNIEnv *env, jobject o, jlong p) { free((void*)p); } ------- C ------------------- エラー処理は、必ず行ってください。ネイティブプログラム側でJNI関数呼び出しをしたとき、色々なケースでJavaレベルのエラーにな ることがあります。このエラーに対する後処理をネイティブプログラム側で行わないと、例外がスローされている状態のままになり、それ 以降のJNI関数の呼び出しに失敗し、アプリケーションが正しく動作しません。 なお「JNI関数」とは、以下のJNI仕様書に記述されている関数のことです。 http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html これらを使う場合は、その度にExceptionOccurredを使用しエラーチェックをする必要があります。 Solaris、Linux上でJNIを利用される場合は、連携するネイティブプログラムまたは、ネイティブライブラリにおいてシグナルハンドラの 書き替えを絶対に行わないでください。 なお、JDK/JRE 1.4.0以降でサポートされたシグナル連鎖機能(Signal Chaining)を利用する場合、マルチスレッド環境におけるシグナ ル動作など、OSやJava VM自身のシグナル動作およびプログラミングについての知識が前提として必要です。 安定稼動が要求されるシステムの設計においては、この機能の使用もお勧めできません。 8.2 ガーベジコレクション(GC) 本節では、ガーベジコレクション(GC)について説明します。 8.2.1 FJVMでサポートされるガーベジコレクション処理 FJVMでサポートされるガーベジコレクション(GC)処理には、JavaヒープのNew世代領域に対するGC制御方法の違いにより、以下の 4種類があります。 ・ 標準GC(シリアルGC) ・ New世代領域サイズ自動調整機能付きGC(FJGC) ・ New世代領域用制御処理並列化機能付きGC(パラレルGC) ・ コンカレント・マーク・スイープGC付きパラレルGC(CMS付きパラレルGC) なお、JDK/JREのバージョン、実行モード、Java VMの種類により、サポートされるGCの種類が異なります。また、Java VMの種類によ り、デフォルトで動作するGCが異なります。 “表8.2 サポートされるGCの種類”に、サポートされるGCの種類とデフォルトのGCを示します。 表8.2 サポートされるGCの種類 JDK/JREのバージョン JDK/JREの実行モード Java VMの種類 シリアルGC JDK/JRE 5.0 32ビットモード JDK/JRE 6 64ビットモード 32ビットモード 64ビットモード Client VM FJVM FJVM ※ Client VM FJVM FJVM ※ ◎ ○ ○ ◎ ○ ○ ○ FJGC パラレルGC ○ ◎ ◎ ○ ◎ ◎ CMS付きパラレルGC □ □ □ □ □ □ - 185 - ○:サポートされるGC ◎:サポートされるGC、かつデフォルトのGC □:Interstage Application Server Enterprise EditionでだけサポートされるGC ※実行モードが64ビットモードのClient VMは提供していません。 GCは、デフォルトのGCの使用を推奨します。 通常、デフォルトのGCを変更する必要はありません。 ■New世代領域の使われ方 FJGC以外のGC処理におけるNewGC処理では、New世代領域を「eden space」、「from space」および「to space」の3つの内部領域に 細分割し、当該領域上において、一般に世代別GC制御と言われる制御方法を用いて、Javaアプリケーションが生成要求したオブジェ クトを管理・制御しています。 このうち、「from space」および「to space」は、Java VMがNewGC処理を行う際の作業域的な役割を持つ領域となっています。そのた め、「from space」および「to space」の各領域が占める大きさのうち、Javaアプリケーションからのオブジェクト生成要求のために使用され る大きさは、その領域の一部分だけとなります。 そのため、FJGC以外のGC処理を使用している場合は、ガーベジコレクションのログ出力などの出力データにおいて、メモリ割り当て プールやNew世代領域に空きがあるように見える場合であっても、実際には空きがない場合があります(空きがあるように見える場合で あっても、その差は、NewGC処理用の作業域的な役割で使用済となっている場合があります)。 ■ガーベジコレクション処理の実行抑止 “表8.3 ガーベジコレクション処理の実行が抑止される機能”に示す機能を使用するJavaアプリケーションを実行すると、Javaヒープ内に 存在する全オブジェクトの移動が禁止されるクリティカルセクションと呼ばれる状態が、当該機能の利用状況に応じて発生します。 クリティカルセクション状態発生時は、オブジェクトの移動が禁止されるため、オブジェクト移動が必須となるGC処理の実行が抑止さ れる状態となります。 Java VMは、JavaアプリケーションによりGC処理の実行が抑止されている際に発生したオブジェクト生成要求に対し、New世代領域 に空きが無い場合には、Old世代領域の空き領域を一時的に使用して対応します。 そして、要求されたオブジェクト量を満たす空きがOld世代領域にない場合には、java.lang.OutOfMemoryError例外を発生させます。 そのため“表8.3 ガーベジコレクション処理の実行が抑止される機能”の機能を多用するJavaアプリケーションの場合は、GC処理実行 が抑止される状態も多数発生する可能性が高くなり、当該機能を多用しないJavaアプリケーションに比べ、GC処理実行抑止に因る java.lang.OutOfMemoryError例外が発生しやすい状態にあります。 特にOld世代領域が小さい状態でJavaアプリケーションを実行した場合は、Old世代領域の空きとなり得る最大値(仮にOld世代領域 を全く使用しない場合だと、Old世代領域自身の大きさ)もその大きさに比例して小さいため、その傾向が強まることがあります。 なおFJVMでは、GC処理の実行抑止によりjava.lang.OutOfMemoryError例外が発生したかどうかの情報を出力する機能を提供して います。 詳しくは“8.6.1.1 メモリ領域不足事象発生時のメッセージ出力機能の強化”を参照してください。 表8.3 ガーベジコレクション処理の実行が抑止される機能 【GC処理の実行が抑止される状態となるJNI関数】 - GetPrimitiveArrayCritical()実行からReleasePrimitiveArrayCritical()実行までの間 - GetStringCritical()実行からReleaseStringCritical()実行までの間 【GC処理の実行が抑止される状態となるJVMPI関数】 - DisableGC()実行からEnableGC()実行までの間 【GC処理の実行が抑止される状態となるJVMPIイベント】 - JVMPI_EVENT_THREAD_START - JVMPI_EVENT_CLASS_LOAD - JVMPI_EVENT_CLASS_UNLOAD - 186 - - JVMPI_EVENT_JNI_GLOBALREF_ALLOC - JVMPI_EVENT_JNI_GLOBALREF_FREE - JVMPI_EVENT_JNI_WEAK_GLOBALREF_ALLOC - JVMPI_EVENT_JNI_WEAK_GLOBALREF_FREE - JVMPI_EVENT_OBJECT_ALLOC - JVMPI_EVENT_MONITOR_CONTENDED_ENTER - JVMPI_EVENT_MONITOR_CONTENDED_ENTERED - JVMPI_EVENT_MONITOR_CONTENDED_EXIT - JVMPI_EVENT_MONITOR_WAIT - JVMPI_EVENT_MONITOR_WAITED - JVMPI_EVENT_HEAP_DUMP - JVMPI_EVENT_METHOD_ENTRY - JVMPI_EVENT_METHOD_ENTRY2 - JVMPI_EVENT_METHOD_EXIT ■JVMPIとJVMTI 次の場合、Java Virtual Machine Profiling Interface(JVMPI)をサポートしていません。 ・ JDK/JRE 5.0を使用し、GC処理としてパラレルGCまたはCMS付きパラレルGCが選択されている場合 ・ JDK/JRE 6を使用している場合 JVMPI相当の機能を使用する場合には、JDK/JRE 5.0から導入されたJava Virtual Machine Tool Interface(JVMTI)を使用してくださ い。 JDK/JRE 5.0でJVMPI機能は推奨されていません。やむを得ず使用する場合は、GC処理としてシリアルGCを使用してください。 ■RMI処理の分散GC JavaのRMI処理では、クライアントで不要となった参照に対するサーバ側のオブジェクトを破棄するため、Distributed GC(分散GC)と いう処理を行います。その処理の一貫として、以下のプロパティで設定された時間間隔(デフォルトの時間間隔は1分)ごとに、 java.lang.System.gc()実行によるFull GCが発生します。なお、分散GCとメモリ不足等による通常のガーベジコレクション(GC)が同時に 発生した場合は、メモリ不足等による通常のGCが実行され、分散GCによるFullGCは実行されません(メモリ不足等による通常のGCが NewGC処理だった場合は、FullGCにはなりません)。 -Dsun.rmi.dgc.server.gcInterval=時間間隔(ミリ秒) -Dsun.rmi.dgc.client.gcInterval=時間間隔(ミリ秒) 分散GCは独自のタイマー制御の元で実行されるため、メモリ不足等による通常のGCの実行とは関係せずに実行されます。そのた め、GC処理の結果ログを見た場合、Javaアプリケーションとしての処理がほとんど動作していない時間帯やメモリ不足とは思われない 状態のときに、FullGC処理が実行されているように見える場合があります。 またプロパティで指定された時間間隔が短い場合、Interstage Application Serverの予兆監視機能により警告を受ける(EXTP4368メッ セージやISJEE_OM3204メッセージが出力される)場合がありますので、注意してください。 8.2.2 標準GC(シリアルGC) New世代領域用GC制御に対して何も付加機能を追加していない「標準機能のみ」で構成されたGC処理です。後述のパラレルGCと の対比から、標準GCのことをシリアルGCと呼ぶ場合もあります。 Java HotSpot Client VM、および図1のオプションを指定した場合のFJVMでは、シリアルGCが実行されます。なお、図1のオプショ ンは、シリアルGCによるGC制御を有効にするオプションです。 図1 JDK/JRE 5.0、6のFJVMでシリアルGCを有効にする場合に指定するオプション -XX:+UseSerialGC 図2はシリアルGC使用時に利用可能となる「Javaヒープのチューニング用オプション」です。 図2 Javaヒープチューニング用オプション(シリアルGC使用時) - 187 - -Xms -Xmx -XX:NewSize -XX:MaxNewSize -XX:NewRatio -XX:SurvivorRatio -XX:TargetSurvivorRatio -XX:PermSize -XX:MaxPermSize 8.2.3 New世代領域サイズ自動調整機能付きGC(FJGC) New世代領域用GC制御に対し、富士通独自技術による「New世代領域サイズ自動調整機能(以降、自動調整機能と略する)」を追加 して構成されたGC処理です。富士通独自技術によるGC制御を用いていることから、このGCをFJGCと呼ぶ場合もあります。 本機能は、実行モードが32ビットモードのJDK/JRE 5.0に搭載されたFJVMにだけ提供されており、図1のオプションを指定した場合 に、このGC処理が実行されます。 図1 JDK/JRE 5.0のFJVMでNew世代領域サイズ自動調整機能を有効にするオプション -XX:+UseFJGC 図2はFJGC使用時に利用可能となる「Javaヒープのチューニング用オプション」です。 なお、FJGC使用時かつNew世代領域サイズ自動調整機能が有効な場合は、JavaヒープのNew世代領域およびOld世代領域の大き さに関する値が自動的に調整および最適化されるため、New世代領域の大きさやNew世代領域とOld世代領域の大きさのバランスを チューニングするためのオプションは使用できません。 図2 Javaヒープチューニング用オプション(FJGC使用時) -Xms -Xmx -XX:NewSize (注) -XX:MaxNewSize (注) -XX:NewRatio (注) -XX:PermSize -XX:MaxPermSize 注) New世代領域の大きさや、New世代領域とOld世代領域の大きさのバランスをチューニングするためのオプションです。 図4で示す範囲よりも大きな値を“-Xmx”オプションで指定し、自動調整機能が停止した場合にだけ、このオプションへの指定値は有 効となります。 New世代領域サイズ自動調整機能未提供のJava VM 次のJava VMには、New世代領域サイズ自動調整機能を提供していません。 ・ Java HotSpot Client VM ・ 実行モードが64ビットモードのJDK/JRE 5.0に搭載されたFJVM ・ JDK/JRE 6のFJVM Java HotSpot Client VMに図1のオプションを指定した場合は、図3のエラーメッセージが標準エラー出力へ出力され、Javaプロセスの 起動に失敗します。 FJVMに図1のオプションを指定した場合は、図3のワーニングメッセージが標準エラー出力へ出力され、オプションの指定は無効にな ります。 図3 -XX:+UseFJGCを指定した際に出力されるメッセージ 【Java HotSpot Client VMの場合】 - 188 - Unrecognized VM option '+UseFJGC' 【実行モードが64ビットモードのFJVMの場合】 warning: -XX:+UseFJGC is not supported in Java HotSpot 64-Bit Server VM. 【実行モードが32ビットモードでJDK/JRE 6のFJVMの場合】 warning: -XX:+UseFJGC is not supported in Java HotSpot Server VM. ■New世代領域サイズ自動調整機能 自動調整機能は、Javaアプリケーションの実行状況(オブジェクト生成要求および解放タイミングの状態変動)などの情報から、Javaヒー プのNew世代領域の大きさに関する値を自動的に調整および最適化する機能です。 自動調整機能は、“メモリ割り当てプールの最大サイズ”が図4に示す値の範囲内である場合に有効となります。(“メモリ割り当てプー ルの最大サイズ”は、“-Xmx”オプションで指定できます。) “メモリ割り当てプールの最大サイズ”が図4で示す範囲よりも大きな値である場合は、FJVM起動時に図5のメッセージが標準出力へ 出力され、自動調整機能は停止状態となります。 自動調整機能が停止状態となった場合は、New世代領域の大きさに対する自動調整処理は行なわれず、シリアルGCによるGC制御 と同じ処理方法で、New世代領域の大きさが制御されるようになります。ただし、その場合に使用できるJavaヒープチューニング用オプ ションは、図2で示すオプションだけになります。 図4 自動調整機能が有効となるメモリ割り当てプールの最大サイズ JDK/JRE 5.0: 700MB以下 JDK/JRE 5.0: 2250MB以下 JDK/JRE 5.0: 1500MB以下 図5 自動調整機能停止時に出力されるメッセージ Heap too large for dynamic eden: using static eden JDK/JRE 5.0のFJVMで自動調整機能を有効にしている場合で、かつ以下のような場合には、自動調整機能を有効にするオプション を削除し、FJGC以外のGCを使用してください。 ・ Javaヒープに対するチューニングを手動で行いたい場合: Java HotSpot Server VMを使用する場合と同じように、Javaヒープチューニング用オプションを用いてJavaヒープに対するチューニ ングを行いたい場合には、FJGC以外のGCを使用してください。 ・ ネイティブモジュールで使用するメモリ量をある程度確保する必要がある場合: 自動調整機能が有効な場合、当該機能が使用する作業域(“-Xmx”オプションで指定した値の2/3の大きさ)をユーザ空間から確 保(リザーブ処理だけの確保)しています。 そのため、“-Xmx”オプションで図4に示す範囲内でかつその上限値近くの値を指定した場合、自動調整機能が使用する作業域 確保のため、ネイティブモジュールから使用できるスタックやヒープなどのメモリ量が非常に少なくなっています。 図4に示す範囲の上限値近くの値のメモリ割り当てプールの大きさを確保し、かつネイティブモジュールで使用するスタックやヒー プなどのセグメントに対するメモリ量もある程度確保する必要がある場合には、FJGC以外のGCを使用してください。 ・ Javaプロセスのユーザ空間から連続域の状態で確保できるメモリ量が小さいシステムの場合: 自動調整機能が有効な場合、メモリ割り当てプールと自動調整機能用の作業域を連続域としてユーザ空間から確保しています。 また、ユーザ空間から連続域として確保できる最大メモリ量は、システムごとに異なります。 そのため、“-Xmx”オプションで指定したメモリ割り当てプールの大きさが図4に示す値の範囲内であっても、Javaプロセスのユー ザ空間から、メモリ割り当てプールと自動調整機能用の作業域が連続域として確保できない場合には(Javaプロセスのユーザ空間 から、連続域の状態で確保できるメモリ量が小さいシステムの場合には)、FJVMは以下のメッセージを出力して、Javaアプリケーショ - 189 - ンの実行を中止します。 その場合は、より小さな値を“-Xmx”オプションで指定するか、FJGC以外のGCを使用してください。 Error occurred during initialization of VM Could not reserve enough space for object heap ・ GC処理実行抑止によりjava.lang.OutOfMemoryErrorが発生した場合: 自動調整機能では、Javaヒープ域におけるNew世代領域とOld世代領域の比率をJavaアプリケーションからのオブジェクト生成要 求および解放タイミングの状態変動により動的に変更します。 そしてNew世代領域とOld世代領域を管理するメモリ割り当てプールの大きさには上限があるため、ある時点においてNew世代 領域のサイズを調整・最適化した結果、New世代領域が大きくなった場合は、Old世代領域のサイズは小さくなります(逆にNew世 代領域が小さくなった場合は、Old世代領域のサイズは大きくなります)。 そのため自動調整機能が有効な場合、以下の条件に合致するJavaアプリケーションを実行すると、Old世代領域が小さくなって いる時とJavaアプリケーションによりGC処理の実行が抑止されている時が重なるタイミングが多くなることがあり、結果的にGC処理 実行抑止によるjava.lang.OutOfMemoryErrorの発生が、自動調整機能を無効とした場合よりも多くなることがあります。 - 寿命の短いオブジェクトを多用するJavaアプリケーション。かつ、 - GC処理の実行が抑止される機能を多用するJavaアプリケーション。 GC処理実行抑止によるjava.lang.OutOfMemoryErrorの発生傾向が強い場合は、FJGC以外のGCを使用してください。 なおGC処理の実行が抑止される機能については“表8.3 ガーベジコレクション処理の実行が抑止される機能”を参照してくださ い。 8.2.4 New世代領域用制御処理並列化機能付きGC(パラレルGC) New世代領域用GC制御に対し、「当該処理を並列化して実行する機能」を追加して構成されたGC処理です。New世代領域用のGC 制御を並列化して実行することから、このGCをパラレルGCと呼ぶ場合もあります。 図1のオプションは、パラレルGCによるGC制御を有効にするオプションです。 JDK/JRE 5.0、6のFJVMの場合は、デフォルトでこのGC処理が実行されます。 図1 JDK/JRE 5.0、6でパラレルGCを有効にする場合に指定するオプション -XX:+UseParallelGC 図2はパラレルGC使用時に利用可能となる「Javaヒープのチューニング用オプション」です。 なお、パラレルGC使用時は、JavaヒープのNew世代領域およびOld世代領域の大きさに関する値が自動的に調整および最適化され るため、通常、New世代領域の大きさやNew世代領域とOld世代領域の大きさのバランスをチューニングするためのオプションを使用 する必要はありません。 図2 Javaヒープチューニング用オプション(パラレルGC使用時) -Xms -Xmx -XX:NewSize (*) -XX:MaxNewSize (*) -XX:NewRatio (*) -XX:PermSize -XX:MaxPermSize (*) New世代領域の大きさや、New世代領域とOld世代領域の大きさのバランスをチューニングするためのオプションです。 GC処理用スレッド数 パラレルGCを使用した場合は、実行するハードウェアに搭載しているCPU数に依存した数のGC処理用スレッドがJavaプロセス内に 作成されます。そのため、GC処理用スレッドの数分だけ、スタック域などのスレッド用のメモリ領域が必要となります。 Javaプロセス内でのメモリ量を抑えるためなど、GC処理用スレッドの数を調整する場合には、図3のオプションでGC処理用スレッドの - 190 - 数を指定することにより、GC処理用スレッドの数を調整することができます。 なおGC処理用スレッドの数を抑制した分だけGC処理における性能がおちる場合もありますので、このオプションを用いる場合には、 十分な性能確認を実施してください。また、一般的に、CPU数以上の数のGC処理用スレッドを作成しても、GC処理における性能向上 にはつながりません。 図3 パラレルGCで使用するGC処理用スレッドの数を指定するオプション -XX:ParallelGCThreads=New世代領域GC用スレッドの数 New世代領域用GC処理を行なうGCスレッドの数を指定します。 「0」が指定された場合は、デフォルト値となります。 デフォルト値は以下のとおりです。 - 実行するハードウェアに搭載しているCPU数が7以下の場合 = CPU数分 - 実行するハードウェアに搭載しているCPU数が8以上の場合 = 8 メモリ割り当てプールの省略値自動調整機能 FJVMのパラレルGCでは、JDK/JRE 5.0、6の機能であるエルゴノミクス機能によるメモリ割り当てプールの初期値(-Xms)および最大 値(-Xmx)の省略値自動調整機能(マシンの物理メモリ量などに応じて、-Xmsおよび-Xmxの各オプションに対する省略値を自動的に 決定する機能)を無効にしています。 JDK/JRE 5.0、6のFJVMで、エルゴノミクス機能によるメモリ割り当てプールの省略値自動調整機能を有効にする場合は、図4のオプ ションを指定してください。 ただし、このオプション指定は、システムのメモリ資源不足の要因となる場合があるため、システム内に複数のJavaプロセスを起動、実 行する場合には使用しないでください。 図4 JDK/JRE 5.0、6でメモリ割り当てプールの省略値自動調整機能を有効にするオプション -XX:+AutomaticallyJavaHeapSizeSetting メモリ領域不足事象の検出機能 FJVMのパラレルGCでは、JDK/JRE 5.0、6の機能であるエルゴノミクス機能によるメモリ領域不足事象の検出機能(図5の各オプショ ン指定値による条件が同時に成立した場合に、メモリ領域不足事象(java.lang.OutOfMemoryError)として検出する機能)を無効にし ています。 JDK/JRE 5.0、6のFJVMでエルゴノミクス機能によるメモリ領域不足事象検出機能を有効にする場合は、図6のオプション(使用する JDK/JREの違いにより異なるため注意が必要です)を指定してください。 ただし、このオプション指定で検出されるメモリ領域不足事象は、Javaヒープの使用量だけではなく、メモリ領域不足事象検出用オプ ションで指定された値、およびガーベジコレクション処理の動作状況から得られた統計情報などを元に決定されるため、Javaヒープの 使用量が不足していない状態であっても、 メモリ領域不足事象が検出される場合がありますので注意してください。 図5 メモリ領域不足事象検出条件 -XX:GCTimeLimit=GC処理に要する時間の上限値 (デフォルトは98) Javaアプリケーションの合計処理時間に対して、GC処理に要した時間の上限値をパーセント単位(%)で 指定します。 指定された上限値を超えた場合、検出条件の一方が成立します。 -XX:GCHeapFreeLimit=GC処理後のJavaヒープ量の空きスペースの下限値 (デフォルトは2) メモリ割り当てプールの最大値に対する、GC処理後のJavaヒープ量の空きスペースの下限値をパーセン ト単位(%)で指定します。 指定された下限値を下回った場合、検出条件の一方が成立します。 - 191 - 図6 JDK/JRE 5.0、6でメモリ領域不足事象検出を有効にするオプション 【JDK/JRE 5.0の場合】 -XX:+UseGCTimeLimit 【JDK/JRE 6の場合】 -XX:+UseGCOverheadLimit パラレルGC処理のエルゴノミクス機能およびメモリ割り当てプールの最小使用量保証機能 FJVMでパラレルGCを使用した場合、JDK/JRE 5.0、6の機能であるパラレルGC処理のエルゴノミクス機能(メモリ割り当てプール内 の各世代領域サイズの動的変更機能)により、Javaアプリケーションの実行状況や負荷/GC処理に掛かる時間などの情報から、GC 処理としての最適動作状態になるように、メモリ割り当てプール内の各世代領域サイズが自動的に調整・変更および最適化されます。 その際、メモリ割り当てプールの使用量が-Xmsオプションで指定した値(メモリ割り当てプールの初期値)よりも小さくなることあります (-Xmsオプションで指定した値よりも下回るメモリ割り当てプールの使用量で、GC処理としての最適動作状態になることがあります)。 パラレルGCを使用してJavaアプリケーションを実行する際、メモリ割り当てプールの使用量についての操作を行なう場合は、以下の オプションを指定してください。 メモリ割り当てプールの最小使用量保証機能を操作するオプション 【-Xmsオプションで指定した値よりもメモリ割り当てプールの使用量を小さくしない場合】 -XX:+UseAdaptiveSizePolicyMinHeapSizeLimit パラレルGC処理のエルゴノミクス機能動作時、-Xmsオプション指定値によるメモリ割り当てプールの最小使用量保証機能を有効に します。 Javaアプリケーション実行時に使用されるメモリ割り当てプールの大きさは,「-Xmsオプション指定値」から「-Xmxオプション指定値」 の範囲で変動します。 (-Xmsオプション指定値と-Xmxオプション指定値が等しい場合、使用中となるメモリ割り当てプールの大きさは変動しません。) この状態は、JDK/JRE 6でパラレルGCを使用する場合のデフォルト状態です。 【-Xmsオプションで指定した値よりもメモリ割り当てプールの使用量を小さくして良い場合】 -XX:-UseAdaptiveSizePolicyMinHeapSizeLimit パラレルGC処理のエルゴノミクス機能動作時、-Xmsオプション指定値によるメモリ割り当てプールの最小使用量保証機能を無効に します。 Javaアプリケーション実行時に使用されるメモリ割り当てプールの大きさは,「Java VMとしての下限値」から「-Xmxオプション指定値」 の範囲で変動します。 (-Xmsオプション指定値と-Xmxオプション指定値が等しい場合であっても、使用中となるメモリ割り当てプールの大きさは変動しま す。) なお、Javaアプリケーションの実行時に使用されるメモリ割り当てプールの大きさが-Xmsオプション指定値よりも小さくなった場合、Full GCの発生間隔が、Javaプロセス起動時近辺における発生間隔よりも短くなってしまう場合があります。しかし、パラレルGC処理のエル ゴノミクス機能は、GC処理に掛かる時間情報も考慮した上で、GC処理としての最適動作状態となるように調整しています(メモリ割り当 てプールを縮小しても、Full GCに掛かる時間が少ない状態の場合に最適動作状態としています)。そのため、メモリ割り当てプールの 縮小によりFull GCの発生間隔が短くなった場合でも、Javaアプリケーション実行時の性能に対する影響はほとんどありません。 この状態は、JDK/JRE 5.0でパラレルGCを使用する場合のデフォルト状態です。 なおメモリ割り当てプールの最小使用量保証機能の有効/無効に関わらず、Javaプロセス起動時に使用されるメモリ割り当てプール の大きさは、-Xmsオプションで指定された値となります。 - 192 - 8.2.5 コンカレント・マーク・スイープGC付きパラレルGC(CMS付きパラレルGC) New世代領域用GC制御を並列化して実行する機能、およびJavaアプリケーションと同時並列に動作するOld世代領域・Permanent世 代領域用GC制御「コンカレント・マーク・スイープGC(CMS-GC)機能」を追加して構成されたGC処理です。CMS-GC機能を追加された パラレルGC制御であることから、このGCをCMS付きパラレルGCと呼ぶ場合もあります。 図1のオプションは、CMS付きパラレルGCによるGC制御を有効にするオプションです。 CMS付きパラレルGC CMS付きパラレルGCによるGC制御は、以下のエディションに搭載されたJDK/JRE 5.0、6にだけ提供しています。 ・ Interstage Application Server Enterprise Edition CMS-GC CMS-GCは、JavaアプリケーションがFull GCによって停止されることにより影響を受ける「アプリケーションの応答性能の平準化」を改 善するために実行される「Old世代領域内およびPermanent世代領域内の不要オブジェクト回収用のGC機構」です。 Javaアプリケーションを停止させて実行するFull GCに対し、CMS-GCはJavaアプリケーションと同時並列に動作し、Old世代領域内お よびPermanent世代領域内の不要オブジェクトを回収します。CMS-GCの実行により、Old世代領域(New世代領域にあるオブジェクト の移動先や巨大オブジェクトの生成先となる領域) およびPermanent世代領域(Javaのクラス、メソッドや定数などの格納先となる領域) の空きを、Javaアプリケーション動作と並行して増加させることができるため、Full GCの発生を抑えることができます。これにより、Java アプリケーションはFull GCにより停止される影響を受けにくくなり、応答性能平準化の改善が期待できます。 なおCMS-GC動作中は、NewGC処理/Full GC処理の実行開始が遅延する場合があります。そして遅延期間中は、Javaアプリケーショ ンとしての動作も停止します。そのため、ガーベジコレクション処理の結果ログ内のNewGC処理/Full GC処理に対して出力されたGC 処理実行時間よりも長い間、Javaアプリケーションとしての動作が停止している場合があります。 図1 JDK/JRE 5.0、6でCMS付きパラレルGCを有効に場合に指定するオプション -XX:UseFJcmsGC=タイプ タイプとして以下の値が指定できます [CMS-GCによる不要オブジェクトの回収対象を「Old世代領域内」とする場合] type0 type1 type2 [CMS-GCによる不要オブジェクトの回収対象を「Old世代領域内およびPermanent世代領域内」とする場 合] type0p type1p type2p CMS-GCによる不要オブジェクトの回収対象を、Old世代領域内だけでなくPermanent世代領域内にまで拡大した場合、CMS-GCとし ての処理対象域が増加することになるため、CMS-GC完了までの実行時間増加に繋がり易くなります。 その結果、実行するアプリケーションや実行環境によっては、CMS-GCによる回収処理が間に合わなくなり、FullGCの発生に繋がる 場合もありえます。 そのため、回収対象が「Old世代領域内」で正常動作していた環境において、回収対象を「Old世代領域内およびPermanent世代領 域内」にまで拡大する場合は、再度のチューニング作業が必要となります. -XX:UseFJcmsGC=type0またはtype0pが指定された場合 - 193 - 図2は-XX:UseFJcmsGC=type0およびtype0p指定時に利用可能となる「Javaヒープのチューニング用オプション」です。図2に示す チューニング用オプションを用いて、利用者が細かくチューニング作業を行なうことが可能なCMS付きパラレルGCを使用する場合に 指定します。 図2 Javaヒープチューニング用オプション(-XX:UseFJcmsGC=type0およびtype0p指定時) -Xms -Xmx -XX:NewSize -XX:MaxNewSize -XX:SurvivorRatio -XX:TargetSurvivorRatio -XX:PermSize -XX:MaxPermSize -XX:UseFJcmsGC=type1またはtype1pが指定された場合 New世代領域用GCでのオブジェクト回収を重視した調整が成されたCMS付きパラレルGCを使用する場合に指定します。 実行されるアプリケーションの特徴が「大半のオブジェクトが、少ない回数のNew世代領域用GCによって回収されるオブジェクト」で ある場合に、CMS-GCによる応答性能平準化の改善効果が得やすい調整になっています。 Javaヒープのチューニングを行なう場合は、まず-Xms/-Xmxおよび-XX:PermSize/-XX:MaxPermSizeの各オプションにより、メモリ割り 当てプールおよびPermanent世代領域の大きさを調整します。そして必要に応じて、-XX:NewSize/-XX:MaxNewSizeの各オプション でNew世代領域の大きさを調整します。 なおNew世代領域サイズとして、メモリ割り当てプール最大サイズ未満の値を指定できます。ただしNew世代領域サイズを大きくしす ぎると、Full GCが発生しやすくなってしまうので注意が必要です。 図3は-XX:UseFJcmsGC=type1およびtype1p指定時に利用可能となる「Javaヒープのチューニング用オプション」です。 図3 Javaヒープチューニング用オプション(-XX:UseFJcmsGC=type1およびtype1p指定時) -Xms -Xmx -XX:NewSize -XX:MaxNewSize -XX:PermSize -XX:MaxPermSize -XX:UseFJcmsGC=type2またはtype2pが指定された場合 CMS-GCでのオブジェクト回収を重視した調整が成されたCMS付きパラレルGCを使用する場合に指定します。 実行されるアプリケーションの特徴が「大半のオブジェクトが、何回かのGCを経てから回収される(長期間常駐せず、ある程度の短期 間で回収される)オブジェクト」である場合に、CMS-GCによる応答性能平準化の改善効果が得やすい調整になっています。 Javaヒープのチューニングを行なう場合は、まず-Xms/-Xmxおよび-XX:PermSize/-XX:MaxPermSizeの各オプションにより、メモリ割り 当てプールおよびPermanent世代領域の大きさを調整します。そして必要に応じて、-XX:NewSize/-XX:MaxNewSizeの各オプション でNew世代領域の大きさを調整します。 なおNew世代領域サイズとして、メモリ割り当てプール最大サイズ未満の値を指定できます。ただしNew世代領域サイズを大きくしす ぎると、Full GCが発生しやすくなってしまうので注意が必要です。 図4は-XX:UseFJcmsGC=type2およびtype2p指定時に利用可能となる「Javaヒープのチューニング用オプション」です。 図4 Javaヒープチューニング用オプション(-XX:UseFJcmsGC=type2およびtype2p指定時) -Xms -Xmx -XX:NewSize -XX:MaxNewSize -XX:PermSize -XX:MaxPermSize - 194 - JDK/JRE 5.0のJVMTI JDK/JRE 5.0を使用し、GC処理としてCMS付きパラレルGCが選択されている場合、Java Virtual Machine Tool Interface(JVMTI)で、 以下の権限を必要とする機能は使用できません。 ・ can_tag_objects ・ can_generate_object_free_events GC処理用スレッド数 CMS付きパラレルGCを使用した場合は、実行するハードウェアに搭載しているCPU数に依存した数のGC処理用スレッドがJavaプロ セス内に作成されます。そのため、GC処理用スレッドの数分だけ、スタック域などのスレッド用のメモリ領域が必要となります。 Javaプロセス内でのメモリ量を抑えるためなど、GC処理用スレッドの数を調整する場合には、図5のオプションでGC処理用スレッドの 数を指定することにより、GC処理用スレッドの数を調整することができます。 なおGC処理用スレッドの数を抑制した分だけGC処理における性能がおちる場合もありますので、このオプションを用いる場合には、 十分な性能確認を実施してください。また、一般的に、CPU数以上の数のGC処理用スレッドを作成しても、GC処理における性能向上 にはつながりません。 図5 CMS付きパラレルGCで使用するGC処理用スレッドの数を指定するオプション -XX:ParallelGCThreads=New世代領域GC用スレッドの数 New世代領域用GC処理を行なうGCスレッドの数を指定します。 最小値は「2」です。 「0」または「1」が指定された場合は、デフォルト値となります。 デフォルト値は以下のとおりです。 - 実行するハードウェアに搭載しているCPU数が1の場合 = 2 - 実行するハードウェアに搭載しているCPU数が2以上7以下の場合 = CPU数分 - 実行するハードウェアに搭載しているCPU数が8以上の場合 = 8 CMS-GC処理用スレッド数 CMS付きパラレルGCを使用した場合は、以下のCMS-GC処理用スレッドがJavaプロセス内に作成されます。そのため、CMS-GC処 理用スレッドの数分だけ、スタック域などのスレッド用のメモリ領域が必要となります。 ・ CMSスレッド (必ず1つ作成されます) ・ コンカレント・マーク処理専用スレッド (JDK/JRE 6の場合に作成できます) JDK/JRE 5.0の場合は、CMS-GC処理用スレッドとしてCMSスレッドだけが作成されます。 JDK/JRE 6の場合は、CMSスレッドの他、CMS-GC処理の中のコンカレント・マーク処理を複数スレッドで並列化して実行するために、 コンカレント・マーク処理専用スレッドを追加で作成することができます。 そのためJDK/JRE 6の場合は、図6のオプションでCMS-GC処理用スレッドの数を指定することにより、CMS-GC処理用スレッドの数を 調整することができます(JDK/JRE 5.0の場合は、図6のオプションを指定できません)。 なお一般的に、CPU数以上の数のCMS-GC処理用スレッドを作成しても、CMS-GC処理における性能向上にはつながりません。 図6 CMS付きパラレルGCで使用するCMS-GC処理用スレッドの数を指定するオプション 【JDK/JRE 6の場合】 -XX:ConcGCThreads=CMS-GC処理用スレッドの数 コンカレント・マーク処理専用スレッドの数を指定します。 最小値は「2」です. オプションの指定がない場合、または「1」が指定された場合は、CMSスレッドだけ生成されます。 「0」が指定された場合は、自動的に以下の値が設定されます。 (実行するハードウェアに搭載しているCPU数の1/4(端数切り上げ)をAとした場合) - Aが1の場合 = 0(CMSスレッドだけ生成されます) - 195 - - Aが2以上7以下の場合 = A - Aが8以上の場合 = 8 なお指定値および自動設定値いずれの場合も、「-XX:ParallelGCThreads」の値よりも大きい場合は、「XX:ParallelGCThreads」の値となります。 8.2.6 オブジェクト参照の圧縮機能 Javaアプリケーションを64ビットモードのJDK/JRE上で動作させる場合、通常のC/C++アプリケーションの場合と同様、実行モード上の 制約から、Javaヒープに格納されるオブジェクト参照(ポインタ情報)で必要となる領域は「64ビット表現/8バイト域」が管理単位となりま す。 そのため64ビットモードのJDK/JRE上でJavaアプリケーションを動作させる場合、32ビットモードのJDK/JRE上で動作させる場合に対 して、1.5~2倍のJavaヒープ量が必要となります。 しかし64ビットモードで実行されるJDK/JRE 6搭載のFJVMの場合は、Javaヒープの大きさ(メモリ割り当てプールとPermanent世代領域 の大きさの合計)が32GB未満の場合に限り、オブジェクト参照で必要となる領域を「32ビット表現/4バイト域」に圧縮して管理する機能 「64ビットモード実行時におけるオブジェクト参照圧縮機能」により、当該機能のない64ビットモードで実行されるJDK/JREよりも少ない Javaヒープ量でJavaアプリケーションが実行できます。 1オブジェクト参照当たりで必要となるJavaヒープの領域が減るため、たとえば極端な例ですが、従来はある大きさに100個のオブジェ クト参照を格納できていた場合、当該機能により200個のオブジェクト参照がJavaヒープ上に格納できるようになります。つまり当該機能 がないもしくは使用しない場合に必要となるJavaヒープ量を、当該機構を用いた場合に適用した場合、相対的により大きなJavaヒープ 値を指定したことと等価となります。その結果、ガーベジコレクション処理の発行回数が減り、アプリケーション実行性能の向上が期待 できます。 オブジェクト参照圧縮機能の無効化 本来「64ビット表現/8バイト域」が必要なメモリ域を「32ビット表現/4バイト域」に圧縮して管理するため、オブジェクト参照使用時には、 圧縮した情報を「64ビット表現/8バイト域」に展開する必要があります。その圧縮/展開処理は従来よりも余分なCPU消費に繋がるた め、Javaアプリケーションとしての実行性能が落ちる可能性が考えられます。 64ビットモードで実行されるJDK/JRE 6搭載のFJVMの場合は、デフォルト状態でオブジェクト参照圧縮機能が有効になっています。 そのため、Javaアプリケーションとしての実行性能が問題となった場合は、図1のオプションを指定することで、FJVMのオブジェクト参 照圧縮機能を無効にすることができます。 図1 64ビットモードで実行されるFJVMのオブジェクト参照圧縮機能を無効にするオプション -XX:-UseCompressedOops 注) 64ビットモードで実行されるJDK/JRE 6の場合に指定できます。 8.2.7 ガーベジコレクションのログ出力 ガーベジコレクション(GC)のログを採取する場合は、図1のオプションを指定します。本オプションの指定により、GCが発生するたび に、GC処理の結果ログが標準出力へ1行ずつ出力されます。 図1 GC処理の結果ログを出力するオプション -verbose:gc 出力フォーマットを図2、出力例を図3に示します。 図2 GCログの出力フォーマット [GCの種類 GC前のヒープ使用量->GC後のヒープの使用量(ヒープのサイズ), GCの処理時間] GCの種類が“GC”の場合はマイナーGC(またはNewGC処理)で、“FullGC”の場合はFullGCであることを示します。 なお“Javaヒープの中のメモリ割り当てプール”を“ヒープ”と略記しています。 CMS付きパラレルGCを使用している場合は、以下の出力フォーマットのGCログもあります。 - 196 - [GC ヒープ使用量(ヒープのサイズ), マーク処理時間] このフォーマットで出力された場合は、CMS-GC処理のinitialマーク処理またはfinalマーク処理が実行されたことを示します。 なお“Javaヒープの中のメモリ割り当てプール”を“ヒープ”と略記しています。 図3 GCログの出力例 [GC 80229K->31691K(259776K), 0.4795163 secs] [FullGC 57654K->4623K(259776K), 0.3844278 secs] なおFJVMでは、GC処理の結果ログ出力機能の強化を行っています。 より詳細なGC処理の結果ログ情報を得る場合には、当該機能を使用してください。詳細は、“8.2.7.1 ガーベジコレクション処理の結 果ログ出力機能の強化”を参照してください。 New世代領域の使われ方 FJGC以外のGC処理におけるNewGC処理では、New世代領域を「eden space」、「from space」および「to space」の3つの内部領域に 細分割し、当該領域上において、一般に世代別GC制御と言われる制御方法を用いて、Javaアプリケーションが生成要求したオブジェ クトを管理・制御しています。 このうち、「from space」および「to space」は、Java VMがNewGC処理を行う際の作業域的な役割を持つ領域となっています。そのた め、「from space」および「to space」の各領域が占める大きさのうち、Javaアプリケーションからのオブジェクト生成要求のために使用され る大きさは、その領域の一部分だけとなります。 そのため、FJGC以外のGC処理を使用している場合は、ガーベジコレクションのログ出力において、メモリ割り当てプールやNew世代 領域に空きがあるように見える場合であっても、実際には空きがない場合があります(空きがあるように見える場合であっても、その差 は、NewGC処理用の作業域的な役割で使用済となっている場合があります)。 ログ出力量の増加 本オプションの指定により、ログ出力が増大します。 本オプションを指定する場合は、ログ出力量についての注意が必要です。 クラスのアンロード情報 Javaアプリケーションがクラスのアンローディング処理を行なっていた場合には、FullGC処理中に該当するクラスのアンロード情報” [Unloading class アンロードされたクラス名]”が出力の途中に挿入される場合があります. ガーベジコレクション処理の結果ログに対するクラスのアンロード情報出力を抑止する場合は、図4のオプションを指定してください。 図4 GC処理の結果ログに対するクラスのアンロード情報出力を抑止するオプション -XX:-ClassUnloadingInfo GC処理結果ログの格納先ファイルの指定 図5のオプションを指定すると、GC処理の結果ログおよびクラスのインスタンス情報を、標準出力ではなく、指定したファイルへ出力先 を切り換えることができます。 なお、Interstage Application Server配下でJavaアプリケーションを実行する際に図5のオプションを指定した場合、以下の問題が発生 します。 ・ 図5のオプションによるファイル出力処理には、ログローテーションなどの世代管理機能はありません。何らかの理由でJavaプロセ スが自動的に再起動した場合、格納先として同じファイルが用いられることになるため、再起動後のGC処理の結果ログで再起動 前の結果ログが上書きされ、ログ情報として使えなくなります。 - 197 - ・ Javaアプリケーションを複数のプロセスで多重動作させる場合、同一のオプション定義で複数のプロセスが動作します。そのため、 複数のプロセスから同じファイルに対してGC処理の結果ログを書き込むことになり、ログ情報として使えなくなります。 ・ Interstage Application Server配下でJavaアプリケーションを実行する際のログの出力先は、Interstage Application Serverとしての制 御により、出力先ファイルが管理されています。図5のオプション指定でGC処理の結果ログが別のファイルとなった場合、エラー発 生時に、他のエラー情報とGC処理の結果ログが分離することになるため、エラーの解析が難しくなる場合があります。 そのため、Interstage Application Server配下でJavaアプリケーションを実行する場合には、図5のオプションを指定しないでください。 図5のオプションは、Interstage Application Serverとは関係しない単独のJavaアプリケーションを実行する場合に、必要に応じて指定 してください。 図5 GC処理の結果ログの格納先ファイルを指定するオプション -Xloggc:GC処理の結果ログの格納先ファイル名 注1) このオプションを指定すると、自動的に“-verbose:gc”オプションも指定したと見做されます。そのため、“-verbose:gc”オプションの 指定がない場合でも、GC処理の結果ログが出力され、また、ガーベジコレクション処理の結果ログ出力機能の強化を使用することもで きます。 なお、“-Xloggc”オプション指定により出力されたGC処理の結果ログの先頭には、「Java VMが起動されてからの経過時間(秒)」が「GC 処理の実行開始時間」として自動的に付加されます(以下の形式で出力されます)。 GC処理の実行開始時間: GC処理の結果ログ(図2の出力フォーマットと同じ) 「GC処理の実行開始時間」のフォーマットは変更できません。 (ガーベジコレクション処理の結果ログ出力機能の強化も使用して出力されたGC処理の結果ログの場合は、「GC処理の実行開始時 間」のフォーマットを、ログ出力における「8.5.7 ログ出力における時間情報のフォーマット指定機能」により指定できます。) 注2) 格納先ファイル名の指定には、絶対パスや相対パスのディレクトリ名を付加した形式も可能です。 注3) 格納先ファイル名の中にあるディレクトリが存在しないなど、何らかの理由で指定された格納先ファイルにアクセスできなかった場 合、GC処理の結果ログは、指定された格納先ファイルではなく、従来通り、標準出力へ出力されます。 8.2.7.1 ガーベジコレクション処理の結果ログ出力機能の強化 FJVMでは、“-verbose:gc”オプション指定時に出力されるガーベジコレクション(GC)処理の結果ログを、より詳細に出力する「ガーベ ジコレクション処理の結果ログ出力機能の強化」を行っています。 “-verbose:gc”オプションを指定してGC処理の結果ログを出力する際、図1のオプションを追加指定することにより、GC処理の結果ロ グとして出力される情報が、図2から図5に示す形式に拡張されます。また、図6から図8に出力例を示します。 図1 GC処理の結果ログとして出力される情報を拡張するオプション -XX:+UseFJverbose 図2 GC処理の結果ログとして出力される情報の拡張形式 $1: [$2, [$3 : $4->$5($6)], [$7 : $8->$9($10)] $11->$12($13), [$14 : $15->$16($17)], $18 secs] 図2の各要素について、以下で説明します。 $1: GC処理の実行開始時間(ログ出力時の時間) GC処理の実行開始時間(ログ出力時の時間)を示します。 ログ出力時の時間のフォーマットは、ログ出力における「8.5.7 ログ出力における時間情報のフォーマット指定機能」により指定できます。 デフォルトは、「Java VMが起動されてからの経過時間(秒)」です。 $2: GC種別 実行したGC処理の種別を以下の名称で示します。 ・ GC New世代領域を対象とするGC処理(NewGC処理またはマイナーGC処理)における結果情報です。 - 198 - ・ Full GC Javaヒープ域全体(メモリ割り当てプール(New世代領域、Old世代領域)およびPermanent世代領域)を対象とするGC処理(FullGC 処理)における結果情報です。 ・ Full GC* 使用されているGC処理がシリアルGC、FJGCまたはCMS付きパラレルGCの場合で、かつ、直前に実行されたNewGC処理では十 分な空き領域が確保できず、そのNewGC処理に続けて実行されたFullGC処理における結果情報です("Full GC"の後に"*"の付 く表示になります)。 なおこの名称は“-verbose:gc”オプションだけを指定した場合には出力されません(単に"Full GC"として出力されます)。 ・ CMS initial-mark Old世代領域を対象とするCMS-GC処理のうち、initialマーク処理における結果情報です。 CMS-GCでは、不要オブジェクトを検出するために行なう処理(initialマーク処理)を実行する際、極わずかな時間だけJavaアプリ ケーションを停止させます。 注)不要オブジェクトの検出処理だけであるため、GC処理開始前後での各世代領域におけるオブジェクト量に変化はありません。 ・ CMS remark Old世代領域を対象とするCMS-GC処理のうち、finalマーク処理における結果情報です。 CMS-GCでは、不要オブジェクトを検出するために行なう処理(finalマーク処理)を実行する際、極わずかな時間だけJavaアプリケー ションを停止させます。 注)不要オブジェクトの検出処理だけであるため、GC処理開始前後での各世代領域におけるオブジェクト量に変化はありません。 $3: New世代領域の識別名 New世代領域の識別名を示します。 使用されているGC処理の違いにより、以下の識別名が出力されます。 ・ DefNew: シリアルGCの場合 ・ SplitEden: FJGCの場合 ・ PSYoungGen: パラレルGCの場合 ・ ParNew: CMS付きパラレルGCの場合 $4: GC処理前のオブジェクト量(New世代領域) GC処理実行前のNew世代領域に存在したオブジェクトの総量(バイト)です。 $5: GC処理後のオブジェクト量(New世代領域) GC処理実行後のNew世代領域に存在するオブジェクトの総量(バイト)です。 $6: New世代領域の大きさ New世代領域の大きさ(バイト)です。 注)使用されているGC処理がシリアルGC、パラレルGCまたはCMS付きパラレルGCの場合は、この大きさに「to space」領域の大きさが 含まれません。 (シリアルGC、パラレルGCまたはCMS付きパラレルGCの場合、GC処理はNew世代領域を「eden space」、「from space」および「to space」の3つの内部領域に細分割して制御しています。) $7: Old世代領域の識別名 Old世代領域の識別名を示します。 使用されているGC処理の違いにより、以下の識別名が出力されます。 ・ Tenured: シリアルGCの場合 ・ Tenured: FJGCの場合 ・ PSOldGen: パラレルGCの場合 ・ CMS: CMS付きパラレルGCの場合 $8: GC処理前のオブジェクト量(Old世代領域) GC処理実行前のOld世代領域に存在したオブジェクトの総量(バイト)です。 $9: GC処理後のオブジェクト量(Old世代領域) - 199 - GC処理実行後のOld世代領域に存在するオブジェクトの総量(バイト)です。 $10: Old世代領域の大きさ Old世代領域の大きさ(バイト)です。 $11: GC処理前のオブジェクト量(メモリ割り当てプール) GC処理実行前のメモリ割り当てプールに存在したオブジェクトの総量(バイト)です。 $4+$8の値です。 $12: GC処理後のオブジェクト量(メモリ割り当てプール) GC処理実行後のメモリ割り当てプールに存在するオブジェクトの総量(バイト)です。 $5+$9の値です。 $13: メモリ割り当てプールの大きさ メモリ割り当てプールの大きさ(バイト)です。 $6+$10の値です。 注)使用されているGC処理がシリアルGC、パラレルGCまたはCMS付きパラレルGCの場合は、この大きさにNew世代領域の「to space」 領域の大きさが含まれません。 (シリアルGC、パラレルGCまたはCMS付きパラレルGCの場合、GC処理はNew世代領域を「eden space」、「from space」および「to space」の3つの内部領域に細分割して制御しています。) $14: Permanent世代領域の識別名 Permanent世代領域の識別名です。 使用されているGC処理の違いにより、以下の識別名が出力されます。 ・ Perm: シリアルGCの場合 ・ Perm: FJGCの場合 ・ PSPermGen: パラレルGCの場合 ・ CMS Perm: CMS付きパラレルGCの場合 $15: GC処理前のオブジェクト量(Permanent世代領域) GC処理実行前のPermanent世代領域に存在したオブジェクトの総量(バイト)です。 $16: GC処理後のオブジェクト量(Permanent世代領域) GC処理実行後のPermanent世代領域に存在するオブジェクトの総量(バイト)です。 $17: Permanent世代領域の大きさ Permanent世代領域の大きさ(バイト)です。 $18: GC処理実行時間 GC処理実行に要した時間(秒)です。 注)GC処理は、Javaアプリケーションとしての動作を停止させて実行されます。 $2、$11、$12、$13、および$18に対する出力情報は、GC処理の結果ログ出力機能として“-verbose:gc”オプションだけを指定した際 に出力される情報と対応します。 図3 GC処理の結果ログとして出力される情報の拡張形式(CMS-GCの開始) $1: CMS start 図3の各要素について、以下で説明します。 $1: CMS-GC処理の実行開始時間(ログ出力時の時間) - 200 - CMS-GC処理の実行開始時間(ログ出力時の時間)を示します。 ログ出力時の時間のフォーマットは、ログ出力における「8.5.7 ログ出力における時間情報のフォーマット指定機能」により指定できます。 デフォルトは、「Java VMが起動されてからの経過時間(秒)」です。 図4 GC処理の結果ログとして出力される情報の拡張形式(FullGC発生によるCMS-GCの終了要求) $1: CMS stop-req 図4の各要素について、以下で説明します。 $1: CMS-GC処理の終了要求時点(ログ出力時の時間) Full GC要求発生時にCMS-GC処理が実行中であった場合、CMS-GC処理の終了要求時点(ログ出力時の時間)を示します。 ログ出力時の時間のフォーマットは、ログ出力における「8.5.7 ログ出力における時間情報のフォーマット指定機能」により指定できます。 デフォルトは、「Java VMが起動されてからの経過時間(秒)」です。 注)CMS-GC処理が動作している最中にJavaヒープ不足やjava.lang.System.gc()実行などによりFull GC要求が発生した場合、Full GC処理は、実行中のCMS-GC処理の終了を待ってから開始されます。その際、CMS-GCが処理しているデータの整合性を維持させ るため、CMS-GC処理の終了は強制的な打ち切り終了ではなく、CMS-GC内で打ち切り可能な処理まで完了させてからの終了になり ます。そのため、CMS-GC処理が実行中であった場合、Full GC処理要求の発生から実際にFull GC処理が開始されるまでに、ある程 度の時間差が生じる可能性があります。 なおCMS-GC処理の終了要求時点からCMS-GC処理の実行が終了するまで、Javaアプリケーションとしての動作は停止します。その ため、CMS-GC処理の終了要求時点からFull GC処理の実行完了までが、この出力があった場合のFull GC処理によるJavaアプリケー ション動作の実際の停止期間となります。 図5 GC処理の結果ログとして出力される情報の拡張形式(CMS-GCの終了) パターン1: CMS-GCの対象が「Old世代領域内」の場合 $1: CMS stop($2), [CMS : $3->$4($5)], $9 secs CMS-GCの対象が「Old世代領域内およびPermanent世代領域内」の場合 $1: CMS stop($2), [CMS : $3->$4($5)], [CMS Perm : $6->$7($8)], $9 secs パターン2: $1: CMS stop($2), $9 secs 図5の各要素について、以下で説明します。 $1: CMS-GC処理の実行終了時間(ログ出力時の時間) CMS-GC処理の実行終了時間(ログ出力時の時間)を示します。 ログ出力時の時間のフォーマットは、ログ出力における「8.5.7 ログ出力における時間情報のフォーマット指定機能」により指定できます。 デフォルトは、「Java VMが起動されてからの経過時間(秒)」です。 $2: 終了コード CMS-GC処理の実行結果に対する終了コードを示します。 終了コードの違いにより、情報の出力形式パターンが異なります。 終了コードの種類および意味は以下のとおりです。 ・ 00: CMS-GC処理が終了しました。 Old世代領域内またはOld世代領域内およびPermanent世代領域内で検出済の不要オブジェクトは回収しました。 パターン1の出力形式で情報が出力されます。 ・ 10: Javaヒープ不足によるFull GC要求があったため、実行中のCMS-GC処理を終了しました。 Old世代領域内またはOld世代領域内およびPermanent世代領域内で検出済の不要オブジェクトは回収しました。 パターン1の出力形式で情報が出力されます。 - 201 - ・ 20: java.lang.System.gc()などの外部要因によるFull GC要求があったため、実行中のCMS-GC処理を終了しました。 Old世代領域内またはOld世代領域内およびPermanent世代領域内で検出済の不要オブジェクトは回収しました。 パターン1の出力形式で情報が出力されます。 ・ 11: Javaヒープ不足によるFull GC要求があったため、実行中のCMS-GC処理を終了しました。 Old世代領域内またはOld世代領域内およびPermanent世代領域内の不要オブジェクトは回収していません。 パターン2の出力形式で情報が出力されます。 ・ 21: java.lang.System.gc()などの外部要因によるFull GC要求があったため、実行中のCMS-GC処理を終了しました。 Old世代領域内またはOld世代領域内およびPermanent世代領域内の不要オブジェクトを回収していません。 パターン2の出力形式で情報が出力されます。 $3: CMS-GC処理前のオブジェクト量(Old世代領域) CMS-GC処理実行前のOld世代領域に存在したオブジェクトの総量(バイト)です。 通常はCMS-GC処理のfinalマーク処理実行時のOld世代領域に存在したオブジェクトの総量と等しくなります。 finalマーク処理実行時のOld世代領域に存在したオブジェクトの総量と等しくない場合は、CMS-GCによる不要オブジェクトの回収処 理前にNew世代領域用GCが実行された、またはJavaアプリケーションの実行によりOld世代領域にオブジェクトが割り当てられたことを 示します。 $4: CMS-GC処理後のオブジェクト量(Old世代領域) CMS-GC処理実行後のOld世代領域に存在するオブジェクトの総量(バイト)です。 $5: Old世代領域の大きさ Old世代領域の大きさ(バイト)です。 $6: CMS-GC処理前のオブジェクト量(Permanent世代領域) CMS-GC処理実行前のPermanent世代領域に存在したオブジェクトの総量(バイト)です。 通常はfinalマーク実行時のPermanent世代領域に存在したオブジェクトの総量と等しくなります。 finalマーク処理実行時のPermanent世代領域に存在したオブジェクトの総量と等しくない場合は、CMS-GCによる不要オブジェクトの 回収処理前に、Javaアプリケーションの実行によりPermanent世代領域にオブジェクトが割り当てられたことを示します。 $7: CMS-GC処理後のオブジェクト量(Permanent世代領域) CMS-GC処理実行後のPermanent世代領域に存在するオブジェクトの総量(バイト)です。 $8: Permanent世代領域の大きさ Permanent世代領域の大きさ(バイト)です。 $9: CMS-GC処理実行時間 CMS-GC処理実行に要した時間(秒)です(CMS-GC開始からの経過時間です)。 有効なGC処理 このオプション指定により出力形式が拡張されるのは、使用するGC処理が以下の場合です。 ・ シリアルGC(JDK/JRE 5.0、6) ・ FJGC(JDK/JRE 5.0) ・ パラレルGC (JDK/JRE 5.0、6) ・ CMS付きパラレルGC (JDK/JRE 5.0、6) ログ出力量の増加 本オプションの指定により、ログ出力が増大します。 本オプションを指定する場合は、ログ出力量についての注意が必要です。 - 202 - ■ ログの見方 図6から図8に、GC処理の結果ログとして出力される情報の拡張形式の出力例を示します。 図6 GC処理の結果ログとして出力される情報の拡張形式の出力例 1.495: [Full GC*, [SplitEden : 384K->0K(704K)], [Tenured : 47835K->32752K(47872K)] 48219K->32752K(48576K), [Perm : 4081K->4081K(16384K)], 0.6623532 secs] この出力情報から、以下のことが分かります。 ・ Java VMが起動されてから1.495秒後にFullGC処理が実行された。 ・ 使用されているGC処理はFJGCである。 ・ GC処理後のNew世代領域の大きさは704KBである。 ・ GC処理により、New世代領域に存在するオブジェクト量は384KBから0KBになった。 (不要オブジェクトが削除され、また必要に応じてOld世代領域へ生存オブジェクトが移動した) ・ GC処理後のOld世代領域の大きさは47872KBである。 ・ GC処理により、Old世代領域に存在するオブジェクト量は47835KBから32752KBになった。 (不要オブジェクトが削除され、また必要に応じてNew世代領域から生存オブジェクトが移動してきた) ・ GC処理後のメモリ割り当てプールの大きさは48576KBである。 ・ GC処理により、メモリ割り当てプールに存在するオブジェクト総量は48219KBから32752KBになった。 (不要オブジェクトが削除された) ・ GC処理後のPermanent世代領域の大きさは16384KBである。 ・ GC処理により、Permanent世代領域に存在するオブジェクト量は変化していない。 ・ GC処理に要した時間は0.6623532秒である。 図7 GC処理の結果ログとして出力される情報の拡張形式の出力例(CMS付きパラレルGCの場合-1) 150.207: CMS start 150.208: [CMS initial-mark, [ParNew : 1863K->1863K(14784K)], [CMS : 53791K->53791K(65536K)] 55654K>55654K(80320K), [CMS Perm : 4664K->4664K(16384K)], 0.0030212 secs] 150.351: [GC, [ParNew : 14782K->1598K(14784K)], [CMS : 53791K->57981K(65536K)] 68573K->59579K(80320K), [CMS Perm : 4664K->4664K(16384K)], 0.0328537 secs] 150.466: [CMS remark, [ParNew : 8277K->8277K(14784K)], [CMS : 57981K->57981K(65536K)] 66258K->66258K(80320K), [CMS Perm : 4664K->4664K(16384K)], 0.0097905 secs] 150.549: [GC, [ParNew : 14782K->1598K(14784K)], [CMS : 50163K->54371K(65536K)] 64946K->55969K(80320K), [CMS Perm : 4664K->4664K(16384K)], 0.0303271 secs] 150.583: CMS stop(00), [CMS : 57981K->54200K(65536K)], 0.3753996 secs この出力情報から、以下のことが分かります。 ・ 使用されているGC処理はCMS付きパラレルGC(CMS-GCの対象はOld世代領域)である。 ・ Java VMが起動されてから150.207秒後にCMS-GC処理が開始され、150.583秒後に終了した。 ・ 終了したCMS-GCにより不要オブジェクトが回収された。 ・ CMS-GC処理後のOld世代領域の大きさは65536KBである。 ・ CMS-GC処理により、Old世代領域に存在するオブジェクト量は57981KBから54200KBになった。 ・ CMS-GC処理に要した時間は0.3753996秒である。 ・ CMS-GC処理中にNew世代領域用GC処理が実行された。またその実行開始は、遅延している可能性がある。 図8 GC処理の結果ログとして出力される情報の拡張形式の出力例(CMS付きパラレルGCの場合-2) - 203 - 137.803: CMS start 137.804: [CMS initial-mark, [ParNew : 206690K->206690K(314560K)], [CMS : 655731K->655731K(699072K)] 862421K>862421K(1013632K), [CMS Perm : 3892K->3892K(16384K)], 0.4101250 secs] 139.069: [GC, [ParNew : 279616K->34943K(314560K)], [CMS : 655731K->673280K(699072K)] 935347K>708223K(1013632K), [CMS Perm : 3892K->3892K(16384K)], 0.2177910 secs] 142.140: CMS stop-req 142.501: CMS stop(11), 4.6984060 secs 142.501: [Full GC, [ParNew : 314559K->0K(314560K)], [CMS : 673280K->657037K(699072K)] 987839K>657037K(1013632K), [CMS Perm : 3892K->3892K(16384K)], 1.8642510 secs] この出力情報から、以下のことが分かります。 ・ 使用されているGC処理はCMS付きパラレルGC(CMS-GCの対象はOld世代領域)である。 ・ Java VMが起動されてから137.803秒後にCMS-GC処理が開始され、142.501秒後に終了した。 ・ Java VMが起動されてから142.140秒後にFullGC要求があり、そのため実行中のCMS-GCが終了した。 ・ 終了したCMS-GCによる不要オブジェクト回収は実行されていない。 ・ CMS-GC処理の終了要求時点(142.140)からCMS-GC処理の実行が終了(142.501)するまでの0.361秒、および142.501に実行開 始したFullGCの実行時間1.8642510秒の合計2.225251秒の間、Javaアプリケーション動作が停止された。 8.3 動的コンパイル 本節では、動的コンパイルについて説明します。 C/C++やCOBOLなどで作られたプログラムを実行する場合は、各言語に対応したコンパイラによって、プログラムのソースコードを実 行対象プラットフォーム上で動作可能な機械命令へ翻訳(後述の動的コンパイルとの対比で静的コンパイルと呼ばれることがあります) し、事前にプラットフォーム依存の実行バイナリを作成する必要があります。 Javaで作られたプログラムを実行する場合は、javacコマンドによって、プログラムのソースコードをJava VMが解釈/実行できる命令 「バイトコード」へ変換し、事前にプラットフォーム非依存の実行バイナリである「クラスファイル」を作成する必要があります。 Javaの実行環境であるJava VMが起動された後、Java VMは、実行対象プログラムであるクラスファイルを読み込み、クラスファイルを 以下の2つの方法を用いて実行します。 ・ インタプリタによるバイトコードの実行 Java VMのインタプリタは、クラスファイル内のバイトコードを1命令ずつ解釈して実行します。 機械命令の実行に比べ、実行性能が低速になります。 ・ 動的コンパイルにより、バイトコードを機械命令に翻訳してから実行 Javaアプリケーションの実行中、Java VMは、クラスファイル内のJavaメソッドに対応するバイトコードを、実行対象プラットフォーム 上で動作可能な機械命令へ自動的に翻訳してから実行します。Javaアプリケーション実行中に自動的に行われる翻訳処理である ため、その翻訳処理を動的コンパイルと呼びます。 インタプリタによるバイトコードの実行に比べ、高速に実行できます。 なお、動的コンパイル処理は、翻訳時における機械命令の最適化処理で必要となる各Javaメソッドの実行頻度や呼び出し関係な どの情報を、Javaアプリケーション実行と同時に行われる各Javaメソッドに関するプロファイリング処理の結果から得ます。そのた め、プロファイリング処理によりある程度の情報量が得られるまで何度か再翻訳が繰り返され、次第にJavaアプリケーションの実行 状況に合った翻訳結果に最適化されることで、機械命令部分の実行性能が向上する傾向があります。 Java VMが行う動的コンパイル自体は、Javaアプリケーションの実行から見ると、オーバーヘッド部分になります。そのため、インタプリ タによる実行性能(低速)、動的コンパイルによるオーバーヘッド、および動的コンパイル結果である機械命令による実行性能(高速)の 三者をバランス良く調整することで、Javaアプリケーション全体としての実行性能を良くする必要があります。 Java VMは、実行頻度の高いJavaメソッドを優先的にコンパイルし、あまり使われることのないJavaメソッドはインタプリタ実行のままに することで、インタプリタ実行、動的コンパイル、および動的コンパイル結果である機械命令実行のバランスを取り、Javaアプリケーショ ン全体としての実行性能を良くする調整を行っています。 なお、実行対象となるJavaアプリケーション内で、各Javaメソッドの実行頻度がどの位になるのかについては、実際にJavaアプリケー ションが実行されない限り分かりません。そのため、Java VMはJavaアプリケーション実行と同時に各Javaメソッドに関するプロファイリン グ処理を行い、その結果を用いて動的コンパイルの対象となるJavaメソッドを決定しています。プロファイリング処理によりある程度の情 - 204 - 報量が得られるまで、すなわちJava VM起動直後はインタプリタ実行だけですが、次第にインタプリタ実行と動的コンパイル結果による 機械命令実行との混合動作になります。 FJVMでは、動的コンパイルに関する以下の機能を富士通版独自機能として実装しています。 なお、いずれの機能もFJVM固有機能です。 ・ コンパイラ異常発生時の自動リカバリ機能 ・ 長時間コンパイル処理の検出機能 ・ 動的コンパイル発生状況のログ出力機能 8.3.1 コンパイラ異常発生時の自動リカバリ機能 Java VMはJavaアプリケーションとして実行されるJavaメソッドに対して必要に応じて自動的にコンパイル処理を行いますが、コンパイ ル処理を行っている際にコンパイラ内で何らかの異常が発生すると、当該Javaメソッドに対するコンパイル処理だけでなくJava VMとし ての動作も異常状態として停止させてしまう場合があります。 FJVMでは、コンパイラ内で何らかの異常が発生した場合に自動的にリカバリ処理を行い、Java VMとしての動作を継続させる機能 を「コンパイラ異常発生時の自動リカバリ機能」として実装しています。 コンパイラ異常発生時の自動リカバリ機能はFJVM固有機能です。 なお、本機能によるリカバリ処理が行なわれた際にコンパイル対象となっていたJavaメソッドは、以降、コンパイル処理の対象とはなり ません。当該Javaメソッドについてはコンパイルされず、インタプリタモードのままJavaアプリケーションとしての実行が継続されます。 また、本機能はFJVMの内部処理として動作する機能であるため、コンパイラ内で何らかの異常が発生してもリカバリ処理が正常に 行われた場合には、外部に対する通知などは何も行いません。リカバリ処理が正常に行われた場合でもコンパイラ内で何らかの異常 が発生したことを情報として受け取る場合には、図1のオプションを指定してください。 図1のオプションを指定した場合、リカバリ処理の情報が図2の形式で標準出力に出力されます。 図1 リカバリ処理実施後に通知を受け取るオプション -XX:+PrintCompilerRecoveryMessage 図2 リカバリ処理実施後に通知される情報 【JDK/JRE 5.0または6場合】 CompilerRecovery: Information:The compilation was canceled for method method_name Reason for the cancellation: reason [code:c, addr:xxxxxxxx] method_name: コンパイル処理で異常が発生した際にコンパイル対象となっていたJavaメソッドの 名前。 reason: コンパイル処理で発生した異常の原因情報。原因情報として以下の項目がありま す。 ・ assert: コンパイル処理で内部処理矛盾を検出した ・ error: コンパイル処理で何らかの誤りを検出した ・ stack overflow: コンパイル処理でスタックオーバーフローを検出した c: 異常コード。 - 205 - xxxxxxxx: コンパイル処理で異常が発生した際のアドレス。 8.3.2 長時間コンパイル処理の検出機能 Java VMはJavaアプリケーションとして実行されるJavaメソッドに対して必要に応じて自動的にコンパイル処理を行い、通常は極短時 間でその処理を完了します。 しかし、コンパイル処理自身や同じJavaプロセス内で動作させている他の処理の障害などによりCPU資源が占有され続けてしまうと、 数分を経過してもコンパイル処理が終了しない場合が考えられます。このような状態が継続すると、システム全体に対して悪影響を与 える可能性が考えられます。 このため、FJVMでは、各Javaメソッドのコンパイル処理に要している時間を監視し、コンパイル処理で必要と考えられる程度の時間 を経過してもコンパイル処理が終了していない場合には、Javaプロセス内の処理で何らかの問題が発生していると判断し、当該Javaプ ロセスを強制的に終了させる機能を「長時間コンパイル処理の検出機能」として実装しています。 コンパイラ異常発生時の自動リカバリ機能はFJVM固有機能です。 本機能は、図1のオプションでコンパイル処理に対する監視時間(コンパイル処理に要する時間の上限値)を指定した場合に有効とな ります。ただし、オプション値として「0」を指定した場合には、本機能は有効となりません。 図1のオプションで指定された時間を超過してもコンパイル処理が終了していない場合、本機能はJavaプロセス内の処理で何からの 問題が発生していると判断し、当該Javaプロセスを強制的に終了させます。 図1 長時間コンパイル処理の検出機能を有効にするオプション -XX:CompileTimeout=<nn> <nn>には、本機能による異常有無の判断条件とされるコンパイル処理に要する時間の上限値(単位:秒)を指定します。デフォルト値 は「0」であり、本機能は無効となっています。 なお、本機能による時間監視の最小単位は30秒であるため、その単位での時間誤差があります。 なお、本機能によってJavaプロセスを強制終了する場合、FJVMは図2のメッセージを標準出力に出力してから終了します。また、本 機能によるJavaプロセスの強制終了時にはコアダンプも出力されます。 図2 長時間コンパイル処理の検出機能によるJavaプロセス強制終了時の出力メッセージ CompilerRecovery: Information: CompilerRecovery got the VM aborted because the compiler thread(nnnnnnnn) has not completed. (compiling method: method_name) nnnnnnnn: コンパイラスレッドの内部識別子 method_name: 本機能によるチェックでJavaプロセス内に異常が検出された際にコンパイル対象となっていたJavaメソッドの名前 長時間コンパイル処理の検出機能に対する注意事項 何らかの要因によりJavaプロセス内のコンパイル処理へCPU資源が十分に割り当てられず、コンパイル処理自体が進んでいない場合 でも、コンパイル処理開始から-XX:CompileTimeoutオプションで指定された監視時間を超過した場合には、本機能による当該Javaプ ロセスの強制終了となります。 このため、当該Javaプロセスを実行するシステムのCPU負荷が高い場合には、コンパイル処理に対してCPU資源が十分に割り当てら れず、この結果として本機能による強制終了が発生する可能性が考えられます。 本機能による強制終了が発生した場合には、まず以下の事項を確認してください。 ・ 当該Javaプロセスを実行しているシステムのCPU資源量は十分か。 ・ 当該Javaプロセス以外の他のプロセスでCPU資源が占有されていないか。 - 206 - ・ “-XX:CompileTimeout=0”を指定した場合に本機能による強制終了が回避され、かつ、当該Javaプロセスが正常に終了する、また は未負荷時に正常なアイドル状態に遷移するか。 上記事項に合致する場合は、コンパイル処理に対してCPU資源が十分に割り当てられなかった結果として発生した強制終了と 考えられます。 長時間コンパイル処理の検出機能を有効にしてこの状態が発生した場合には、“-XX:CompileTimeout”オプションで指定する監 視時間として、より大きな値に設定する形で調整してください。 長時間コンパイル処理の検出機能に対する監視メッセージの出力 図3のオプションを指定した場合、Javaメソッドのコンパイル処理において1分が経過すると、図4の形式で監視メッセージが出力されます。 その後は、30秒経過するごとに同じ監視メッセージが出力されます。 なお、本機能による時間監視の最小単位は30秒であるため、その単位での時間誤差があります。 図3 長時間コンパイル処理の検出機能の監視メッセージ出力を有効にするオプション -XX:+PrintCompilerRecoveryMessage 図4 長時間コンパイル処理の検出機能が出力する監視メッセージ CompilerRecovery: Information: The compiler thread(0xnnnnnnnn) might not return from compiling method method_name. nnnnnnnn: コンパイラスレッドの内部識別子 method_name: 本機能によるチェックで検出された際にコンパイル対象となっていたJavaメソッドの名前 8.3.3 動的コンパイル発生状況のログ出力機能 Java VMは、Javaアプリケーションとして実行されるJavaメソッドに対して、必要に応じて自動的にコンパイル処理を行います(動的コン パイル)。 FJVMでは、動的コンパイルの発生状況を出力する機能を「動的コンパイル発生状況のログ出力機能」として実装しています。 動的コンパイル発生状況のログ出力機能では、以下の情報を出力します。 ・ コンパイラスレッドのCPU使用状況 コンパイラスレッド(動的コンパイルを行っているスレッド)が20個のJavaメソッドをコンパイルするごとに、コンパイルを行うのに使用し たCPU時間と経過時間を出力します。 経過時間に対してCPU時間の割合が高い場合には、Javaアプリケーションの実行性能に動的コンパイルが影響を与えている可能 性があります。 ・ 動的コンパイル結果情報 どのJavaメソッドが、いつコンパイルされたかの情報を出力します。 Javaメソッドのコンパイルが、短い間に連続して発生している場合、Javaアプリケーションの実行性能に動的コンパイルが影響を与 えている可能性があります。 コンパイラスレッドのCPU使用状況を出力する場合は、図1のオプションを指定します。 コンパイラスレッドのCPU使用状況および動的コンパイル結果情報を出力する場合は、図2のオプションを指定します。 図1および図2のオプションの指定により、動的コンパイルが発生するたびに、その発生状況ログが標準出力へ、図3および図4に示 す形式で出力されます。 また、図5および図6に出力例を示します。 動的コンパイル発生状況のログ出力機能はFJVM固有機能です。 図1 コンパイラスレッドのCPU使用状況を出力するオプション - 207 - -XX:+PrintCompilationCPUTime 図2 コンパイラスレッドのCPU使用状況および動的コンパイル結果情報を出力するオプション -XX:+FJPrintCompilation 図3 コンパイラスレッドのCPU使用状況の出力形式 $1: [$2: cpu=$3ms elapsed=$4ms $5] 図3の各要素について、以下で説明します。 $1: ログ出力時の時間 ログ出力時の時間を示します。 ログ出力時の時間のフォーマットは、ログ出力における「8.5.7 ログ出力における時間情報のフォーマット指定機能」により指定できます。 デフォルトは、「Java VMが起動されてからの経過時間(秒)」です。 $2: コンパイラスレッド名 情報の出力対象となるコンパイラスレッドの名前を「CompilerThread数字」の形式で示します。 $3: CPU時間 $2のコンパイラスレッドが、20個のJavaメソッドのコンパイルを行うのに使用したCPU時間(ミリ秒)を示します。 $4: 経過時間 $2のコンパイラスレッドが、20個のJavaメソッドのコンパイルを行うまでに経過した時間(ミリ秒)を示します。 $5: 通し番号 コンパイラスレッドごとの本情報の出力数を、通し番号で示します。 通し番号×20」の値が、そのコンパイラスレッドでコンパイルしたJavaメソッドの累計数になります。 図4 動的コンパイル結果情報の出力形式 $1: $2 $3 ($4 bytes) 図4の各要素について、以下で説明します。 $1: Javaメソッドのコンパイル要求発生時間(ログ出力時の時間) Javaメソッドのコンパイル要求が発生した時間(ログ出力時の時間)を示します。 ログ出力時の時間のフォーマットは、ログ出力における「8.5.7 ログ出力における時間情報のフォーマット指定機能」により指定できます。 デフォルトは、「Java VMが起動されてからの経過時間(秒)」です。 $2: 通し番号 コンパイル要求の数(コンパイル要求が発生したJavaメソッドの数)を通し番号で示します。 通し番号の後ろに「%」がない場合は、コンパイル対象のJavaメソッド全体をコンパイルする要求です。 通し番号の後ろに「%」がある場合は、コンパイル対象のJavaメソッドを部分的にコンパイルする要求です。 通し番号の後ろに「%」がない場合とある場合は、別の通し番号になります。 $3: Javaメソッド名 コンパイル要求が発生したJavaメソッドの名前を示します。 Javaメソッドを部分的にコンパイルする要求の場合($2に「%」の表示が含まれる場合)、Javaメソッド名の後に、Javaメソッド(バイトコード) のどの部分からコンパイルの対象になっているかを示す情報「(@ 数字)」が付加されます。 $4: Javaメソッドのバイト数 コンパイル対象となったJavaメソッドの大きさ(バイトコード・サイズ)をバイト数で示します。 図5 -XX:+PrintCompilationCPUTime指定時の出力例 - 208 - 0.586: [CompilerThread1: cpu=78.13ms elapsed=450.72ms 1] 0.822: [CompilerThread0: cpu=437.50ms elapsed=686.32ms 1] 1.312: [CompilerThread0: cpu=218.75ms elapsed=489.93ms 2] 1.637: [CompilerThread1: cpu=546.88ms elapsed=1050.52ms 2] 2.385: [CompilerThread0: cpu=296.88ms elapsed=1073.57ms 3] 3.365: [CompilerThread0: cpu=140.63ms elapsed=979.67ms 4] 3.557: [CompilerThread1: cpu=343.75ms elapsed=1919.97ms 3] 4.096: [CompilerThread1: cpu=390.63ms elapsed=539.47ms 4] 4.995: [CompilerThread1: cpu=140.63ms elapsed=898.45ms 5] 図6 -XX:+FJPrintCompilation指定時の出力例 0.074: 1 java.util.Properties$LineReader::readLine (383 bytes) 0.102: 2 java.io.Win32FileSystem::normalize (143 bytes) 0.107: 3 java.lang.String::hashCode (60 bytes) 0.179: 4 sun.security.provider.SHA::implCompress (494 bytes) 0.206: 5 sun.reflect.UTF8::utf8Length (81 bytes) 0.229: 6 java.util.jar.Manifest$FastInputStream::readLine (167 bytes) 0.232: 7 sun.nio.cs.UTF_8$Decoder::decodeArrayLoop (1814 bytes) 0.244: 1% sun.text.NormalizerDataReader::read @ 38 (139 bytes) 0.261: 8 java.math.BigInteger::mulAdd (82 bytes) (中略) 0.742: [CompilerThread1: cpu=406.25ms elapsed=677.52ms 1] 0.744: 40 java.lang.String::replace (142 bytes) 8.4 チューニング方法 チューニングのポイントとして、次があります。 ・ メモリ消費量と処理速度は深い関係にあり、メモリ消費量を抑制すれば処理速度が低下するのが一般的です。しかし、JDK/JREに おいては、Javaヒープのサイズを必要以上に大きく確保した場合、New GCの発生頻度が少なくなる反面、FullGCの処理時間が増 大し、処理速度が低下するという特徴があります。 ・ プロセスに割り当てられたメモリ資源は限られています。JDK/JREにおいては、スタック、Javaヒープおよびネイティブモジュールの 動作に必要な領域などの各セグメントがユーザ空間に割り当てられます。このため、あるセグメントの領域を大きく確保すれば、そ の分だけ他のセグメントの領域が少なくなります。 上のポイントを踏まえた上で、JDK/JREのチューニングを行います。 8.4.1 Javaヒープのチューニング 本節では、Javaヒープのチューニング方法および、チューニングによる影響範囲を説明します。 ■チューニング方法 Javaヒープの各領域のサイズは、“表8.4 Javaヒープに関するオプション”に示すオプションをJava起動時に指定することで設定ができ ます。 なお、メモリ割り当てプールのデフォルトの初期値および最大値を、“表8.5 メモリ割り当てプールのデフォルトのサイズ”に示します。 また、Permanent世代領域のデフォルトの初期値および最大値を、“表8.6 Permanent世代領域のデフォルトのサイズ”に示します。 また各オプションにおいて、“表8.4 Javaヒープに関するオプション”中に記載されていないデフォルト値を、“表8.7 Javaヒープに関す るオプション(-XX:NewSize/-XX:NewRatio)のデフォルト値”に示します。 表8.4 Javaヒープに関するオプション オプション -Xms オプションの機能 メモリ割り当てプールの初期値を指定します。 たとえば、メモリ割り当てプールの初期値を128MBに設定する場 合、”-Xms128m”と指定します。 - 209 - オプション オプションの機能 本オプションのデフォルト値は“表8.5 メモリ割り当てプールのデフォ ルトのサイズ”のとおりです。 なお、指定値が1MB未満の場合、または-XX:NewSizeオプションの 値(デフォルト値を含む)よりも小さな値の場合、初期化エラーとなり、 Javaプロセスは終了します。 -Xmx メモリ割り当てプールの最大値を指定します。 たとえば、メモリ割り当てプールの最大値を256MBに設定する場 合、”-Xmx256m”と指定します。 (実際に使用される値は、ページサイズなどのシステム情報を元に、 Java VMによる制御が最適となるように調整された値「調整値」となる ため、指定された値と若干異なる場合があります。) 本オプションのデフォルト値は“表8.5 メモリ割り当てプールのデフォ ルトのサイズ”のとおりです。 なお、指定値(または調整値)が、-Xmsオプションで指定された値よ りも小さな値の場合、初期化エラーとなり、Javaプロセスは終了しま す。 -XX:NewSize (注1) New世代領域のヒープサイズを指定します。 たとえば、New世代領域のヒープサイズを128MBに設定する場合、”XX:NewSize=128m”と指定します。 本オプションの指定が有効な場合のデフォルト値は以下のとおりで す。 ・ type0またはtype0pのCMS付きパラレルGCを使用している場合 は、メモリ割り当てプールの初期値の1/8です。 ・ type1またはtype1pのCMS付きパラレルGCを使用している場合 は、メモリ割り当てプールの初期値の1/3です。 ・ type2またはtype2pのCMS付きパラレルGCを使用している場合 は、メモリ割り当てプールの初期値の1/16です。 ・ 上記以外の場合のデフォルト値は“表8.7 Javaヒープに関するオ プション(-XX:NewSize/-XX:NewRatio)のデフォルト値”のとおり です。 なお、指定値がJava VMとしての下限値未満の場合、初期化エラー となり、Javaプロセスは終了します。そのため、本オプションを指定す る場合は、1MB以上の値を指定してください。 -XX:MaxNewSize (注1) New世代領域の最大ヒープサイズを設定します。 たとえば、New世代領域の最大ヒープサイズを128MBに設定する場 合、”-XX:MaxNewSize=128m”と指定します。 本オプションの指定が有効な場合のデフォルト値は以下のとおりで す。 ・ type0またはtype0pのCMS付きパラレルGCを使用している場合 は、メモリ割り当てプールの最大値の1/8です。 ・ type1またはtype1pのCMS付きパラレルGCを使用している場合 は、メモリ割り当てプールの最大値の1/3です。 ・ type2またはtype2pのCMS付きパラレルGCを使用している場合 は、メモリ割り当てプールの最大値の1/16です。 ・ 上記以外の場合、デフォルト値はありません(本オプションの値 を用いてNew世代領域の最大ヒープサイズは決定されません)。 なお、指定値が、-XX:NewSizeオプションで指定された値よりも小さ な値の場合は、-XX:NewSizeオプションで指定された値となります。 - 210 - オプション オプションの機能 -XX:NewRatio (注1)(注4) New世代領域とOld世代領域のサイズ比率を指定します。 たとえば、New世代領域とOld世代領域のサイズ比率を2とする場 合、”-XX:NewRatio=2”と指定します。 本オプションの指定が有効な場合のデフォルト値は“表8.7 Javaヒー プに関するオプション(-XX:NewSize/-XX:NewRatio)のデフォルト 値”のとおりです。 -XX:SurvivorRatio (注1)(注2) (注5) New世代領域を構成するEden領域とSurvivor領域のサイズ比率を 指定します。 たとえば、Eden領域とSurvivor領域のサイズ比率を8とする場合、”XX:SurvivorRatio=8”と指定します。 本オプションの指定が有効な場合のデフォルト値は以下のとおりで す。 ・ Solaris版JDK/JRE 5.0でシリアルGCを使用している場合のデフォ ルト値は32です。 ・ 上記以外の場合のデフォルト値は8です。 -XX:TargetSurvivorRatio (注1) (注2)(注5) ガーベジコレクション(GC)処理後の生存オブジェクトがSurvivor領 域を占める割合を、指定したパーセンテージ値に調整します。 たとえば、GC処理後の生存オブジェクトがSurvivor領域を占める割 合を半分とする場合、”-XX:TargetSurvivorRatio=50”と指定します。 本オプションの指定が有効な場合のデフォルト値は50です。 -XX:PermSize Permanent世代領域の初期値を指定します。 たとえば、Permanent世代領域の初期値を32MBに設定する場 合、”-XX:PermSize=32m”と指定します。 本オプションのデフォルト値は“表8.6 Permanent世代領域のデフォ ルトのサイズ”のとおりです。 なお、指定値が1MB未満の場合は初期化エラーとなり、Javaプロセ スは終了します。 -XX:MaxPermSize Permanent世代領域の最大値を指定します。 たとえば、Permanent世代領域の最大値を128MBに設定する場 合、”-XX:MaxPermSize=128m”と指定します。 (実際に使用される値は、ページサイズなどのシステム情報を元に、 Java VMによる制御が最適となるように調整された値「調整値」となる ため、指定された値と若干異なる場合があります。) 本オプションのデフォルト値は“表8.6 Permanent世代領域のデフォ ルトのサイズ”のとおりです。 なお、指定値(または調整値)が、-XX:PermSizeオプションで指定さ れた値よりも小さな値の場合は、-XX:PermSizeオプションで指定さ れた値となります。 注1) FJGCを使用する場合、このオプションへの指定値は無効となります。 なお、New世代領域サイズ自動調整機能が停止状態の場合は、-XX:NewSize、-XX:MaxNewSize、-XX:NewRatioの各オプション への指定値は有効となります。 注2) パラレルGCを使用する場合、このオプションへの指定値は無効となります。 注3) サイズを指定するオプションでは単位として次の文字を指定できます。 KB(キロバイト)を指定する場合:”k”または”K” MB(メガバイト)を指定する場合:”m”または”M” 注4) CMS付きパラレルGCを使用する場合、このオプションへの指定値は無効となります。 注5) CMS付きパラレルGCを使用する場合、かつ-XX:UseFJcmsGC=type0またはtype0p指定でない場合、このオプションへの指定値 は無効となります。 - 211 - 表8.5 メモリ割り当てプールのデフォルトのサイズ JDK/JREの バージョン JDK/JRE 5.0 OS Windows JDK/JREの実行 モード 32ビットモード Linux for x86 Linux for Intel64 Solaris 32ビットモード Windows Server(R) x64 Editions 64ビットモード Linux for Intel64 JDK/JRE 6 Windows 32ビットモード Linux for x86 Linux for Intel64 Solaris 32ビットモード Windows Server(R) x64 Editions 64ビットモード Linux for Intel64 GC処理 初期値 シリアルGC FJCG 2.0MB パラレルGC (注1) 5.375MB CMS付きパ ラレルGC (注2) シリアルGC FJCG 3.5MB パラレルGC (注1) 5.375MB CMS付きパ ラレルGC (注2) シリアルGC 4.3125MB パラレルGC (注1) 5.75MB CMS付きパ ラレルGC (注2) シリアルGC 5.0MB パラレルGC (注1) 8.0MB CMS付きパ ラレルGC (注2) シリアルGC 6.125MB パラレルGC (注1) 8.0MB CMS付きパ ラレルGC (注2) シリアルGC 7.75MB パラレルGC (注1) 9.1875MB CMS付きパ ラレルGC (注2) 最大値 64MB 84MB 64MB 84MB 注1) デフォルトで使用されるGC処理です。 注2) メモリ割り当てプールの最大値が64MB未満の場合は、メモリ割り当てプールの最大値と等しくなります。メモリ割り当てプールの 最大値が64MB以上の場合は、64MBとなります。 表8.6 Permanent世代領域のデフォルトのサイズ JDK/JREの バージョン JDK/JRE 5.0 OS Windows Linux for x86 Linux for Intel64 JDK/JREの実行 モード 32ビットモード Java VM 初期値 Java HotSpot Client VM 8MB FJVM (注1) 16MB - 212 - 最大値 64MB JDK/JREの バージョン Java VM 初期値 64ビットモード FJVM (注1) 20.75MB 84MB 32ビットモード Java HotSpot Client VM 12MB 64MB FJVM (注1) 16MB FJVM (注1) 20.75MB JDK/JREの実行 モード OS 最大値 Solaris Windows Server(R) x64 Editions Linux for Intel64 JDK/JRE 6 Windows Solaris Linux for x86 Linux for Intel64 Windows Server(R) x64 Editions 64ビットモード 84MB Linux for Intel64 注1) デフォルトで使用されるJava VMです。 表8.7 Javaヒープに関するオプション(-XX:NewSize/-XX:NewRatio)のデフォルト値 JDK/JREの バージョン JDK/JRE 5.0 OS Windows JDK/JREの実行モード 32ビットモード Java VM Java HotSpot Client VM -XX:NewSize -XX:NewRatio 640KB 12 FJVM (注1) Linux for x86 8 Linux for Intel64 Solaris 32ビットモード Java HotSpot Client VM 2176KB FJVM (注1) Windows Server(R) x64 Editions 8 2 64ビットモード FJVM (注1) 2624KB 2 32ビットモード Java HotSpot Client VM 1024KB 12 Linux for Intel64 JDK/JRE 6 Windows FJVM (注1) Linux for x86 8 Linux for Intel64 Solaris 32ビットモード Java HotSpot Client VM 2176KB FJVM (注1) Windows Server(R) x64 Editions 64ビットモード Linux for Intel64 注1) デフォルトで使用されるJava VMです。 ■チューニングの方針 Javaヒープをチューニングする際、次の方針があります。 - 213 - FJVM (注1) 8 2 2624KB 2 1. FullGCを実行したにもかかわらず、メモリ不足が発生する場合、GCのログを採取し、メモリ割り当てプールまたはPermanent世 代領域のいずれかの領域が不足しているかどうかを確認します。 2. FullGCはコストがかかります。このため、メモリ不足が発生しなくても、Javaアプリケーションがハングアップしたかのように一時的 に無反応になる場合、FullGCの影響を受けている場合があります。GCのログを採取し、Javaヒープが必要以上に大きなサイズ になっていれば、Javaヒープのサイズを縮小する方針でチューニングします。 3. 効率的なNew GCに対して、FullGCはコストがかかります。このため、New世代領域とOld世代領域のサイズのバランスを考慮 する必要があります。なお、GC処理としてパラレルGCまたはFJGCを使用する場合は、JavaヒープのNew世代領域およびOld世 代領域の大きさに関する値が自動的に調整および最適化されるため、通常はこのバランスを考慮する必要はありません。 4. 仮想メモリに余裕がある場合は、Javaプロセスを複数起動して、プロセス多重度を上げる方法を検討します。プロセス多重度を 上げることにより、プロセスごとのユーザ空間を有効に使うことが可能になります。ただし、メモリのスワッピングによるスローダウン に注意する必要があります。 ■チューニングの影響範囲 メモリ割り当てプールの大きさ(-Xmxオプションの指定値)や、New世代領域とOld世代領域の大きさのバランスを変更した場合の影 響範囲を、次に示します。 ・ メモリ割り当てプールの大きさを縮小した場合、GCが頻発することがあります。 ・ メモリ割り当てプールの大きさを拡張した場合、FullGCに時間がかかることがあります。 ・ メモリ割り当てプールの大きさを拡張した場合、その分ユーザ空間や仮想メモリが少なくなるため、スタックやネイティブモジュール の動作に必要な領域を確保できず、メモリ不足になることがあります。 ・ New世代領域の大きさがメモリ割り当てプールの大きさの半分となるようなチューニングを行った場合、一般的に、FullGCが発生 しやすくなる傾向があります。なお、Javaアプリケーション実行時のオブジェクト生成/解放などの特性に依存しますので、どのア プリケーションの場合でもFullGCが発生しやすいというわけではありません。 overcommit memory機能が有効な場合の注意事項 「overcommit memory機能」が有効な場合、Linuxは、Javaヒープの各領域の最大値に相当する仮想メモリ資源を、Java VMの起動時 に、Javaプロセスに対して予約します。 このため、-Xms値と-Xmx値を異なる値にしてJavaプロセスを起動する場合、本機能の有効/無効によって、Javaプロセス起動時にJava ヒープとして必要となる仮想メモリの量が異なります。 ・ overcommit memory機能が無効、またはovercommit memory機能がないシステムの場合 Javaヒープ用仮想メモリ量 = 「-Xms値」 + 「Perm域初期値」 ・ overcommit memory機能が有効なシステムの場合 Javaヒープ用仮想メモリ量 = 「-Xmx値」 + 「-XX:MaxPermSize値」 この結果、仮に同量の仮想メモリ資源を持つシステムの場合であっても、本機能の有効/無効によって、同時に起動できるJavaプ ロセスの数が異なる場合があります。 Linuxで仮想メモリ資源の見積もりを行う場合には、overcommit memory機能の有無に注意してください。 8.4.2 スタックのチューニング 本節では、Javaアプリケーションで使用するスレッドのスタックのチューニング方法および、チューニングによる影響範囲を説明しま す。 ■チューニング方法 Java APIで生成するスレッドのスタックサイズは、“-Xss”オプションで指定することができます。 “-Xss”オプションは、バイト単位でスタックサイズを指定します。例えば、スタックサイズを512KBに設定する場合、“-Xss512k”と指定 します。 なお、mainメソッドが実行されるスレッドはJava VMの起動前に作成されたスレッドである(Java APIで作成されたスレッドではない)た め、“-Xss”オプションによるスタックサイズの指定は効果がありません。 - 214 - またJDK/JRE内で実行されるJavaメソッドを自動的にコンパイルする専用スレッド(コンパイラスレッド)のスタックサイズは、“XX:CompilerThreadStackSize”オプションで指定することができます。 通常、コンパイラスレッドのスタックサイズを指定する必要はありません。 “-XX:CompilerThreadStackSize”オプションは、キロバイト(Kバイト)単位でコンパイラスレッドのスタックサイズ指定します。例えば、ス タックサイズを1024KBに設定する場合、”-XX:CompilerThreadStackSize=1024”と指定します。 Java APIで生成したスレッドおよびコンパイラスレッドのデフォルトのスタックサイズを、“表8.8 Java APIで生成したスレッドおよびコン パイラスレッドのデフォルトのスタックサイズ”に示します。 表8.8 Java APIで生成したスレッドおよびコンパイラスレッドのデフォルトのスタックサイズ JDK/JREの実行 モード Java APIで生成した コンパイラスレッ コンパイラスレッド (FJVM) ド (Client VM)(注 スレッド(注1) 1) Windows 32ビットモード 256KB 256KB 2048KB Linux for x86 32ビットモード 512KB 512KB 2048KB 64ビットモード 1024KB Windows 32ビットモード 320KB 320KB 2048KB Linux for x86 32ビットモード 320KB 512KB 2048KB Solaris 32ビットモード 512KB 512KB 2048KB Windows Server(R) x64 Editions 64ビットモード 1024KB JDK/JRE のバージョ ン JDK/JRE 5.0 OS Linux for Intel64 Solaris Windows Server(R) x64 Editions -(注2) 4096KB Linux for Intel64 JDK/JRE 6 Linux for Intel64 -(注2) 4096KB Linux for Intel64 注1) Windows版JDK/JREにおけるスタックサイズは、java.exeなどWindows版JDK/JREが提供するJDKツールを用いた場合の値です。 JNIを用いて独自にJava VMを起動しているWindowsアプリケーションの場合は、Java VMを起動したプログラムのメインスレッドに対す るスタックサイズと同じ値になります。 注2) 実行モードが64ビットモードのJDK/JREでは、Java HotSpot Client VMは搭載していません。 注3) スタック領域の実際の管理はOSが行います。そのためスタック領域に関する管理方法/動作仕様については、JDK/JREを実行す る各OSの仕様に依存します。 ■チューニングの影響範囲 スタックのサイズを変更した場合の影響範囲を、次に示します。 ・ スタックのサイズを縮小した場合、スタックオーバーフローが発生することがあります。 ・ スタックのサイズを拡張した場合、その分ユーザ空間や仮想メモリが少なくなるため、Javaヒープやネイティブモジュールの動作に 必要な領域を確保できず、メモリ不足になることがあります。 8.4.3 暖機運転 本項では、Javaアプリケーション実行において、動的コンパイルから受ける影響の確認方法、およびその対応方法である暖機運転に ついて説明します。 ■チューニング方法 “8.3 動的コンパイル”で説明したように、Javaアプリケーションの実行は、Java VM起動直後はインタプリタ実行だけで行われ、次第に インタプリタ実行と動的コンパイル結果による機械命令実行との混合動作になります。また動的コンパイルにより翻訳された機械命令 の内容も、Javaアプリケーションの実行が進むにつれて、次第にJavaアプリケーションの実行状況に合った翻訳結果に最適化されま - 215 - す。つまりJavaアプリケーションの実行には、以下の動的コンパイルによるオーバーヘッドや最適化状態の推移があるため、Javaアプリ ケーションとして安定した実行性能になるまで、プロセス起動時からある程度の時間を必要とする場合があります。 ・ 実行対象プログラムであるクラスファイルを実行時に読み込むため、Javaアプリケーションとしての起動直後には、クラスファイルの ロードおよび内容検査によるオーバーヘッドが発生します。 ・ 実行時に機械命令への翻訳処理を行うため、そのオーバーヘッドが発生します。 ・ 機械命令への翻訳・最適化処理で必要とする情報を、Javaアプリケーション実行と同時に収集するため、Javaアプリケーション開始 直後は最適化状態の推移が少なく、結果として実行性能が遅い機械命令となっている場合があります。 なお、Javaアプリケーションとして安定した実行性能になるまでに掛かる時間は、各アプリケーションによって異なります。 (1) 動的コンパイル発生状況の調査 Javaアプリケーション実行時における動的コンパイルから受ける影響の有無は、Javaアプリケーションによる業務が開始された際に、 動的コンパイルの発生頻度が高いかどうかを判断することで行います。 具体的には、“8.3.3 動的コンパイル発生状況のログ出力機能”を用いてコンパイラスレッドのCPU使用状況や動的コンパイル結果情 報を出力し、その結果から以下の傾向が見て取れ、かつJavaアプリケーションとして安定した実行性能になるまでに掛かる時間との関 連性が見て取れるかどうかを元に判断します。 ・ コンパイラスレッドのCPU使用状況において、経過時間に対してCPU時間の割合が高い場合 ・ 動的コンパイル結果情報において、Javaメソッドのコンパイルが、短い間に連続して発生している場合 Javaアプリケーション起動時や、業務を開始してJavaアプリケーションへの入力が始まる時に、動的コンパイル処理が発生する頻度が 高くなる傾向は、Javaアプリケーション実行時の一般的な傾向です。そのため、動的コンパイル発生状況の調査の結果として、「コンパ イラスレッドのCPU時間の割合が高い」や「動的コンパイルの発生頻度が高い」などの傾向が見て取れる場合であっても、インタプリタ 実行と機械命令による実行がバランス良く行われており、対応が不要な場合が多々あります。 動的コンパイル発生状況の調査は、Javaアプリケーションとして安定した実行性能になるまでに掛かる時間が実運用上の問題となった 場合に行ってください。 Javaアプリケーション起動直後の性能に影響を与える処理は、動的コンパイル処理だけではありません。Javaアプリケーション自体の 初期化処理や関連するアプリケーションの起動待ちなど、Javaアプリケーションの起動直後でだけ動作する動的コンパイル以外の要 因についても考慮する必要があります。 ServletやEJBなどのJavaアプリケーションがInterstage Application Server配下で動作する場合、「Javaアプリケーションの起動(開始)」に は以下の2つの意味があります。 a. Interstage Application Serverの起動(J2EE環境のワークユニット起動、JavaEE環境のクラスタ起動) b. 業務アプリケーションの運用開始 動的コンパイル処理が行われる頻度が高まるのは(a)の直後と(b)の直後の両方ですが、業務としての影響を確認することが目的であ るため、動的コンパイル発生状況の調査対象は(b)の状況になります。 なお、動的コンパイル結果情報(-XX:+FJPrintCompilationオプション指定時の出力結果)から、(b)の始まりを調べるには、システムログ などから(a)の完了時刻を調べ、その時刻以降に発生した動的コンパイルを対象に調査を行います。 - 216 - JavaアプリケーションがJSPで作成されている場合、アプリケーションを配備する際にJSPのプリコンパイル(javacコマンドによりJavaソー スをクラスファイルへ変換する処理)が実施されていないと、Javaアプリケーション起動時にjavacコマンド実行によるオーバヘッドが発 生する場合があります。 JSPのプリコンパイル運用ができる場合は、JSPのプリコンパイルを実施することで、Javaアプリケーションとして安定した実行性能になる までに掛かる時間が小さくなるかどうかを確認してださい。 (2) 暖機運転 Javaアプリケーションを起動した後、業務としての運用を開始する時点で安定した実行性能を得る状態にするためには、暖機運転と いう運用を行います。 暖機運転とは、Javaアプリケーションを起動した後、実際の業務を開始する前に、業務と同様のダミーデータを用いて疑似実行させる ことで、事前に主なJavaメソッドを動作させ、クラスファイルのロードやJavaメソッドの動的コンパイルを完了させておくことを言います。 暖機運転により、動的コンパイルなどのオーバーヘッドを減らすことができ、また機械命令への翻訳・最適化処理もその時点で行わ れるようになるため、業務としての運用開始時点から安定した実行性能を得ることができるようになります。 なお暖機運転をどの程度の期間行ったら良いのかについては、Javaアプリケーションの実行性能が運用要件を満たすところまで安 定しているかのかどうかが、判断の基準になります。ただし、Javaアプリケーションを起動してから業務開始までの時間は無限にあるわ けではないので、“8.3.3 動的コンパイル発生状況のログ出力機能”の動的コンパイル結果情報の出力結果を参考に、暖気運用に掛 ける時間をある程度のところで区切る判断をする必要があります。 図1に、動的コンパイル結果情報(-XX:+FJPrintCompilationオプション指定時)の出力例を示します。 通常、Javaアプリケーションの実行には、実行結果の表示、データの更新などの結果を伴います。暖機運転による実行結果が、Javaア プリケーションの運用自体に影響を与えないように注意する必要があります。 例えば、暖機運転用のダミーデータをそのままデータベースに登録してしまい、運用時に誤ったデータを返却するなどの問題が発生 しないように注意してください。 Javaアプリケーション自体の初期化処理や関連するアプリケーションの起動待ちなど、動的コンパイル以外の要因でJavaアプリケーショ ンとして安定した実行性能になるまでに時間が掛かっている場合は、暖機運転では対処することができません。 図1 動的コンパイル結果情報(-XX:+FJPrintCompilationオプション指定時)の出力例 0.133: 1 sun.misc.ASCIICaseInsensitiveComparator::compare (143 bytes) 0.137: 2 java.lang.String::charAt (33 bytes) 0.142: 3 java.lang.String::hashCode (64 bytes) 0.204: 4 java.lang.String::equals (88 bytes) 0.210: 5 java.lang.String::indexOf (151 bytes) 0.215: 6 java.lang.AbstractStringBuilder::append (40 bytes) 0.226: 7 java.lang.String::replace (142 bytes) (中略) 0.444: 30 java.util.jar.Attributes::read (410 bytes) 0.470: 31 java.lang.String::<init> (111 bytes) 0.486: [CompilerThread0: cpu=140.63ms elapsed=367.55ms 1] 0.486: 32 java.util.jar.Attributes$Name::isValid (32 bytes) 0.487: 33 java.util.jar.Attributes$Name::isAlpha (30 bytes) 0.487: 34 sun.nio.cs.ext.MS932$Decoder::decodeSingle (19 bytes) (中略) Application Server起動時は、頻繁に動的コンパイルが発生 15.449: 796 net.jxta.impl.document.LiteXMLElement::addAttribute (450 bytes) - 217 - 15.538: 797 java.io.ObjectOutputStream::writeHandle (21 bytes) 15.574: 798 java.util.Hashtable$Enumerator::hasNext (5 bytes) 15.600: 799 com.sun.enterprise.config.ConfigBean::addXPathToChild (27 bytes) 15.606: [CompilerThread0: cpu=250.00ms elapsed=781.02ms 24] 15.630: 800 java.util.regex.Matcher::<init> (84 bytes) 23.535: 801 java.util.Arrays::copyOf (47 bytes) 25.542: 802 java.util.Arrays::copyOf (13 bytes) 25.545: 803 net.jxta.document.MimeMediaType::findNextSeperator (39 bytes) 43.567: 804 net.jxta.impl.document.LiteXMLElement::getTagRanges (1697 bytes) この時点でInterstage Application Serverとしての起動が完了し、動的コンパイルの発生がいったん減少 (Interstage Application Serverの起動(J2EE環境のワークユニット起動、JavaEE 環境のクラスタ起動)の完了時間は、Interstage Application Serverのログ(サーバ情報のログ) から調べることができます。) 44.212: 805 org.apache.tomcat.util.buf.Ascii::toLower (14 bytes) 44.223: 806 org.apache.tomcat.util.buf.ByteChunk::equalsIgnoreCase (76 bytes) 44.224: 807 sun.nio.cs.ISO_8859_1$Decoder::decodeArrayLoop (263 bytes) 44.240: 18% java.util.Properties$LineReader::readLine @ 21 (452 bytes) 44.258: 808 org.apache.coyote.http11.InternalInputBuffer::parseHeader (585 bytes) 44.265: 809 java.util.Properties$LineReader::readLine (452 bytes) 44.290: 810 java.lang.ThreadLocal$ThreadLocalMap::nextIndex (15 bytes) 44.332: 811 java.util.Hashtable$Enumerator::next (27 bytes) 44.387: 812 java.net.URI::quote (208 bytes) 44.412: 19% sun.nio.cs.ext.DoubleByteEncoder::encodeArrayLoop @ 55 (608 bytes) (中略) 業務が開始し、再び頻繁に動的コンパイルが発生 158.121: 1128 sun.util.calendar.ZoneInfo::getOffsetsByWall (8 bytes) 160.374: 1129 javax.management.NotificationBroadcasterSupport::sendNotification (118 bytes) 160.698: 1130 java.util.TimeZone$DisplayNames::access$000 (4 bytes) 161.405: 1131 com.sun.jmx.remote.internal.ArrayNotificationBuffer::addNotification (144 bytes) 163.572: 1132 sun.nio.cs.ext.DoubleByteDecoder::decodeLoop (28 bytes) 164.460: 1133 sun.util.calendar.CalendarDate::isDaylightTime (22 bytes) 170.743: 1134 java.util.AbstractCollection::toArray (116 bytes) 業務開始からしばらく経過した時点で、動的コンパイルの発生が減少 8.5 チューニング/デバッグ技法 ここでは、チューニング技法およびデバッグ技法を紹介します。 8.5.1 スタックトレース Javaアプリケーションで例外(java.lang.Throwableのインスタンス)がスローされた場合などに出力されるスタックトレースは、エラーが発 生するまでの経緯(メソッドの呼び出し順番)が示されています。このスタックトレースを解析することにより、エラーが発生した箇所と原 因を確認することができます。 ■スタックトレースの出力先 スタックトレースの出力先は、標準エラーです。通常のJavaアプリケーションの場合は、コンソールに出力されますが、Servlet/JSP/EJB アプリケーションの場合は、ログファイル(標準出力、標準エラー出力あるいはJava VMの出力を格納するファイルなど)に出力されま す。 ■スタックトレースの出力方法 Javaでスローされた例外をcatch節でキャッチし、例外のprintStackTraceメソッドを実行することにより、スタックトレースを出力することが できます。 java.lang.Throwable.printStackTrace()でスタックトレースを出力する方法を、図1に示します。 図1 printStackTraceメソッドでスタックトレースを出力する方法 try { SampleBMPSessionRemote bmpSessionRemote = bmpSessionHome.create(); } catch(Exception e) { - 218 - e.printStackTrace(); } なお、スローされた例外をtry-catch構文で処理するメソッドがスレッドにない場合、そのスレッドは停止され、Java VMによってスタック トレースが出力されます。 ■スタックトレースの出力フォーマット スタックトレースの出力フォーマットを、図1に示します。 図1 スタックトレースの出力フォーマット 例外クラス名: エラーメッセージ at クラス名.メソッド名1(ソース名:行番号) at クラス名.メソッド名2(ソース名:行番号) : : at クラス名.メソッド名N(ソース名:行番号) 呼び出し先 呼び出し元 ・ 最初の1行目は、スローされた例外のクラス名とエラーメッセージです。 エラーメッセージがない場合もあります。 ・ 2行目以降は、メソッドの呼び出し元(クラス名.メソッド名N)から呼び出し先(クラス名.メソッド名1)に向かって下から上に出力されます。 2行目(クラス名.メソッド名1)が、例外をスローしたメソッドの情報です。 ・ “メソッド名”が“<init>”の場合、コンストラクタを示します。 ・ “メソッド名”が“<cinit>”が場合、static initializerを示します。 ・ “(ソース名:行番号)”が“(Native Method)”の場合、Javaのネイティブメソッド(.soや.dllファイル)を示します。 ・ クラスのコンパイル時にデバッグ情報を削除した場合、“(ソース名:行番号)”には、ソース名しか表示されなかったり、“Unknown Source”と表示されたりする場合があります。 8.5.1.1 スタックトレースの解析方法(その1) 図1の出力例をもとにして、解析方法を説明します。 図1の先頭の“数字:”は、説明の便宜上、付加しています。 図1 スタックトレースの出力例 1:java.lang.NullPointerException 2: at agency.attestation.CheckLoginInfo.doCheck(CheckLoginInfo.java:150) 3: at agency.attestation.AttestationServlet.doGet(AttestationServlet.java:96) 4: at agency.attestation.AttestationServlet.doPost(AttestationServlet.java:161) 5: at javax.servlet.http.HttpServlet.service(HttpServlet.java:772) 6: at javax.servlet.http.HttpServlet.service(HttpServlet.java:865) : ■読み方 図1のスタックトレースは、6行目から上方向に読むと、次の流れで例外が発生したことがわかります。 1. javax.servlet.http.HttpServlet.service()が、HttpServlet.javaの865行目で、javax.servlet.http.HttpServlet.service()を実行し、 2. javax.servlet.http.HttpServlet.service()が、HttpServlet.javaの772行目で、agency.attestation.AttestationServlet.doPost()を実行し、 が agency.attestation.AttestationServlet.doGet()を実行し、 AttestationServlet.java の 161 行 目 で、 が 、 AttestationServlet.java agency.attestation.CheckLoginInfo.doCheck()を実行した結果、 の 96 行 目 で、 3. agency.attestation.AttestationServlet.doPost() 、 4. agency.attestation.AttestationServlet.doGet() 5. agency.attestation.CheckLoginInfo.doCheck()内のCheckLoginInfo.javaの150行目で、java.lang.NullPointerExceptionという例外 が発生した - 219 - ■解析方法 図1のスタックトレースの解析例を、次に示します。 1. 1行目の例外情報から、原因を特定できるかどうか確認します。 NullPointerExceptionがスローされていることがわかります。 2. 2行目のCheckLoginInfo.javaの開発担当者であれば、150行目の実装に問題がないかどうかを確認します。 3. 2行目のCheckLoginInfo.javaの開発担当者でない場合、スタックトレース中で最上行にある開発担当者が開発したクラスを探し ます。そして、そのクラスの実装に問題がないかどうかを確認します。それでも、原因を特定できない場合は、開発したクラスが 使用しているクラスの提供元に調査を依頼します。 または、スタックトレースが、想定された流れでメソッドを実行しているかどうかを確認するのも1つの方法です。 8.5.1.2 スタックトレースの解析方法(その2) 図1の出力例をもとにして、解析方法を説明します。 図1の先頭の“数字:”は、説明の便宜上、付加しています。 図1 スタックトレースの出力例 1:java.util.MissingResourceException: Can't find bundle for base name sample.SampleResource, locale ja_JP 2: at java.util.ResourceBundle.throwMissingResourceException(Unknown Source) 3: at java.util.ResourceBundle.getBundleImpl(Unknown Source) 4: at java.util.ResourceBundle.getBundle(Unknown Source) 5: at sample.SampleMessage.getMessage(SampleMessage.java:15) 6: at sample.SampleServlet.doGet(SampleServlet.java:10) 7: at javax.servlet.http.HttpServlet.service(HttpServlet.java:696) 8: at javax.servlet.http.HttpServlet.service(HttpServlet.java:809) : : ■解析方法 図1のスタックトレースの解析例を、次に示します。 1. 1行目の例外情報から、原因を特定できないかを確認します。 APIリファレンスによると、java.util.MissingResourceExceptionは、Javaのリソースがない場合に発生する例外です。また、エラー メッセージによると、sample.SampleResourceというリソースファイルの日本語版(ja_JP)がないということがわかります。 2. リソースファイルを確認します。 a. リソースファイル名を誤っていないか SampleMessage.javaの15行目のsample.SampleMessage.getMessage ()内で、java.util.ResourceBundle.getBundle()を実行 した結果、例外がスローされています。したがって、そこでjava.util.ResourceBundle.getBundle()に渡しているリソースファイ ル名に誤りがないかどうかを確認します。 b. リソースファイルが、所定のディレクトリ構成内に存在するか a)のリソースファイル名が正しい場合、所定のディレクトリ構成(/sample/)に、次のいずれかのリソースファイルがあるかどう かを確認します。 - SampleResource_ja_JP.properties - SampleResource_ja_JP.class - SampleResource_ja.properties - SampleResource_ja.class - SampleResource.properties - SampleResource.class - 220 - 8.5.1.3 スタックトレースの解析方法(その3) JDK/JRE 1.4以降、java.lang.Throwableに次のコンストラクタとメソッドが追加されました。 ・ Throwable(java.lang.String, java.lang.Throwable) ・ Throwable(java.lang.Throwable) ・ initCause(java.lang.Throwable) これにより、スタックトレースには、原因となる例外のスタックトレースも出力されるようになりました。 以降、図1のサンプルを使って、説明します。 図1 サンプルプログラム 1 :public class Test { 2 : 3 : public static void main(String[] args) { 4 : new Test(); 5 : } 6 : 7 : Test() { 8 : try{ 9 : parentMethod(); 10: } catch (Exception e) { 11: e.printStackTrace(); 12: } 13: } 14: 15: void parentMethod() throws HiLevelException { 16: try { 17: childMethod(); 18: } catch (Exception e) { 19: throw new HiLevelException("HiLevel", e); 20: } 21: } 22: 23: void childMethod() throws LowLevelException { 24: throw new LowLevelException("LowLevel"); 25: } 26:} 27: 28:class HiLevelException extends Exception { 29: HiLevelException(String msg, Throwable cause) { 30: super(msg, cause); 31: } 32:} 33: 34:class LowLevelException extends Exception { 35: LowLevelException(String msg) { 36: super(msg); 37: } 38:} 図1のサンプルを実行すると、図2のスタックトレースが出力されます。 図2 スタックトレース HiLevelException: HiLevel at Test.parentMethod(Test.java:19) at Test.<init>(Test.java:9) at Test.main(Test.java:4) Caused by: LowLevelException: LowLevel at Test.childMethod(Test.java:24) - 221 - at Test.parentMethod(Test.java:17) ... 2 more HiLevelExceptionに続いて、“Caused by:”以降に、原因となるLowLevelExceptionのスタックトレースが出力されています。最終行の “... 2 more”は、“Caused by:”の直前の2行が続きのスタックトレースであることを示しています。 つまり、図3のように解釈することができます。 図3 原因となる例外の解釈 Caused at at at at by: LowLevelException: LowLevel Test.childMethod(Test.java:24) Test.parentMethod(Test.java:17) Test.<init>(Test.java:9) Test.main(Test.java:4) 以上から、次のことがわかります。 ・ スタックトレースの原因は、LowLevelExceptionである ・ Test.main(Test.javaの4行目)が、最初の呼び出し元である。 詳細は、Java APIリファレンスのjava.lang.ThrowableのprintStackTraceメソッドの解説を参照してください。 8.5.2 例外発生時のスタックトレース出力 FJVMを使用してJavaアプリケーションを実行している場合、以下の例外については、実行性能の観点から、Java VMの動的コンパイ ル処理が行なう最適化処理により例外発生時のスタックトレース出力処理が省略され、例外発生時のスタックトレースが出力されない 場合があります(例外発生時のスタックトレース出力抑止)。 JDK/JRE 5.0、6のFJVMの場合 ・ java.lang.NullPointerException ・ java.lang.ArithmeticException ・ java.lang.ArrayIndexOutOfBoundsException ・ java.lang.ArrayStoreException ・ java.lang.ClassCastException 動 的 コ ン パ イ ル 処 理 に よ り 例 外 発 生 時 の ス タ ッ ク ト レ ー ス 出 力 処 理 が 省 略 さ れ な い よ う に す る 場 合 は 、 “ -XX:OmitStackTraceInFastThrow”オプションを指定します。 ただし該当する例外の発生頻度が高い場合に当該オプションを指定し、例外発生時のスタックトレース出力を行なった場合は、Java アプリケーションの実行性能が低下する場合があります。 当該オプションを指定する場合は、性能検証を行った上で使用するか、開発作業において例外が発生している場所を特定したい場 合においてだけ使用してください。 “-XX:-OmitStackTraceInFastThrow”オプションはFJVM固有機能です。 8.5.3 スレッドダンプ スレッドダンプには、Javaプロセスの各スレッドの情報(スタックトレース形式)が含まれているため、ハングアップやデッドロックなどの動 作具合を調査することができます。 スレッドダンプの出力先は、標準出力です。スレッドダンプが出力される契機および出力先を、“表8.9 スレッドダンプの出力契機と出 力先”に示します。 - 222 - 表8.9 スレッドダンプの出力契機と出力先 プログラムの種類 出力契機 出力先 J2EEアプリケーション 一定の条件を満たした場合、コンテナの機能により自動 的に採取される場合と利用者の任意のタイミングで手動 による採取があります。 標準出力、 JavaVMの出力を ロギングしている ファイル 自動採取: アプリケーションがタイムアウトまたは無応答になった場合 手動採取: “スレッドダンプツール”で採取することができます。スレッ ドダンプツールの詳細は、“トラブルシューティング集”の “スレッドダンプツール”を参照してください。 kill -QUIT [プロセスID]でJava VMに対してQUITシグナ ルを送り採取することができます。 J2EE以外のJavaプロ グラム 利用者の任意のタイミングで手動で採取することができま す。 コマンドプロンプトからJavaプログラムを起動した場合: 以下、いずれかの方法で採取できます。 1)[Ctrl]+[Break]キー押下 2)“スレッドダンプツール” コマンドプロンプト以外からJavaプログラムを起動した場 合: “スレッドダンプツール”で採取します。 スレッドダンプツールの詳細は、“トラブルシューティング 集”の“スレッドダンプツール”を参照してください。 ターミナルからJavaプログラムを起動した場合: 以下、いずれかの方法で採取できます。 1)[Ctrl]+[\]キー(英語キーボードの場合バックスラッシュ キー)押下 2)kill -QUIT [プロセスID] ターミナル以外からJavaプログラムを起動した場合: kill -QUIT [プロセスID]で採取します。 “-Xrs”オプションが指定されたJavaプロセスの場合、当 該プロセスへ送られた[Ctrl]+[Break]キー押下またはQUIT シグナルに対する動作は、OSのデフォルト動作になります。 そのため、“-Xrs”オプションを指定したJavaプロセスに対 して[Ctrl]+[Break]キー押下またはQUITシグナルが送ら れると、当該Javaプロセスは強制終了または異常終了しま す。 スレッドダンプを出力する可能性があるJavaプロセスに対 して、“-Xrs”オプションは指定しないでください。 ただし、Windows(R)でサービスとして登録されるJavaプ - 223 - コンソール(標準出 力) プログラムの種類 出力契機 出力先 ロセスの場合は、“-Xrs”オプションを指定しない場合、ロ グオフ時に強制終了してしまいます。これが不都合な場 合は、“-Xrs”オプションを指定してください。 図1の出力例をもとにして、スレッドダンプの解析方法を説明します。 図1 サンプルプログラム 1 :public class DeadlockSample { 2 : static boolean flag; 3 : static Thread1 thread1; 4 : static Thread2 thread2; 5 : 6 : public static void main(String[] args) { 7 : thread1 = new Thread1(); 8 : thread2 = new Thread2(); 9 : thread1.start(); 10: thread2.start(); 11: } 12:} 13: 14:class Thread1 extends Thread { 15: public Thread1(){ 16: super("Thread1"); 17: } 18: 19: public void run(){ 20: synchronized(this){ 21: System.out.println("Thread1開始"); 22: while(DeadlockSample.flag==false){ // Thread2が開始するのを待つ 23: yield(); 24: } 25: DeadlockSample.thread2.method(); 26: notify(); 27: } 28: } 29: 30: public synchronized void method(){ 31: try{wait(1000);}catch(InterruptedException ex){} 32: System.out.println("Thread1.method()終了"); 33: } 34:} 35: 36:class Thread2 extends Thread { 37: public Thread2(){ 38: super("Thread2"); 39: } 40: 41: public void run() { 42: synchronized(this){ 43: DeadlockSample.flag = true; 44: System.out.println("Thread2開始"); 45: DeadlockSample.thread1.method(); 46: notify(); 47: } 48: } 49: 50: public synchronized void method() { 51: try{wait(1000);}catch(InterruptedException ex){} 52: System.out.println("Thread2.method()終了"); - 224 - 53: 54:} } 図1のサンプルでは、Thread1とThread2がお互いに排他処理を行っています。 このサンプルを実行すると、次のように処理が進められます。 1. Thread1で、Thread1のロックを獲得する(20行目のsynchronized節) 2. Thread2で、Thread2のロックを獲得する(42行目のsynchronized節) 3. Thread1で、Thread2.method()を実行しようとして、ロック解放待ちになる(50行目のsynchronized修飾子) 4. Thread2で、Thread1.method()を実行しようとして、ロック解放待ちになる(50行目のsynchronized修飾子) この結果、Thead1とThread2がお互いに、解放されないロックを待ち続けるデッドロック状態になります。 デッドロック状態で、スレッドダンプを採取したものを、図2に示します。 図2 スレッドダンプ "DestroyJavaVM" prio=5 tid=0x002856c8 nid=0x5f4 waiting on condition [0..6fad8] "Thread2" prio=5 tid=0x0092f4d8 nid=0x640 waiting for monitor entry [182ef000..182efd64] at Thread1.method(DeadlockSample.java:31) - waiting to lock <0x1002ffe8> (a Thread1) at Thread2.run(DeadlockSample.java:45) - locked <0x10030ca0> (a Thread2) "Thread1" prio=5 tid=0x0092f370 nid=0x294 waiting for monitor entry [182af000..182afd64] at Thread2.method(DeadlockSample.java:51) - waiting to lock <0x10030ca0> (a Thread2) at Thread1.run(DeadlockSample.java:25) - locked <0x1002ffe8> (a Thread1) "Signal Dispatcher" daemon prio=10 tid=0x0098eb80 nid=0x634 waiting on condition [0..0] "Finalizer" daemon prio=9 tid=0x0092a540 nid=0x5e8 in Object.wait() [1816f000..1816fd64] at java.lang.Object.wait(Native Method) - waiting on <0x10010498> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111) - locked <0x10010498> (a java.lang.ref.ReferenceQueue$Lock) at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127) at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159) "Reference Handler" daemon prio=10 tid=0x0096da70 nid=0x5e4 in Object.wait() [1812f000..1812fd64] at java.lang.Object.wait(Native Method) - waiting on <0x10010388> (a java.lang.ref.Reference$Lock) at java.lang.Object.wait(Object.java:429) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:115) - locked <0x10010388> (a java.lang.ref.Reference$Lock) "VM Thread" prio=5 tid=0x0096c950 nid=0x624 runnable "VM Periodic Task Thread" prio=10 tid=0x0092c008 nid=0x2a0 waiting on condition "Suspend Checker Thread" prio=10 tid=0x0098e118 nid=0x478 runnable Found one Java-level deadlock: ============================= "Thread2": waiting to lock monitor 0x00929c3c (object 0x1002ffe8, a Thread1), which is held by "Thread1" "Thread1": waiting to lock monitor 0x00929c5c (object 0x10030ca0, a Thread2), which is held by "Thread2" Java stack information for the threads listed above: - 225 - =================================================== "Thread2": at Thread1.method(DeadlockSample.java:31) - waiting to lock <0x1002ffe8> (a Thread1) at Thread2.run(DeadlockSample.java:45) - locked <0x10030ca0> (a Thread2) "Thread1": at Thread2.method(DeadlockSample.java:51) - waiting to lock <0x10030ca0> (a Thread2) at Thread1.run(DeadlockSample.java:25) - locked <0x1002ffe8> (a Thread1) Found 1 deadlock. ■解析方法 スレッドダンプの各スレッドの情報は、スタックトレース形式です。 Thread1とThread2の両方のスタックトレースには、“locked”と“waiting to lock”があります。また、スレッドダンプの下の方にも、“deadlock” の文字列があり、デットロックが発生していることが確認できます。 このように、スレッドダンプで全スレッドの動作状況を確認するにより、Javaプロセスがハングアップしているか、あるいは、デッドロック 状態かを確認することができます。特に、短い間隔で複数のスレッドダンプを採取し、スレッドに動きがなければ、ハングアップの可能 性があります。 スレッドダンプの詳細は、“トラブルシューティング集”も参照してください。 オブジェクトをロックしているスレッドがスレッドダンプ上に出ない 通常スレッドダンプ上のあるスレッドで次のように表示される場合があります。 - waiting to lock <オブジェクトID> (a クラス名) このような場合、別のスレッドがそのオブジェクトIDのロックを持っていて、そのスレッドのトレース上のどこかで次の表示がされていま す。 - locked <オブジェクトID> (a クラス名) しかし、スレッドダンプを表示するタイミングによっては“- locked <オブジェクトID> (a クラス名)”の表示がどのスレッドにも現われず、“waiting to lock <オブジェクトID> (a クラス名)”だけ表示される場合があります。 以下のプログラムを例とします。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class NoLockOwner extends Thread { static Object lock = new Object(); public static void main(String[] arg) { new NoLockOwner().start(); new NoLockOwner().start(); } public void run() { while (true) { synchronized (lock) { dumb(); } } } void dumb() { - 226 - 22 23 24 25 26 27 int n = 0; for (int i = 0 ; i < 1000 ; ++i) n += i; } } (0)スレッドダンプを取ると、通常はこのようになります。 "Thread-1" prio=1 tid=0x10 nid=0x5 waiting for monitor entry [0x3000..0x4000] at NoLockOwner.run(NoLockOwner.java:14) - waiting to lock <0x800> (a java.lang.Object) "Thread-0" prio=1 tid=0x20 nid=0x6 runnable [0x5000..0x6000] at NoLockOwner.dumb(NoLockOwner.java:23) at NoLockOwner.run(NoLockOwner.java:15) - locked <0x800> (a java.lang.Object) (1)先頭フレームでオブジェクトをロックしている場合は“- locked”ではなく、“- waiting to lock”と表示されることがあります。 "Thread-1" prio=1 tid=0x10 nid=0x5 waiting for monitor entry [0x3000..0x4000] at NoLockOwner.run(NoLockOwner.java:14) - waiting to lock <0x800> (a java.lang.Object) "Thread-0" prio=1 tid=0x20 nid=0x6 runnable [0x5000..0x6000] at NoLockOwner.run(NoLockOwner.java:14) - waiting to lock <0x800> (a java.lang.Object) この場合、スレッドの状態を見て、runnableであれば、ロック待ちではなく、ロック取得後同じフレームを実行中の状態であると考えま す。 Thread-0、Thread-1ともに、“- waiting to lock <0x800> (a java.lang.Object)”と表示されているので、どちらもロック待ちのように見えま す。 しかし、Thread-0の状態は、runnbleなので、ロック待ち状態ではありません。 (2) “- waiting to lock”と表示されるのは、ロック待ちの状態だけではなく、ロック獲得処理の最中でもそのように表示されます。 "Thread-1" prio=1 tid=0x10 nid=0x5 waiting for monitor entry [0x3000..0x4000] at NoLockOwner.run(NoLockOwner.java:14) - waiting to lock <0x800> (a java.lang.Object) "Thread-0" prio=1 tid=0x20 nid=0x6 waiting for monitor entry [0x5000..0x6000] at NoLockOwner.run(NoLockOwner.java:14) - waiting to lock <0x800> (a java.lang.Object) Thread-0、Thread-1ともに、“- waiting to lock <0x800> (a java.lang.Object)”と表示されているので、どちらもロック待ちのように見えま す。 さらに、スレッドの状態も、どちらも、“waiting for monitor entry”になっています。 “- waiting to lock”と表示されるのは、ロック待ちの状態だけではなく、ロック獲得処理の最中でもそのように表示されます。 したがって、この場合、Thread-0またはThread-1のいずれか一方、あるいは両方がロック獲得処理の最中であると考えます。 しかし、この状態は長く続かず、短時間で(0)または(1)に移行します。 (3) ロックを開放した直後の状態 "Thread-1" prio=1 tid=0x10 nid=0x5 waiting for monitor entry [0x3000..0x4000] at NoLockOwner.run(NoLockOwner.java:14) - waiting to lock <0x800> (a java.lang.Object) "Thread-0" prio=1 tid=0x20 nid=0x6 runnable [0x5000..0x6000] at NoLockOwner.run(NoLockOwner.java:16) Thraed-0がちょうどロックを開放した直後の状態です。 この状態も長く続くとはなく、短時間で(0)または(1)に移行します。 スレッドダンプからアプリケーションの状態を判断する場合、ひとつのスレッドダンプから状態を判断することは困難です。 - 227 - 適切な判断をするためには、複数回のスレッドダンプを総合的に見ることが必要です。 スレッドダンプ中に表示されるsynchronizedメソッドの行番号について 次のようなプログラムを考えます。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 class SyncMethod extends Thread { static volatile int k; public static void main(String[] arg) { new SyncMethod().start(); } public void run() { while (true) { dumb(); } } synchronized void dumb() { /* meaningless comments */ int i = 0; for ( ; i < 10 ; ++i) k += i; } } このようなプログラムのスレッドダンプを取ると以下のように出力されることがあります。 "Thread-0" prio=1 tid=0x300 nid=0x61 runnable [1000..2000] at SyncMethod.dumb(SyncMethod.java:23) - waiting to lock <0xa00> (a SyncMethod) at SyncMethod.run(SyncMethod.java:13) 23行目でロックを獲得しているように見えますが、23行目は、“for ( ; i < 10 ; ++i)”であり、何もロック獲得に関係しているようにソース コード上は見えません。 これは、synchronizedメソッドがロックを獲得する行番号は、最初に実行される行番号になるためです。 スレッドダンプ中、複数のスレッドがロックを獲得している場合ついて 次のようなプログラムを考えます。 1 2 3 4 5 6 7 8 9 10 11 12 13 class NoNotify extends Thread { static Object o = new Object(); public static void main(String[] arg) { new NoNotify().start(); new NoNotify().start(); } public void run() { try { - 228 - 14 15 16 17 18 19 20 synchronized (o) { o.wait(); } } catch (Exception e) {} } } このプログラムには誤りがあります。 このプログラムでは誰もnotifyするスレッドがないため、どちらのスレッドも永久に起こされることはありません。 このプログラムのスレッドダンプを採取すると次のように示される場所があります。 "Thread-1" prio=1 tid=0x800 nid=0x6 in Object.wait() [1000..2000] at java.lang.Object.wait(Native Method) - waiting on <0x200> (a java.lang.Object) at java.lang.Object.wait(Object.java:429) at NoNotify.run(NoNotify.java:15) - locked <0x200> (a java.lang.Object) "Thread-0" prio=1 tid=0x900 nid=0x7 in Object.wait() [3000..4000] at java.lang.Object.wait(Native Method) - waiting on <0x200> (a java.lang.Object) at java.lang.Object.wait(Object.java:429) at NoNotify.run(NoNotify.java:15) - locked <0x200> (a java.lang.Object) このスレッドダンプから分かることは、複数のスレッドがロックを獲得しているのではなく、どのスレッドもロックを獲得していないということ です。 Thread-0、Thraed-1ともに、同じオブジェクト“ID<0x200>”のオブジェクトをロックしているように見えます。 しかし“- locked”と表示されているスレッドが、現在のロックオーナであることは意味しません。(“- locked”の正確な意味するところは、 そのフレームにおいてロックしたということに過ぎません。) 先頭フレームでは、“- waiting on”と表示されています。 これは、ロックが解放されたら起こされる可能性のある“- waiting to lock”とは異なり、ロックが解放されても自動的に起こされることを意 味しません。 Javaヒープ領域に関する情報の出力 JDK/JRE 6の場合は、スレッドダンプの出力と合わせて、Javaヒープ領域に関する情報も出力されます。 Javaヒープ領域に関する情報は、各ガーベジコレクション処理の違いにより、New世代領域、Old世代領域、Permanent世代領域の各 領域に対応する出力文字列が異なります。 なお、パーセントで示されている値は、情報出力時点でJava VMがJavaヒープ用に利用可能な状態にしている(コミットしている)メモリ 量に対する比率です。利用可能な上限値に対する比率ではありません。そのため、パーセントで示されている値は参照せず、K(キロ) 単位で表示されているメモリ使用量の値と、オプションで指定された値(デフォルト値を含む)とを比較する方法で各値を利用してくださ い。 ・ シリアルGC使用時: 「def new generation」が「New世代領域」、「tenured generation」が「Old世代領域」、「compacting perm gen」が「Permanent世代領 域」に関する情報です。 ・ パラレルGC使用時: 「PSYoungGen」が「New世代領域」、「PSOldGen」が「Old世代領域」、「PSPermGen」が「Permanent世代領域」に関する情報です。 ・ CMS付きパラレルGC使用時: 「par new generation」が「New世代領域」、「concurrent mark-sweep generation」が「Old世代領域」、「concurrent-mark-sweep perm gen」が「Permanent世代領域」に関する情報です。 なお「Old世代領域」および「Permanent世代領域」における「object space」についての情報は出力されません。 出力例: - 229 - Heap PSYoungGen total 7168K, used 5158K [0x0fd60000, 0x10470000, 0x10470000) eden space 7104K, 72% used [0x0fd60000,0x102658f0,0x10450000) from space 64K, 25% used [0x10450000,0x10454000,0x10460000) to space 64K, 0% used [0x10460000,0x10460000,0x10470000) PSOldGen total 4096K, used 162K [0x0c470000, 0x0c870000, 0x0fd60000) object space 4096K, 3% used [0x0c470000,0x0c498870,0x0c870000) PSPermGen total 16384K, used 2103K [0x08470000, 0x09470000, 0x0c470000) object space 16384K, 12% used [0x08470000,0x0867dd40,0x09470000) 8.5.4 クラスのインスタンス情報出力機能 図1のオプションを指定したJavaプロセスに対してスレッドダンプ出力の操作を行った場合、スレッドダンプの出力に続いて、Javaヒー プ内に生存する各クラスのインスタンス情報が図2の形式で出力されます。FJVMでは、当該機能を「クラスのインスタンス情報出力機 能」として実装しています。 クラスのインスタンス情報として、クラス毎のインスタンス数および合計サイズが出力されるため、Javaヒープ内におけるメモリリークなど の調査で利用することができます。 クラスのインスタンス情報の出力先は、標準出力です。クラスのインスタンス情報が出力される契機および出力先は、“8.5.3 スレッドダ ンプ”が出力される契機および出力先と同じです。 なお、-Xloggcオプションの指定がある場合は、クラスのインスタンス情報の出力先が標準出力から-Xloggcオプションで指定したファイ ルへ切り替わります。 図1 スレッドダンプに続いて、クラスのインスタンス情報を出力する機能を有効にするオプション -XX:+PrintClassHistogram 図2 クラスのインスタンス情報の出力形式 num #instances #bytes class name ---------------------------------------------$1: $2 $3 $4 : (略) : Total $5 $6 図2の各要素について、以下で説明します。 $1: 順位 クラスのインスタンス情報は、各クラスのインスタンスの合計サイズが大きい順に、ソートされて出力されます。 $2: クラスのインスタンス数 $3: クラスのインスタンスの合計サイズ $4: クラス名 $5: $2の値の合計 $5: $3の値の合計 クラスのインスタンス情報出力機能では、不要なインスタンスを排除した後の情報を採取・出力します。そのため、事前処理としてFullGC を実行します。クラスのインスタンス情報出力の過度の使用は、FullGCの多発となるので注意してください。 - 230 - クラスのインスタンス情報出力に先立って行われるはずのFullGCが、ガーベジコレクション処理の実行抑止により実行できない状態に ある場合は、図3のメッセージを標準出力へ出力した後、クラスのインスタンス情報出力の要求は取り消されます。 図3 クラスのインスタンス情報出力要求が取り消された場合に出力されるメッセージ The PrintClassHistogram operation was canceled because GC could not be run. 8.5.5 java.lang.System.gc()実行時におけるスタックトレース出力機能 Javaアプリケーションが以下のJavaメソッドを頻繁に実行すると、Java VMに負荷がかかり、アプリケーションの応答性能を低下させる 要因になることがあります。 ・ java.lang.System.gc() ・ java.lang.Runtime.gc() 以降、java.lang.System.gc()(以降、System.gc()と略する)で代表して説明します。 FJVMでは、Javaアプリケーション実行時にSystem.gc()メソッドの実行状態の確認ができるように、当該メソッドを実行したJavaスレッド のスタックトレースを出力する機能を「java.lang.System.gc()実行時におけるスタックトレース出力機能」として実装しています。 java.lang.System.gc()実行時におけるスタックトレース出力機能は、図1のオプションを指定した場合に有効となります。 本機能が有効な場合、Javaアプリケーション内でSystem.gc()メソッドが実行された場合には、当該メソッドを実行したJavaスレッドのス タックトレース情報が、図2のような形で標準出力へ出力されます。 なお、標準出力への出力結果は、FJVMのログ情報としてファイルへも格納されます。また“-verbose:gc”オプション指定などでガー ベジコレクション処理の結果ログ出力を指定していた場合は、java.lang.System.gc()実行時におけるスタックトレース出力後に出力され た結果ログ出力も、合わせてファイルへ格納されます。ファイル名や格納先はJava VM異常終了時のログ出力時と同じです。“8.5.8 FJVMログ”を参照してください。 図1 java.lang.System.gc()実行時におけるスタックトレース出力機能を有効にするオプション -XX:+PrintJavaStackAtSystemGC 図2 java.lang.System.gc()実行時におけるスタックトレース出力機能による出力例 【JDK/JRE 5.0の場合】 "main" prio=5 tid=0x0002d0a8 nid=0x1 runnable [ffbee000..ffbeee7c] at java.lang.Runtime.gc(Native Method) at java.lang.System.gc(System.java:737) at SystemGC.main(SystemGC.java:8) "main" prio=5 tid=0x0002d0a8 nid=0x1 runnable [ffbee000..ffbeee7c] at java.lang.Runtime.gc(Native Method) at SystemGC.foo(SystemGC.java:4) at SystemGC.main(SystemGC.java:10) 【JDK/JRE 6の場合】 "main" prio=10 tid=0x087c1c00 nid=0xd2a runnable [0xb75ab000..0xb75ab214] java.lang.Thread.State: RUNNABLE at java.lang.Runtime.gc(Native Method) at java.lang.System.gc(System.java:928) at SystemGC.main(SystemGC.java:8) "main" prio=10 tid=0x087c1c00 nid=0xd2a runnable [0xb75ab000..0xb75ab214] java.lang.Thread.State: RUNNABLE at java.lang.Runtime.gc(Native Method) at SystemGC.foo(SystemGC.java:4) at SystemGC.main(SystemGC.java:10) - 231 - 図2の出力例の場合、SystemGC.mainからjava.lang.System.gc()が実行され、SystemGC.fooからjava.lang.Runtime.gc()が実行された ことを確認することができます。 JDK/JRE 6からスタックトレース情報にスレッドの状態を表す情報(トレース情報の前の行)が表示されるようになりました。 図中の例では「java.lang.Thread.State: RUNNABLE」となっていますが、"RUNNABLE"の部分が、"NEW"、"TIMED_WAITING (sleeping)"、"WAITING (on object monitor)"、"TIMED_WAITING (on object monitor)"、"WAITING (parking)"、"TIMED_WAITING (parking)"、"BLOCKED (on object monitor)"、"TERMINATED"、"UNKNOWN"などの表示の場合があります。 8.5.6 Java VM終了時における状態情報のメッセージ出力機能 特別なメッセージ出力などがないまま、Javaプロセスが予想外の状態で終了してしまった場合の原因の1つとして、Javaアプリケーショ ンが以下のいずれかの処理を実行した場合が考えられます。 ・ java.lang.System.exit()を予想外の箇所で実行した ・ java.lang.Runtime.exit()を予想外の箇所で実行した ・ java.lang.Runtime.halt()を予想外の箇所で実行した 以降は、java.lang.System.exit()(以降、System.exit()と略する)で代表して説明します。 System.exit()の実行によりJavaアプリケーションが明示的にJavaプロセスを終了させた場合、Java VM側から見ると正常な仕様動作で あるため、Java VMとして特別なメッセージ出力などは行いません。このため、ソースがないなど、内部処理動作の詳細が不明なJava アプリケーションが予想外の状態で終了した場合には、ソース確認などが行えないため、System.exit()が実行されたかどうかを確認す ることができません。 このためFJVMでは、Javaプロセス終了時にSystem.exit()が実行されたかどうかを確認可能にするための機能を、「Java VM終了時 における状態情報のメッセージ出力機能」として実装しています。 Java VM終了時における状態情報のメッセージ出力機能は、図1のオプションを指定した場合に有効となります。 図1 Java VM終了時における状態情報のメッセージ出力機能を有効にするオプション -XX:+VMTerminatedMessage 本機能が有効な場合、JavaプロセスがSystem.exit()の実行で終了した場合には、System.exit()を実行したスレッドのスタックトレース 情報などが、図2のような形で標準出力へ出力されます。スタックトレース情報の出力の有無および内容を確認することにより、System.exit() 実行の有無を確認することができます。 なお、標準出力への出力結果は、FJVMのログ情報としてファイルへも格納されます。ファイル名や格納先はJava VM異常終了時の ログ出力時と同じです。“8.5.8 FJVMログ”を参照してください。 そして、本機能が有効な場合で、かつJavaプロセス終了時に図2のようなスタックトレースの情報が出力されなかった場合(「#### JavaVM terminated: …」から始まるメッセージ出力だけの場合)は、System.exit()が使用されず、Javaアプリケーション側の制御論理として終了 したと考えられます。 また、本機能が有効な場合で、かつJavaプロセス終了時に図2のような情報が何も出力されなかった場合は、ネイティブモジュールの 中からCランタイムのexit()関数呼び出しによりJavaプロセスが終了したなど、別原因によるJavaプロセスの終了だと考えられます。 図2 Java VM終了時における状態情報のメッセージ出力機能による出力例 【JDK/JRE 5.0の場合】 Thread dump at JVM_Halt(status code=1234): "main" prio=5 tid=0x00286240 nid=0x394 runnable [6f000..6fc10] at java.lang.Shutdown.halt(Native Method) at java.lang.Shutdown.exit(Shutdown.java:211) - locked <0x16b66d48> (a java.lang.Class) at java.lang.Runtime.exit(Runtime.java:90) at java.lang.System.exit(System.java:715) at JVM_Halt.main(JVM_Halt.java:5) #### JavaVM terminated: Java HotSpot(TM) Server VM - 232 - (1.5.0_FUJITSU_MODIFIED-B** mixed mode), [pid=21388] TimeMillis=1169451586436 Time=Mon Jan 22 16:39:46 2007 【JDK/JRE 6の場合】 Thread dump at JVM_Halt(status code=1234): "main" prio=3 tid=0x00030000 nid=0x2 runnable [0xfe5ff000..0xfe5ffd80] java.lang.Thread.State: RUNNABLE at java.lang.Shutdown.halt0(Native Method) at java.lang.Shutdown.halt(Shutdown.java:105) - locked <0xfa81e7d0> (a java.lang.Shutdown$Lock) at java.lang.Shutdown.exit(Shutdown.java:179) - locked <0xf3dc8dd8> (a java.lang.Class for java.lang.Shutdown) at java.lang.Runtime.exit(Runtime.java:90) at java.lang.System.exit(System.java:906) at JVM_Halt.main(JVM_Halt.java:5) #### JavaVM terminated: Java HotSpot(TM) Server VM (11.3.02_FUJITSU_MODIFIED-B** mixed mode), [pid=29500] TimeMillis=1243580170483 Time=Fri May 29 15:56:10 2009 図2の出力例の場合、JVM_Halt.main()がSystem.exit()を実行し、その結果としてJavaプロセスが終了したことを確認することができま す。 JDK/JRE 6からスタックトレース情報にスレッドの状態を表す情報(トレース情報の前の行)が表示されるようになりました。 図中の例では「java.lang.Thread.State: RUNNABLE」となっていますが、"RUNNABLE"の部分が、"NEW"、"TIMED_WAITING (sleeping)"、"WAITING (on object monitor)"、"TIMED_WAITING (on object monitor)"、"WAITING (parking)"、"TIMED_WAITING (parking)"、"BLOCKED (on object monitor)"、"TERMINATED"、"UNKNOWN"などの表示の場合があります。 この情報はJava VM終了時における状態の判定には使用しません。 8.5.7 ログ出力における時間情報のフォーマット指定機能 以下のオプションで出力されるログに含まれる「ログ出力時の時間」情報のフォーマットを、図1のオプションで指定することができま す。 図1のオプションによる指定がない場合、ログ出力時の時間は「Java VMが起動されてからの経過時間(秒)」(「-XX:FJverboseTime=type1」 が指定された場合の形式)で出力されます。 ・ ガーベジコレクションのログ出力 -verbosegc -XX:+UseFJverbose ・ 動的コンパイル発生状況のログ出力機能 -XX:+PrintCompilationCPUTime -XX:+FJPrintCompilation 図1 ログ出力における時間情報のフォーマットを指定するオプション -XX:FJverboseTime=タイプ タイプとして以下の値が指定できます type1 type2 type3 -XX:FJverboseTime=type1が指定された場合 ログ出力時の時間を、「Java VMが起動されてからの経過時間(秒)」で示します。 例) 0.165: - 233 - -XX:FJverboseTime=type2が指定された場合 ログ出力時の時間を、「日時(iso8601フォーマット)」で示します。 例) 2010-10-01T13:37:36.881+0900: -XX:FJverboseTime=type3が指定された場合 ログ出力時の時間を、「日時(iso8601フォーマット)」とJava VMが起動されてからの「経過時間(秒)」で示します。出力順序は、「日時」 「経過時間」です。 例) 2010-10-01T13:37:45.830+0900: 0.164: 8.5.8 FJVMログ FJVMでは「Java VM異常終了時のログ出力機能」の強化を行っています。 何らかの原因でJavaプロセスが異常終了した場合、Java VM異常終了時のログとしてFJVMログが出力されます。 Javaプロセスが異常終了した原因の調査のために、このFJVMログを活用することができます。 ■FJVMログの出力先 FJVMログは、Javaプロセスのカレントディレクトリに、図1のファイル名で出力されます。 図1 FJVMのファイル名 fjvm_pid***.log (***は異常終了したJavaプロセスのプロセスID) IJServerクラスタ使用時のカレントディレクトリの詳細は、“Java EE運用ガイド”の“IJServerクラスタ”を参照してください。 IJServer使用時のカレントディレクトリの詳細は、“J2EE ユーザーズガイド(旧版互換)”の“J2EEアプリケーションが運用される環境 (IJServer)”を参照してください。 ■FJVMログの調査 FJVMログとしてJavaプロセス異常終了時の各種情報が格納されますが、その中から以下の情報を原因調査用の情報として使用す ることができます。 ・ 異常終了箇所の情報 ・ 異常終了時のシグナルハンドラ情報(Solaris版/Linux版) ・ 異常終了時のJavaヒープに関する情報 各情報の内容について、以下で説明します。 8.5.8.1 異常終了箇所の情報 異常終了箇所に関する図1の情報が確認できます。 図1 異常終了箇所に関する情報 1. 異常終了時に発生した例外に関する情報(シグナルコードおよび例外発生アドレス) 「Unexpected Signal :」から始まる情報です。 2. 異常終了した関数名(実際には異常終了したアドレスに一番近いシンボル名) 「Function name=」から始まる情報です。 3. 異常終了した関数を含むライブラリ名 「Library=」から始まる情報です。 4. 異常終了時のJavaスレッドのスタックトレース 「Current Java thread:」から始まる情報です。 5. 異常終了時のダイナミックライブラリ一覧 「Dynamic libraries:」から始まる情報です。 - 234 - 6. 発生時間 「Local Time =」から始まる情報です。 ■調査手順 まず、図1の1~3の情報で異常終了した関数を特定し、実行しているJavaアプリケーションから呼び出す関数かどうかを確認します。 ただし、図1の2の異常終了した関数名として出力される名前は、異常終了したアドレスに一番近いシンボル名情報であるため、実際 に異常終了した関数とは別の名前が出力されている場合がありますので注意してください。 そして、実行しているJavaアプリケーションが使用する関数の場合には、当該関数使用に際して何らかの問題がないか確認します。 実行しているJavaアプリケーションで使用していない関数の場合には、図1の4のスタックトレースを調査します。 スタックトレース情報の最初のメソッドがネイティブメソッドだった場合(メソッド名の後ろに「(Native Method)」が付加されている場合)は JNI処理に関係した問題である可能性が高いため、スタックトレース情報で出力された処理のJNI処理に関わる制御で何らかの問題が ないか確認します。 また異常終了した関数を含むライブラリ名が利用者作成のライブラリである場合は、利用者側作成のライブラリ内の問題である可能 性が高いため、当該ライブラリ内の処理および当該ライブラリを呼び出すJNI処理に何らかの問題がないか確認します。 スタックトレースの調査方法は、“8.5.1 スタックトレース”を参照してください。 ■スタックオーバーフローの検出 図1の1の異常終了時に発生した例外に関する情報に、図2のシグナルコードの表記がある場合、例外が発生したスレッドでスタック オーバーフローが発生した(図2の1、3の表記)、または発生した可能性がある(図2の2、4の表記)ことを示しています。 この場合、例外が発生したスレッドに対するスタックのサイズを大きくすることで問題が解決する可能性があります。 スタックオーバーフロー発生の原因が、Java APIで生成されたスレッドに対するスタックのサイズにある場合は、“8.4.2 スタックのチュー ニング”を参照して、Java APIで生成されるスレッドに対するスタックのサイズをチューニングしてください。 図2 スタックオーバーフローを示すシグナルコード 1)「EXCEPTION_STACK_OVERFLOW」 2)「EXCEPTION_ACCESS_VIOLATION (Stack Overflow ?)」 3)「SIGSEGV (Stack Overflow)」 4)「SIGSEGV (Stack Overflow ?)」 ワトソンログの分析 スタックオーバーフローが原因で発生した異常終了の場合、OS側からFJVM側の処理へ制御が渡らず、そのままワトソン博士へ制御 が渡されることがあります。この場合は、FJVMログが出力されないため、ワトソン博士のログファイルを確認してください。 ワトソンログに図3の例外番号が出力されている場合には、スタックオーバーフローが原因と考えられます。 なお、ワトソン博士の説明は、“8.5.9.1 クラッシュダンプ”を参照してください。 図3 スタックオーバーフローを示す例外番号 c00000fd (スタックオーバーフロー) 8.5.8.2 異常終了時のシグナルハンドラ情報 Java VMの実行制御で必要となる“表8.10 Java VMの制御で必要となるシグナル”の各シグナルに対するシグナルハンドラ情報が確 認できます。 表8.10 Java VMの制御で必要となるシグナル Solaris版Java VM SIGSEGV SIGPIPE SIGBUS Linux版Java VM SIGSEGV SIGPIPE SIGBUS - 235 - Solaris版Java VM Linux版Java VM SIGILL SIGFPE INTERRUPT_SIGNAL (デフォルトはSIGUSR1) ASYNC_SIGNAL (デフォルトはSIGUSR2) SIGQUIT (注1) SIGINT (注1) SIGHUP (注1) SIGTERM (注1) SIGXFSZ (注3) SIGILL SIGFPE INTERRUPT_SIGNAL (デフォルトはSIGUSR1) (注2) SR_SIGNUM (デフォルトはSIGUSR2) SIGQUIT (注1) SIGINT (注1) SIGHUP (注1) SIGTERM (注1) SIGXFSZ (注3) 注1) -Xrsオプションで操作対象となるシグナルです。 注2) Java VMでリザーブしているシグナルです。 注1)および注2)のシグナルに関するシグナルハンドラ情報は出力しません。 注3) JDK/JRE 6のJava VMで使用されているシグナルです。 シグナルハンドラ情報として、以下の情報が出力されています。 ・ 登録されているシグナルハンドラのアドレス ・ 登録されているシグナルハンドラがJava VMで登録したシグナルハンドラかどうかの正否情報(Java VM以外の処理で登録された シグナルハンドラの場合には、該当するシグナルハンドラ情報の行に“(not in VM)”が出力されます) “表8.10 Java VMの制御で必要となるシグナル”のシグナルハンドラがJava VM以外の処理で登録されていた場合、Java VMは正常に 動作しません。この場合、当該シグナルハンドラを登録しないようにアプリケーションを修正してください。 8.5.8.3 異常終了時のJavaヒープに関する情報 異常終了時のJavaヒープの使用状況が確認できます。 Javaヒープのサイズによる異常終了の場合、異常終了時にどのJavaヒープの枯渇により異常終了が発生したのかが確認できます。 8.5.8.4 出力例と調査例 ここでは、Solaris版JDK/JRE 5.0での出力例を元に説明します。 -------------------------------------------------------------------------------#### Java VM: Java HotSpot(TM) Server VM (1.5.0_FUJITSU_MODIFIED-B**[*****] mixed mode) >>>> Logging process start. [pid=27758] Time=Fri Jan 12 20:37:57 2007 (1) 異常終了箇所の情報 異常終了箇所に関する情報が確認できます。 libjvm.soのsysThreadAvailableStackWithSlack関数の近くでSIGSEGV(メモリアクセスで不正なセグメ ントを参照)が発生しています。 本例の場合、Java VM内で異常が発生していると判断します。 異常終了箇所がJavaアプリケーション内でないため、異常発生時のスタックトレース情報を調査します。 本例の場合、com.appli.ap.business.AL02ABB00000.toStringの延長で不正なアクセスが発生している ので、そこからAL02ABB00000.javaの489行目で不正なアクセスを招きそうな箇所がないか調べます。 Unexpected Signal : SIGSEGV [0xb] occurred at PC=0xff092068, pid=27758, nid=1 Function name=sysThreadAvailableStackWithSlack Library=/opt/FJSVawjbk/jdk5/jre/lib/sparc/fjvm/libjvm.so Current Java thread: 0xfb8e2850 - 0xfb8e4b7c at com.appli.ap.business.AL02ABB00000.toString(AL02ABB00000.java:489) 0xfb8e2850 - 0xfb8e4b7c at com.appli.ap.business.AL02ABB00000.toString(AL02ABB00000.java:520) at java.lang.String.valueOf(String.java:1942) at java.lang.StringBuffer.append(StringBuffer.java:365) - 236 - - locked <f6db38d8> (a java.lang.StringBuffer) at com.appli.ap.business.AL02ABB25201.doExecute(AL02ABB25201.java:774) at com.appli.ap.formula.AFCC6842.doDelegate(AFCC6842.java:221) at com.appli.ap.formula.ejb.session.AFSF6801.doExecuteOrdinarily(AFSF6801.java:381) at com.appli.ap.formula.ejb.session.FJAFSF6801_AFSF6801RemoteImpl.doExecuteOrdinarily(FJAFSF6801_AFSF6801RemoteImpl.java: 464) - locked <df672838> (a com.appli.ap.formula.ejb.session.FJAFSF6801_AFSF6801RemoteImpl) at com.appli.ap.formula.ejb.session._FJAFSF6801_AFSF6801RemoteImpl_Tie._invoke(_FJAFSF6801_AFSF6801RemoteImpl_Tie.java:76) 0xfb98c930 - 0xfb98cc68 at com.fujitsu.ObjectDirector.CORBA.ServerRequest.call_invoke(ServerRequest.java:961) at com.fujitsu.ObjectDirector.PortableServer.POA.MsgRecv(POA.java:2578) at com.fujitsu.ObjectDirector.PortableServer.POAManager.MsgRecv(POAManager.java:1061) at com.fujitsu.ObjectDirector.PortableServer.POAnc.MsgRecv(POAnc.java:163) Dynamic libraries: 0x10000 /opt/FJSVawjbk/jdk5/bin/java 0xff370000 /usr/lib/libthread.so.1 0xff3fa000 /usr/lib/libdl.so.1 ~~~~~~~ 略 ~~~~~~~ 0xbef70000 /lib/libgen.so.1 0xbd6b0000 /lib/libextpiswu.so 0xbef50000 /opt/FJSVawjbk/jdk5/jre/lib/sparc/libioser12.so Local Time = Fri Jan 12 20:37:57 2007 Elapsed Time = 9885 注意: Error IDの行が出力されている場合、Error IDとして出力されている値は、Java VMが内部処理矛盾を 自己検出した場合に出力する内部情報コードです。SIGSEGVやSIGBUSなどOSが検出した異常の場 合には、常に同じ値(4F530E435050****)が出力されます。そのためError IDの先頭が「4F530E435050」 で始まるコードの場合は、通常、意味を持ちません。Error IDの先頭が「4F530E435050」以外で始まる コードの場合には、障害情報検索時や判断時のキーワード情報としての意味を持ちます。 # # HotSpot Virtual Machine Error : SIGSEGV (0xb) # [ pc=0xff092068, pid=27758(0x6c6e), nid=1(0x00000001), tid=0x00034d10 ] # # Please report this error to FUJITSU # # Java VM: Java HotSpot(TM) Server VM (1.5.0_FUJITSU_MODIFIED-B** mixed mode) ~~~~~~~ 略 ~~~~~~~ (2)異常終了時のシグナルハンドラ情報 異常終了時のシグナルハンドラに関する情報が確認できます。 本例では、すべて「(in VM)」表示なので、シグナルハンドラの登録変更に関する問題はありません。 ##>> Signal Handlers VM signal handler[1]=0xfe1ec0a0, VM signal handler[2]=0xfe4ff780, SIG_DFL= 0x00000000, SIG_IGN=0x00000001, INT_SIG=(16,16), ASYNC_SIG=(17,17) SIGSEGV :signal handler=0xfe4ff780 (in VM *) SIGPIPE :signal handler=0xfe1ec0a0 (in VM) SIGBUS :signal handler=0xfe1ec0a0 (in VM *) SIGILL :signal handler=0xfe1ec0a0 (in VM) SIGFPE :signal handler=0xfe1ec0a0 (in VM) - 237 - INTERRUPT_SIGNAL :signal handler=0xfe4ff010 (in VM +) ASYNC_SIGNAL :signal handler=0xfe1ec0a0 (in VM) (3)異常終了時のJavaヒープ領域に関する情報 異常終了時のJavaヒープ領域に関する情報が確認できます。 JDK/JRE 5.0、6のFJVMの場合: パラレルGC使用時: 「PSYoungGen」が「New世代領域」、 「PSOldGen」が「Old世代領域」、 「PSPermGen」が「Permanent世代領域」 に関する情報です。 CMS付きパラレルGC使用時: 「par new generation」が「New世代領域」、 「concurrent mark-sweep generation」が「Old世代領域」、 「concurrent-mark-sweep perm gen」が「Permanent世代領域」 に関する情報です。 なお「Old世代領域」および「Permanent世代領域」における「object space」についての情報は出力さ れません。 FJGC使用時(JDK/JRE 5.0の場合のみ): 「split eden generation」が「New世代領域」、 「tenured generation」が「Old世代領域」、 「compacting perm gen」が「Permanent世代領域」 に関する情報です。 シリアルGC使用時: 「def new generation」が「New世代領域」、 「tenured generation」が「Old世代領域」、 「compacting perm gen」が「Permanent世代領域」 に関する情報です。 本例の場合、異常終了時点における「New世代領域」+「Old世代領域」の領域(-Xmxで最大量が指 定される領域)には、空きがあることがわかります。 また「Permanent世代領域」に対しても、余裕があることがわかります。 注意: パーセントで示されている値は、異常終了した時点でFJVMがJavaヒープ用に利用可能な状態にして いる(コミットしている)メモリ量に対する比率です。利用可能な上限値に対する比率ではありません。 パーセントで示されている値は参照せず、K(キロ)単位で表示されているメモリ使用量の値と、オプショ ンで指定された値(デフォルト値を含む)とを比較して判断してください。 注意: パラレルGCを使用していた場合、以下の「-Xms=」「-Xmx=」に続いて表示される値は、-Xmsオプショ ン/-Xmxオプションで指定された値およびページサイズなどのシステム情報を元に、Java VMが最適と なるよう初期値/最大値を計算し直し、実際にJava VMが使用した値が出力されます。そのため、指定さ れた値と異なる場合があります。 ##>> Heap PSYoungGen total 15488K, used 14480K [0xf62b0000, 0xf76e0000, 0xf7800000] eden space 15232K, 94% used [0xf62b0000,0xf70cc180,0xf7190000] from space 256K, 12% used [0xf7660000,0xf7668000,0xf76a0000] to space 192K, 0% used [0xf76b0000,0xf76b0000,0xf76e0000] PSOldGen total 1408K, used 156K [0xf3800000, 0xf3960000, 0xf62b0000] object space 1408K, 11% used [0xf3800000,0xf3827198,0xf3960000] PSPermGen total 16384K, used 2173K [0xef800000, 0xf0800000, 0xf3800000] object space 16384K, 13% used [0xef800000,0xefa1f698,0xf0800000] (-Xms=5504K, -Xmx=65536K, -XX:PermSize=16384K, -XX:MaxPermSize=65536K) - 238 - 8.5.9 クラッシュダンプ・コアダンプ Javaアプリケーションが異常終了(プロセスが消滅)したときに、各OS上に用意されたクラッシュダンプやコアダンプを採取することによ り、異常終了の原因を調査することができる場合があります。 8.5.9.1 クラッシュダンプ ここでは、Windows(R)上で異常を調査する場合に採取する、クラッシュダンプの採取方法を説明します。 ■ワトソン博士について ワトソン博士はMicrosoft Corporationのソフトウェアで、プログラムエラーのためのデバッガです。 プログラムエラーが発生すると、ワトソン博士が自動的にログファイルにデバッグ情報を出力します。なお、ログファイル名は、 「drwtsn32.log」です。また、ログファイルの出力先は、ワトソン博士を起動して、設定することができます。 ワトソン博士の詳細は、Microsoft CorporationのWebページを参照してください。 ■ワトソン博士の設定 クラッシュダンプの採取には、Windows(R)に同梱されている「ワトソン博士」を使用します。 次の例を参考にして、「ワトソン博士」を設定してください。この設定を行うことにより、異常終了時に、自動的にクラッシュダンプが出力 されるようになります。 ワトソン博士の設定例 (Windows Server(R) 2003、Windows(R) XPの場合) 1. MS-DOSコマンドプロンプトなどで“drwtsn32 -i”コマンドを投入します。[ワトソン博士が既定のアプリケーション デバッガとしてイ ンストールされました。]のメッセージが表示されます。 2. 更に、MS-DOSコマンドプロンプトなどで、“drwtsn32”コマンドを実行します。[Windows ワトソン博士]の設定画面が表示されま すので、以下を確認してください。 - [ログファイルパス(L)]、[クラッシュダンプ(P)]が正しく指定されているか - [クラッシュダンプの種類(Y)]を[完全]と設定しているか - [すべてのスレッド コンテキストをダンプ(A)]のチェックボックスがチェックされているか - [既定のログ ファイルに追加(E)]のチェックボックスがチェックされているか - [メッセージ ボックスによる通知(U)]のチェックボックスがチェックされているか - [クラッシュ ダンプ ファイルの作成(T)]のチェックボックスがチェックされているか Windows Server(R) 2003 x64 Editionの場合 32ビットモード版のワトソン博士の環境設定を行う場合は、MS-DOSコマンドプロンプトなどで“%SystemRoot%\SysWow64\drwtsn32” コマンドを実行し、上述と同様の設定をしておく必要があります。 Windows Vista(R) SP1、Windows(R) 7、Windows Server(R) 2008、Windows Server(R) 2008 R2の場合 Windows Vista(R)、Windows(R) 7、Windows Server(R) 2008、Windows Server(R) 2008 R2ではワトソン博士の機能が提供されてい ません。 ワトソン博士の代わりにWindowsエラー報告(Windows Error Reporting(WER))の機能を使用します。 次の例を参考にして、WERを設定してください。 WERの設定例 - 239 - 1. MS-DOSコマンドプロンプトなどで“regedit”コマンドを投入し、レジストリエディタを起動します。 2. 「HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps」キーを作成します。 3. LocalDumpsキーにREG_DWORD型でDumpTypeという値を作成し、「2」を設定します。 WERに関する設定の方法については、以下の情報も参照ください。 ・ 富士通製サーバ製品の場合: http://primeserver.fujitsu.com/primergy/soft/ssupportguide/ ・ 上記製品以外の場合: http://msdn.microsoft.com/en-us/library/bb787181.aspx ■注意事項 Windows Server(R) 2003の初期版においては、ユーザダンプが出力されない問題をはじめとして、その他にもJavaの実行動作に影 響を及ぼす問題などがあります。 たとえば、次のような問題があります。 ・ http://support.microsoft.com/kb/836080/en-us ・ http://support.microsoft.com/kb/837018/en-us ・ http://support.microsoft.com/kb/841176/en-us Windows Server(R) 2003を使用する場合は、Service Pack 1以降またはHotfixを適用してください。 8.5.9.2 コアダンプ(Solaris) ここでは、Solaris上でのコアダンプ採取のための注意事項を説明します。 ■コアダンプが出力されない場合の確認 コアダンプが出力されない場合の原因として、システムリソース等の問題がまず考えられます。カレントディレクトリの書込み権、ディス ク容量、limit(1)コマンド結果を確認してください。 8.5.9.3 コアダンプ(Linux) ここでは、Linux上でのコアダンプ採取のための注意事項を説明します。 ■コアダンプが出力されない場合の確認 コアダンプが出力されない場合の原因として、システムリソース等の問題がまず考えられます。カレントディレクトリの書込み権、ディス ク容量、limit(1)コマンド結果を確認してください。 また、Linuxではハード/OSの出荷時もしくはOSのUpdate適用により、デフォルトでコアダンプの出力が設定されていない場合がありま す。以下を実施してコアダンプが出力されるようにしてください。 《コアダンプ出力設定方法》 ・ isstartコマンドでInterstageを起動させる場合 sh(bash)で"ulimit -c unlimited"コマンド実行後、Interstageを起動させます。ワークユニット起動ユーザがInterstage起動ユーザと違う場 合は、ワークユニット起動前に"ulimit -c unlimited"コマンドを実行してから、ワークユニットを起動させます。 ・ RCプロシジャでOS起動時に自動的にInterstageが起動するように設定されている場合 以下の方法を実施することで、OS再起動後にcoreが出力されるようになります。 - 240 - /etc/init.d/functionsファイルに、 # make sure it doesn't core dump anywhere; while this could mask # problems with the daemon, it also closes some security problems ulimit -S -c 0 >/dev/null 2>&1 または、 ulimit -S -c ${DAEMON_COREFILE_LIMIT:-0} >/dev/null 2>1 と記述されていますので、上記の設定で"0"を、"unlimited"に変更してください。 ulimit -S -c unlimited >/dev/null 2>&1 /etc/rc2.d/S99startisに、以下の<---の記述を追加してください。 #!/bin/sh# Interstage Application Server # S99starttis : Interstage Application Server start procedure OD_HOME=/opt/FJSVod export OD_HOME ulimit -c unlimited <--- /opt/FJSVod/bin/odalive > /dev/null while [ "$?" != "0" ] do sleep 1 /opt/FJSVod/bin/odalive > /dev/null done /opt/FJSVtd/bin/isstart 8.5.10 JNI処理異常時のメッセージ出力 Java以外の言語と連携する場合、Java Native Interface(JNI)を使用します。 しかし、JNIの使用方法を誤ると、Javaプロセスの終了(異常終了)などの原因となります。 このとき、図1のオプションを指定することにより、JNI処理で異常が発生した場合にメッセージが出力されますので、JNIのパラメーター などの確認に活用してください。 図1 JNI処理異常時にメッセージを出力するオプション -Xcheck:jni 上記の“-Xcheck:jni”パラメーターを指定したときに、図2のメッセージが出力されることがあります。 図2 JNI処理異常時に出力されるメッセージ FATAL ERROR in native method: (詳細メッセージ) “(詳細メッセージ)”の部分には、以降で説明する文字列が出力されます。 以降、図2の“詳細メッセージ”が出力される例と注意事項を説明します。 以降の説明を参考にして、JNIの処理部分を見直してください。 ■メッセージの説明 JNI received a class argument that is not a class [異常例] char buf[1]; (*env)->AllocObject(env, (jclass)buf); //jclass型の第2引数に違う型を指定 - 241 - JNI received a null class [異常例] (*env)->AllocObject(env, NULL); //jclass型の第2引数にnullを指定 JNI string operation received a non-string [異常例] (*env)->GetStringUTFChars(env, NULL, 0); //jstring型の第2引数にNULLを指定 Non-array passed to JNI array operations [異常例] (*env)->GetArrayLength(env, (jarray)(*env)->NewStringUTF(env, "abc")); //jarray型の第2引数に配 列でない型を指定 [注意事項] 次の場合は、“-Xcheck:jni”オプションによるメッセージは出力されません。 char buf[1]; (*env)->GetArrayLength(env, (jarray)buf); Static field ID passed to JNI [異常例] jclass cls = (*env)->GetObjectClass(env, obj); jfieldID fid = (*env)->GetFieldID(env, cls, "static_data", "I"); (*env)->GetIntField(env, obj, fid); // jfieldID型の第3引数にstaticフィールドを指定 Null object passed to JNI [異常例] jclass cls = (*env)->GetObjectClass(env, obj); jfieldID fid = (*env)->GetFieldID(env, cls, "instance_data", "I"); (*env)->GetIntField(env, NULL, fid); //object型の第2引数にNULLを指定 [注意事項] instance変数かどうかのチェック時のみに出力されるメッセージです。 次の場合は、“-Xcheck:jni”オプションによるメッセージは出力されません。 (*env)->GetObjectClass(env, NULL); //objectの第2引数にNULLを指定 Wrong field ID passed to JNI [異常例] (*env)->GetIntField(env, obj, -1); //jfieldID型の第3引数に数値を指定 [注意事項] instance変数かどうかのチェック時のみに出力されるメッセージです。 Non-static field ID passed to JNI [異常例] jclass cls = (*env)->GetObjectClass(env, obj); (*env)->GetStaticIntField(env, cls, -1); //jfiedlID型第2引数に数値を指定 - 242 - [注意事項] 次の場合は、“-Xcheck:jni”オプションによるメッセージは出力されません。 jclass cls = (*env)->GetObjectClass(env, obj); jfieldID fid = (*env)->GetStaticFieldID(env, cls, "instance_data", "I"); (*env)->GetStaticIntField(env, cls, fid); Array element type mismatch in JNI [異常例] jintArray intarray = (*env)->NewIntArray(env, 2); (*env)->GetFloatArrayElements(env, intarray, 0); //floatArray型の第2引数にjintArrayを指定 Object array expected but not received for JNI array operation [異常例] jclass cls = (*env)->GetObjectClass(env, obj); jobjectArray objarray = (*env)->NewObjectArray(env, 1, cls, obj); (*env)->GetIntArrayElements(env, objarray, 0); //intArray型の第2引数にjobjectArray型を指定 Field type (static) mismatch in JNI get/set field operations [異常例] jclass cls = (*env)->GetObjectClass(env, obj); jfieldID fid = (*env)->GetStaticFieldID(env, cls, "static_data", "I"); (*env)->GetStaticFloatField(env, cls, fid); //GetStaticFloatFieldではなくGetStaticIntFieldでなければ ならない Field type (instance) mismatch in JNI get/set field operations [異常例] jclass cls = (*env)->GetObjectClass(env, obj); jfieldID fid = (*env)->GetFieldID(env, cls, "instance_data", "I"); (*env)->GetFloatField(env, obj, fid); //GetFloatFieldではなくGetIntFieldでなければならない Wrong static field ID passed to JNI [異常例] jclass cls = (*env)->GetObjectClass(env, obj); jclass cls2 = (*env)->GetObjectClass(env, (*env)->NewStringUTF(env, "abc")); jfieldID fid = (*env)->GetStaticFieldID(env, cls, "static_data", "I"); (*env)->GetStaticObjectField(env, cls2, fid); //第2引数はcls2ではなくclsでなければならない Using JNIEnv in the wrong thread [解説] 実行しているスレッドのためのものではないJNIEnvを使用したためのエラーです。 Java VMは、JNIインタフェースポインタ(JNIEnv)が参照する領域を、スレッド固有のデータ領域に割り当てることがあります。この ため、JNIインタフェースポインタは、カレントスレッドに対してのみ有効です。ネイティブメソッドは、JNIインタフェースポインタを別の スレッドに渡すといった使い方はできません。 JNI call made with exception pending [解説] - 243 - ネイティブプログラムで何らかの例外が発生後、その例外を処理せずに引き続きJNI関数を実行したためのエラーです。 ネイティブプログラムでJNI関数を呼び出した後は、その都度ExceptionOccurredを使用して例外の発生状況をチェックし、必要に 応じて、例外のクリア、または、例外を上位メソッドへスローしてください。 8.6 異常発生時の原因振り分け 本項では、異常が発生したときに、原因を振り分ける方法を説明します。 8.6.1 java.lang.OutOfMemoryErrorがスローされた場合 本節では、OutOfMemoryErrorがスローされた場合、考えられる原因とその対処方法を説明します。 なお、OutOfMemoryErrorがスローされた場合に出力されるメッセージ情報については、“8.6.1.1 メモリ領域不足事象発生時のメッ セージ出力機能の強化”も参照してください。 ■想定される原因(メモリリーク) VMがガーベジコレクションを繰り返しても、時間の経緯とともにメモリ消費量が増大していく場合、プログラム中メモリリークを起こして いる可能性があります。 メモリリークの結果、Javaのヒープ不足が発生しOutOfMemoryErrorがスローされる場合があります。 この場合、ガーベジコレクションのログを採取して、Javaヒープの消費状況を確認してください。ガーベジコレクションのログを採取す る方法は、“8.2.7 ガーベジコレクションのログ出力”を参照してください。 ■想定される原因(Javaヒープ不足) 通常、OutOfMemoryErrorは、Javaヒープ不足が原因でスローされます。 ガーベジコレクションのログを採取して、Javaヒープの消費状況を確認してください。 Javaヒープの空き容量がないことが確認されたら、Javaヒープをチューニングしてください。 ガーベジコレクションのログを採取する方法は、“8.2.7 ガーベジコレクションのログ出力”を参照してください。 Javaヒープのチューニング方法は、“8.4.1 Javaヒープのチューニング”を参照してください。 ■想定される原因(ユーザ空間不足) 多量のスレッドを生成して、多量のスタックがユーザ空間内に割り当てられ、ユーザ空間不足になった場合、次のOutOfMemoryError がスローされる、あるいはエラーメッセージとして表示を行いプロセスが終了します。 java.lang.OutOfMemoryError: unable to create new native thread また、JavaヒープやOSの仮想メモリに余裕があるにもかかわらず、ユーザ空間内にメモリを確保できなかった場合、次の OutOfMemoryErrorが出力されプログラムが終了します。 java.lang.OutOfMemoryError: requested サイズ bytes 制御名. Out of swap space? サイズ: 確保できなかったメモリの大きさ 制御名: メモリが確保できなかったJava VMの制御名(該当情報がある場合にだけ表示) ユーザ空間が不足している場合は、Javaヒープまたはスタックのサイズを小さくするなどのチューニングを行ってください。 スタックのサイズをチューニングする方法は、“8.4.2 スタックのチューニング”を参照してください。 Javaヒープのチューニング方法は、“8.4.1 Javaヒープのチューニング”を参照してください。 なお、仮想メモリに余裕がある場合は、Javaプロセスを複数起動して、プロセス多重度を上げる方法もあります。J2EEアプリケーション またはJavaEEアプリケーションの場合、J2EEまたはJavaEEのチューニングを行ってください。J2EEまたはJavaEEのチューニング方法の 詳細は、それぞれのマニュアルを参照してください。 - 244 - ■想定される原因(仮想メモリ不足) 仮想メモリが不足してスレッドが生成できない場合、次のOutOfMemoryErrorがスローされる、あるいはエラーメッセージとして表示 を行いプロセスが終了します。 java.lang.OutOfMemoryError: unable to create new native thread また、OSの仮想メモリが不足した場合、次のOutOfMemoryErrorが出力されプログラムが終了します。 java.lang.OutOfMemoryError: requested サイズ bytes 制御名. Out of swap space? サイズ: 確保できなかったメモリの大きさ 制御名: メモリが確保できなかったJava VMの制御名(該当情報がある場合にだけ表示) 仮想メモリが不足した場合は、他の不要なプロセスを終了して仮想メモリに余裕を持たせるか、物理メモリ(RAM)またはスワップファイ ルを拡張して仮想メモリを増やすようにチューニングを行ってください。 ■想定される原因(ガーベジコレクション処理の実行抑止) ガーベジコレクション処理(GC処理)の実行抑止により、クリティカルセクション状態時にOutOfMemoryErrorがスローされた場合は、 必要に応じて、GC処理の実行抑止による影響ができるだけ小さくなるように、実行するアプリケーションの処理内容を見直してください (アプリケーション処理内の、GC処理の実行抑止に関係する機能の利用見直しを行ってください)。 GC処理の実行抑止については、“8.2.1 FJVMでサポートされるガーベジコレクション処理”を参照してください。 なお、Javaヒープのチューニングにより、GC処理の実行抑止によるOutOfMemoryErrorの発生が緩和できる場合があります。 ・ クリティカルセクション状態時に、ネイティブプログラムからJNIを利用してJavaのオブジェクトの生成要求を行っていないアプリケー ションの場合は、Old世代領域を大きくする(メモリ割り当てプール全体を大きくする)チューニングで、GC処理の実行抑止による OutOfMemoryErrorの発生が緩和できる場合があります。 ・ クリティカルセクション状態時に、ネイティブプログラムからJNIを利用してJavaのオブジェクトの生成要求を行っているアプリケーショ ンの場合は、New世代領域を大きくするチューニングで、GC処理の実行抑止によるOutOfMemoryErrorの発生が緩和できる場 合があります。 ガーベジコレクションのログを採取する方法は、“8.2.7 ガーベジコレクションのログ出力”を参照してください。 Javaヒープのチューニング方法は、“8.4.1 Javaヒープのチューニング”を参照してください。 GC処理の実行抑止により、クリティカルセクション状態でOutOfMemoryErrorがスローされたかどうかは、“メモリ領域不足事象発生 時のメッセージ出力機能の強化”で出力されるメッセージを参照して判断してください。 また、EXTP4435メッセージまたはISJEE_OM1018メッセージが出力されている場合は、IJServerのコンテナ情報ログ(info.log)および IJServerクラスタのJava VMログ(jvm.log)に出力される「Java VMのヒープ域不足の詳細情報」を参照して判断してください。 8.6.1.1 メモリ領域不足事象発生時のメッセージ出力機能の強化 FJVMでは、メモリ領域不足事象発生時に出力されるメッセージ情報の強化を行なっています。 これによりFJVMでは、メモリ領域不足事象が発生した場合に、java.lang.OutOfMemoryErrorの例外メッセージ情報に加え、不足した 領域の種別情報を図1の形式で出力します。 図1 メモリ領域不足事象が発生した場合に出力される不足した領域の種別情報 The memory was exhausted area_name Java heap size / max Java heap size = heap_size / max_heap_size Java perm size / max Java perm size = perm_size / max_perm_size area_name: メモリ領域不足事象が発生した領域の名前や領域不足となったオブジェクトの要 求サイズ(不足領域情報)を表示します。 不足領域情報としては以下の項目があります。 - 245 - ・ on Java heap space. : requested <NNNN> bytes NNNNバイトのオブジェクト生成要求において、メモリ割り当てプール(New世 代領域またはOld世代領域)に対してメモリ領域不足事象が発生した場合です。 なお、JDK/JRE 5.0、6のエルゴノミクス機能によるメモリ領域不足事象の検出 機能が有効な場合で、かつ当該機能によりメモリ領域不足事象を検出した場 合、この項目になる場合があります。 ・ on Java heap space. : requested <NNNN> bytes (in critical section) 意味は「on Java heap space. : requested <NNNN> bytes」と同じですが、メモ リ領域不足事象発生時、クリティカルセクション状態でGC処理の実行が抑止 されていたことを示しています。 ・ on Java perm space. : requested <NNNN> bytes NNNNバイトのオブジェクト生成要求において、Permanent世代領域に対して メモリ領域不足事象が発生した場合です。 なお、JDK/JRE 5.0、6のエルゴノミクス機能によるメモリ領域不足事象の検出 機能が有効な場合で、かつ当該機能によりメモリ領域不足事象を検出した場 合、この項目になる場合があります。 ・ on Java perm space. : requested <NNNN> bytes (in critical section) 意味は「on Java perm space. : requested <NNNN> bytes」と同じですが、メモ リ領域不足事象発生時、クリティカルセクション状態でGC処理の実行が抑止 されていたことを示しています。 ・ (なし) スタックやヒープなど、Javaヒープ以外の領域に対してメモリ領域不足事象が 発生した場合です。特にjava.lang.OutOfMemoryErrorの例外メッセージ情報 が“java.lang.OutOfMemoryErrorがスローされた場合”の「ユーザ空間不足」ま たは「仮想メモリ不足」の場合に出力される形式の場合は、スタックやヒープな ど、Javaヒープ以外の領域に対してメモリ領域不足事象が発生した場合と断定 できます。 またはJavaアプリケーション実行時における配列生成式の評価の段階で、配 列オブジェクトの長さ(配列要素の数)から、当該配列オブジェクトを割り当て るための領域が十分でないと評価された場合(配列の長さ(配列要素の数)が 大きすぎ、配列オブジェクトとしての大きさが2ギガバイト程度もしくはそれ以上 の大きさになる配列の定義がある場合)。 またはクラスのロード処理でメモリ不足が発生した場合。 なお、JDK/JRE 6のエルゴノミクス機能によるメモリ領域不足事象の検出機能 が有効な場合で、かつ当該機能によりメモリ領域不足事象を検出した場合、こ の項目になる場合があります。 heap_size: メモリ領域不足事象が発生した際に使用中となっているメモリ割り当てプールのサ イズ(単位:byte)。 max_heap_size: 利用可能なメモリ割り当てプールの最大サイズ(単位:byte)。 perm_size: メモリ領域不足事象が発生した際に使用中となっているPermanent世代領域のサ イズ(単位:byte)。 max_perm_size: 利用可能なPermanent世代領域の最大サイズ(単位:byte)。 メモリ領域不足事象が発生した際に出力される各領域の使用中サイズ(heap_size、perm_size)には、メモリ領域不足の原因となったオ ブジェクトの大きさは含まれません。 そのため巨大サイズのオブジェクト生成要求などによりメモリ領域不足事象が発生した場合には、「最大サイズ」と「使用中サイズ」の 差が大きい場合(空き領域がたくさんあるように見える場合)がありますので注意してください。 - 246 - FJGC以外のGC処理におけるNewGC処理では、New世代領域を「eden space」、「from space」および「to space」の3つの内部領域に 細分割し、当該領域上において、一般に世代別GC制御と言われる制御方法を用いて、Javaアプリケーションが生成要求したオブジェ クトを管理・制御しています。 このうち、「from space」および「to space」は、Java VMがNewGC処理を行う際の作業域的な役割を持つ領域となっています。そのた め、「from space」および「to space」の各領域が占める大きさのうち、Javaアプリケーションからのオブジェクト生成要求のために使用され る大きさは、その領域の一部分だけとなります。 そのため、FJGC以外のGC処理を使用している場合は、出力データにおいて、メモリ割り当てプールやNew世代領域に空きがあるよ うに見える場合であっても、実際には空きがない場合がありますので注意してください(空きがあるように見える場合であっても、その差 は、NewGC処理用の作業域的な役割で使用済となっている場合があります)。 メモリ割り当てプールに対してメモリ領域不足事象が発生した場合に出力されるheap_sizeの値は、New世代領域での使用中サイズと Old世代領域での使用中サイズの合計値です。 New世代領域とOld世代領域は別々のオブジェクト格納域として管理・制御されますから、max_heap_sizeとheap_sizeの差の大きさが、 そのまま生成要求できるオブジェクトの最大サイズにはなりませんので注意してください。 図2 メモリ領域不足事象が発生した場合に出力されるメッセージ出力例 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space The memory was exhausted on Java heap space. : requested 4016 bytes Java heap size / max Java heap size = 495974032 / 536870912 Java perm size / max Java perm size = 1678376 / 67108864 図2の出力例の場合、4016バイトのオブジェクト生成要求において、メモリ割り当てプールに対してメモリ領域不足が発生したことを確 認することができます。 8.6.2 EXTP4435メッセージまたはISJEE_OM1018メッセージが出力された場合 Interstage Application Server配下のJavaアプリケーション実行時において、以下のメッセージが出力された場合は、メモリ領域不足事 象が原因による異常となります。 Javaヒープをチューニングしてください。 Javaヒープのチューニング方法は、“8.4.1 Javaヒープのチューニング”を参照してください。 ・ EXTP4435メッセージ ・ ISJEE_OM1018メッセージ 各メッセージの内容については、“メッセージ集”を参照してください。 なお、IJServerのコンテナ情報ログ(info.log)およびIJServerクラスタのJava VMログ(jvm.log)に出力される「Java VMのヒープ域不足の 詳細情報」の出力形式は、図1のとおりです。 図1 Java VMのヒープ域不足の詳細情報の出力形式 -----------------------------------------------------------------OutOfMemory Log -----------------------------------------------------------------pid=process_id heap_type=heap_type_code heap_size=heap_size - 247 - max_heap_size=max_heap_size perm_size=perm_size max_perm_size=max_perm_size requested_size=requested_size -----------------------------------------------------------------VM is terminated by occurred OutOfMemoryError on heap_type. stack_trace process_id: メモリ領域不足事象が発生したJavaプロセスのプロセス番号。 heap_type_code: メモリ領域不足事象が発生した領域に対応する番号です。表示される番号に ついては、heap_typeの説明を参照してください。 heap_size: メモリ領域不足事象が発生した際に使用中となっているメモリ割り当てプール のサイズ(単位:byte)。 max_heap_size: 利用可能なメモリ割り当てプールの最大サイズ(単位:byte)。 perm_size: メモリ領域不足事象が発生した際に使用中となっているPermanent世代領域 のサイズ(単位:byte)。 max_perm_size: 利用可能なPermanent世代領域の最大サイズ(単位:byte)。 requested_size: 領域不足となったオブジェクトの要求サイズ(単位:byte)。 heap_type: 不足領域情報(メモリ領域不足事象が発生した領域の名前など)を表示します。 不足領域情報としては以下の項目があります。 ・ Java heap requested_sizeバイトのオブジェクト生成要求において、メモリ割り当てプー ル(New世代領域またはOld世代領域)に対してメモリ領域不足事象が発 生した場合です。 この項目のときのheap_type_codeは「1」になります。 なお、JDK/JRE 5.0、6のエルゴノミクス機能によるメモリ領域不足事象の検 出機能が有効な場合で、かつ当該機能によりメモリ領域不足事象を検出 した場合、この項目になる場合があります。 ・ Java heap in critical section 意味は「Java heap」と同じですが、メモリ領域不足事象発生時、クリティカ ルセクション状態でGC処理の実行が抑止されていたことを示しています。 ・ Java Perm requested_sizeバイトのオブジェクト生成要求において、Permanent世代領 域に対してメモリ領域不足事象が発生した場合です。 この項目のときのheap_type_codeは「2」になります。 なお、JDK/JRE 5.0、6のエルゴノミクス機能によるメモリ領域不足事象の検 出機能が有効な場合で、かつ当該機能によりメモリ領域不足事象を検出 した場合、この項目になる場合があります。 ・ Java Perm space in critical section 意味は「Java Perm」と同じですが、メモリ領域不足事象発生時、クリティカ ルセクション状態でGC処理の実行が抑止されていたことを示しています。 ・ C heap 制御情報 スタックやヒープなど、Javaヒープ以外の領域に対してメモリ領域不足事象 が発生した場合(requested_sizeバイトのメモリ割り当て要求が失敗した場 合)です。 この項目のときのheap_type_codeは「0」になります。 なお、現象発生時の要求サイズが不明な場合のrequested_sizeは「0」に なります。 また、次行に制御情報(メモリが確保できなかったJava VM制御の情報)が 出力される場合があります。 - 248 - ・ unknown space Javaアプリケーション実行時における配列生成式の評価の段階で、配列 オブジェクトの長さ(配列要素の数)から、当該配列オブジェクトを割り当て るための領域が十分でないと評価された場合(配列の長さ(配列要素の 数)が大きすぎ、配列オブジェクトとしての大きさが2ギガバイト程度もしく はそれ以上の大きさになる配列の定義がある場合)。 またはクラスのロード処理でメモリ不足が発生した場合。 なお、JDK/JRE 6のエルゴノミクス機能によるメモリ領域不足事象の検出機 能が有効な場合で、かつ当該機能によりメモリ領域不足事象を検出した 場合、この項目になる場合があります。 この項目のときのheap_type_codeは「-1」になります。 なお、この項目の場合のrequested_sizeは「0」になります。 stack_trace: メモリ領域不足事象が発生したスレッドがJavaアプリケーションを実行している スレッドだった場合は、当該スレッドのスタックトレースが出力されます。それ以 外のスレッドの場合、またはリソース不足によりスタック情報が取り出せない場 合は、スタックトレースは出力されません。 メモリ領域不足事象が発生した際に出力される各領域の使用中サイズ(heap_size、perm_size)には、メモリ領域不足の原因となったオ ブジェクトの大きさは含まれません。 そのため巨大サイズのオブジェクト生成要求などによりメモリ領域不足事象が発生した場合には、「最大サイズ」と「使用中サイズ」の 差が大きい場合(空き領域がたくさんあるように見える場合)がありますので注意してください。 FJGC以外のGC処理におけるNewGC処理では、New世代領域を「eden space」、「from space」および「to space」の3つの内部領域に 細分割し、当該領域上において、一般に世代別GC制御と言われる制御方法を用いて、Javaアプリケーションが生成要求したオブジェ クトを管理・制御しています。 このうち、「from space」および「to space」は、Java VMがNewGC処理を行う際の作業域的な役割を持つ領域となっています。そのた め、「from space」および「to space」の各領域が占める大きさのうち、Javaアプリケーションからのオブジェクト生成要求のために使用され る大きさは、その領域の一部分だけとなります。 そのため、FJGC以外のGC処理を使用している場合は、出力データにおいて、メモリ割り当てプールやNew世代領域に空きがあるよ うに見える場合であっても、実際には空きがない場合がありますので注意してください(空きがあるように見える場合であっても、その差 は、NewGC処理用の作業域的な役割で使用済となっている場合があります)。 メモリ割り当てプールに対してメモリ領域不足事象が発生した場合に出力されるheap_sizeの値は、New世代領域での使用中サイズと Old世代領域での使用中サイズの合計値です。 New世代領域とOld世代領域は別々のオブジェクト格納域として管理・制御されますから、max_heap_sizeとheap_sizeの差の大きさが、 そのまま生成要求できるオブジェクトの最大サイズにはなりませんので注意してください。 図2 Java VMのヒープ域不足の詳細情報の出力例 【JDK/JRE 5.0の場合】 -------------------------------------------------------------------------------OutOfMemory Log -------------------------------------------------------------------------------pid=4636 heap_type=1 heap_size=136816 - 249 - max_heap_size=4194304 perm_size=1811104 max_perm_size=67108864 requested_size=40000016 -------------------------------------------------------------------------------VM is terminated by occurred OutOfMemoryError on Java heap. "main" prio=6 tid=0x00036840 nid=0x254 runnable [0x0007f000..0x0007fbf8] at test.<init>(test.java:10) at test.main(test.java:5) 【JDK/JRE 6の場合】 -------------------------------------------------------------------------------OutOfMemory Log -------------------------------------------------------------------------------pid=4696 heap_type=1 heap_size=136800 max_heap_size=6291456 perm_size=2052320 max_perm_size=67108864 requested_size=40000016 -------------------------------------------------------------------------------VM is terminated by occurred OutOfMemoryError on Java heap. "main" prio=6 tid=0x00307000 nid=0x12a8 runnable [0x0092f000] java.lang.Thread.State: RUNNABLE at test.<init>(test.java:10) at test.main(test.java:5) JDK/JRE 6からスタックトレース情報にスレッドの状態を表す情報(トレース情報の前の行)が表示されるようになりました。 図中の例では「java.lang.Thread.State: RUNNABLE」となっていますが、"RUNNABLE"の部分が、"NEW"、"TIMED_WAITING (sleeping)"、"WAITING (on object monitor)"、"TIMED_WAITING (on object monitor)"、"WAITING (parking)"、"TIMED_WAITING (parking)"、"BLOCKED (on object monitor)"、"TERMINATED"、"UNKNOWN"などの表示の場合があります。 8.6.3 java.lang.StackOverflowErrorがスローされた場合 StackOverflowErrorがスローされた場合、スタックオーバーフローが原因です。 スタックのサイズをチューニングしてください。 スタックのチューニング方法は、“8.4.2 スタックのチューニング”を参照してください。 なお、StackOverflowErrorがスローされず、そのままJavaプロセスが異常終了する場合もあります。 その場合の解析方法については、“8.6.3.1 スタックオーバーフロー検出時のメッセージ出力機能”を参照してください。 8.6.3.1 スタックオーバーフロー検出時のメッセージ出力機能 Javaプロセスが不当なメモリアクセスにより異常終了した場合の原因の1つとして、スレッドに対するスタックのサイズ不足、すなわちス タックオーバーフローの発生が考えられます。 FJVMでは、スタックオーバーフローが原因と考えられる不当なメモリアクセスによりJavaプロセスが異常終了した場合、その旨を原因 調査情報としてFJVMログへ出力する機能を、「スタックオーバーフロー検出時のメッセージ出力機能」として実装しています。 FJVMログの見方については、“8.5.8 FJVMログ”を参照してください。 スタックオーバーフロー発生の原因が、Java APIで生成されたスレッドに対するスタックのサイズにある場合は、“8.4.2 スタックのチュー ニング”を参照して、Java APIで生成されるスレッドに対するスタックのサイズをチューニングしてください。 - 250 - 検出対象となるスレッド 本機能でスタックオーバーフローの検出対象となるスレッドは、原則Java APIで生成されたスレッドです。 次のスレッドは、本機能による検出対象スレッドとはなりません。 ・ ネイティブモジュールからOSのAPIを直接使用して生成されたスレッド ・ mainメソッドを実行するスレッド(Java APIで生成されたスレッドではないため) スタックオーバフローの検出には、OSの機能を利用しています。ご使用中のOSがWindowsの場合は、上記スレッドの場合であっ ても、そのスレッドで実行されるJavaメソッドの中から呼び出されたネイティブメソッド内で直接発生したスタックオーバーフローにつ いては、本機能による検出の対象となります。 注意事項 スタックオーバーフローが発生しても、OS側からFJVM側の処理へ制御が渡らないことがあります。その場合はFJVMログが出力され ません。 OSの制御処理がワトソン博士へ直接例外制御を渡した場合には、ワトソン博士が出力するログファイルを確認してください。ワトソン 博士の説明は、“8.5.9.1 クラッシュダンプ”を参照してください。 なお、スタックオーバーフロー発生時のスタック残量が少ない場合には、以下の状態でJavaアプリケーションが終了する場合があるの で注意してください。 ・ 以下のメッセージが標準出力へ出力されただけで、FJVMログが出力されないままJavaアプリケーションが終了してしまうことがあります。 スタックオーバーフロー検出に関するFJVMログが出力されない場合であっても、以下のメッセージが出力された場合は、スタック オーバーフローが発生したことを示します。 An unrecoverable stack overflow has occurred. ・ スタックオーバーフロー発生例外に対する制御が、OS側からFJVM側の処理およびワトソン博士のどちらにも渡らず、そのままJava アプリケーションが終了してしまうことがあります。 その場合は、スタックオーバーフロー発生を検出することができません。 8.6.4 SIGBUS発生により異常終了した場合 Solaris上で実行しているプロセスが、以下の状態のSIGBUS発生により異常終了した場合は、システムのメモリ資源/スワップ不足に より発生した異常終了です。 signal no : 10(SIGBUS) signal code : 3(BUS_OBJERR) signal error: 12(ENOMEM) そして、Javaプロセスが異常終了した場合に出力されるFJVMログにおいて、以下の情報が出力されている場合が、上記状態に相当 します。 siginfo:si_signo=10, si_errno=12, si_code=3, si_addr=16進数 異常終了時の情報として上記情報が出力された場合は、不要なプロセスを終了して仮想メモリに余裕を持たせるか、物理メモリ(RAM) またはスワップファイルを拡張して仮想メモリを増やすようにチューニングを行ってください。 8.6.5 プロセスが消滅(異常終了)した場合 本節では、何の痕跡も残さずに突然プロセスが消滅した場合に、考えられる原因とその対処方法を説明します。 ■想定される原因(スタックオーバーフロー) FJVMには、スタックオーバーフロー検出時にメッセージを出力する機能を備えています。FJVMログを分析することにより、スタック オーバーフローが発生したかどうかを確認することができます。FJVMログの分析方法は、“8.6.3.1 スタックオーバーフロー検出時のメッ セージ出力機能”を参照してください。 - 251 - スタックオーバーフローが発生したことを確認できた場合、該当するスタックのサイズをチューニングしてください。スタックのチューニ ング方法は、“8.4.2 スタックのチューニング”を参照してください。 通常、スタックオーバーフローが発生した場合、java.lang.StackOverflowErrorがスローされ、ワトソン博士が検知してユーザダンプお よびワトソンログを出力します。 しかし、OSが高負荷状態になったり、スタックオーバーフロー発生時のスタック残量が少なかったりすると、OSからFJVMにもワトソン 博士にも制御が渡らないまま、痕跡を残さずにプロセスが消滅することがあります。 したがって、プロセスが消滅した原因が不明な場合は、スタックのサイズを拡張して、現象が改善できるかどうかを確認してください。 スタックのサイズを拡張しても改善できない場合は、別の原因を調査してください。 なお、ワトソン博士の説明は、“8.5.9.1 クラッシュダンプ”を参照してください。 ■想定される原因(長時間コンパイル処理の検出機能による終了) FJVMの“長時間コンパイル処理の検出機能”による終了の可能性があります。 詳細は、“8.3.2 長時間コンパイル処理の検出機能”を参照してください。 Javaアプリケーションを“-XX:CompileTimeout”オプション付きで起動した場合は、標準出力にFJVMからのメッセージが出力されてい ないかどうかを確認してください。 ■想定される原因(シグナルハンドラ) Java VM以外のモジュールで、シグナルハンドラを登録した場合、Javaアプリケーションが正常に動作せずに、異常終了することがあ ります。詳細は、“8.5.8.2 異常終了時のシグナルハンドラ情報 ”を参照してください。 FJVMを使用している場合は、FJVMログにシグナルハンドラ情報が出力されますので、それを確認してください。 ■想定される原因(JNI処理の異常) JNI経由でJava以外の言語で開発したネイティブモジュールと連携する際、JNIの使用方法を誤ると、プロセス消滅の原因となります。 このようなときは、“-Xcheck:jni”オプションを指定して、JNI処理でメッセージが出力されないかどうかを確認してください。“-Xcheck:jni” オプションの詳細は、“8.5.10 JNI処理異常時のメッセージ出力”を参照してください。 JNI処理に誤りがなくても、ネイティブモジュールで異常終了またハングアップが発生すると、Javaアプリケーションのプロセスが消滅 する場合があります。たとえば、スレッドアンセーフな関数を使用している場合は、注意が必要です。 スレッドアンセーフな関数の例 次の関数を使用したときに、障害が発生した事例があります。 ・ vfork ■想定される原因(プログラムによる終了) Javaプロセスが、特別なメッセージ出力などがないまま、予想外の状態で終了した場合、原因の1つとして、次のいずれかが考えられ ます。 ・ java.lang.Runtime.exit()を予想外の箇所で実行した ・ java.lang.Runtime.halt()を予想外の箇所で実行した ・ java.lang.System.exit()を予想外の箇所で実行した FJVMを使用している場合は、“8.5.6 Java VM終了時における状態情報のメッセージ出力機能”を参照して、対処してください。 ■想定される原因(Windows Server(R) 2003の問題) - 252 - Windows Server(R) 2003の初期版においては、ユーザダンプが出力されない問題をはじめとして、その他にもJavaの実行動作に影 響を及ぼす問題などがあります。 たとえば、次のような問題があります。 ・ http://support.microsoft.com/kb/836080/en-us ・ http://support.microsoft.com/kb/837018/en-us ・ http://support.microsoft.com/kb/841176/en-us Windows Server(R) 2003を使用する場合は、Service Pack 1以降またはHotfixを適用してください。 8.6.6 ハングアップ(フリーズ)した場合 本節では、Javaプロセスが残っているにもかかわらず、プログラムが無応答になった場合、考えられる原因とその対処方法を説明しま す。 ■想定される原因(デッドロック) デッドロックが発生した場合、そのスレッドが停止されます。 ハングアップしたときに、スレッドダンプを採取して、デッドロックがないかどうかを確認してください。 スレッドダンプの採取方法および解析方法の詳細は、“8.5.3 スレッドダンプ”を参照してください。 ■想定される原因(ガーベジコレクション) ガーベジコレクションが発生すると、ガーベジコレクションが終了するまでの間、Javaアプリケーションのすべてのスレッドが停止されます。 これにより、Javaアプリケーションがハングアップしたかのように見える場合があります。 ガーベジコレクションのログを採取して、ガーベジコレクションが動作したタイミングを照合してください。ガーベジコレクションが原因で 無応答のような現象になる場合は、Javaヒープをチューニングして、ガーベジコレクションの動作具合を改善してください。 ガーベジコレクションのログを採取する方法は、“8.2.7 ガーベジコレクションのログ出力”を参照してください。 Javaヒープのチューニング方法は、“8.4.1 Javaヒープのチューニング”を参照してください。 ■想定される原因(JNI処理の異常) JNI経由でJava以外の言語で開発したネイティブモジュールと連携する際、JNIの使用方法を誤ると、ハングアップの原因となります。 このようなときは、“-Xcheck:jni”オプションを指定して、JNI処理でメッセージが出力されないかどうかを確認してください。“-Xcheck:jni” オプションの詳細は、“8.5.10 JNI処理異常時のメッセージ出力”を参照してください。 JNI処理に誤りがなくても、JNIモジュールで異常終了またハングアップが発生すると、Javaアプリケーションがハングアップする場合が あります。たとえば、スレッドアンセーフな関数を使用している場合は、注意が必要です。 スレッドアンセーフな関数の例 次の関数を使用したときに、ハングした事例があります。 ・ vfork 8.6.7 スローダウンが発生した場合 本節では、Javaアプリケーションの動きが遅くなる現象(スローダウン)が発生した場合に、考えられる原因とその対処方法を説明しま す。 ■想定される原因(ガーベジコレクション) ガーベジコレクションが発生すると、ガーベジコレクションが終了するまでの間、Javaアプリケーションのすべてのスレッドが停止されま す。このため、Javaアプリケーションのレスポンス(応答)が遅くなる場合があります。 - 253 - ガーベジコレクションのログを採取して、ガーベジコレクションが動作したタイミングとスローダウンが発生したタイミングを照合してくだ さい。ガーベジコレクションが原因でスローダウンになる場合は、Javaヒープをチューニングして、ガーベジコレクションの動作具合を改 善してください。 ガーベジコレクションのログを採取する方法は、“8.2.7 ガーベジコレクションのログ出力”を参照してください。 Javaヒープのチューニング方法は、“8.4.1 Javaヒープのチューニング”を参照してください。 スローダウンの事例 同じソフトウェアとJavaアプリケーションが動作している複数のWebサーバのうち、一部のサーバだけがスローダウンしたという事例が あります。この原因は、マシンに搭載されている物理メモリ(RAM)の容量の違いでした。 物理メモリ(RAM)が少ないマシンの場合、ガーベジコレクションの実行に伴い、ディスクのスワッピングが発生し、スローダウンすること があります。 8.7 Javaツール機能 本製品では、Javaプログラムのチューニングやトラブルシューティングに有用なツールを提供しています。ツールには、次の3つがあり ます。 ・ メソッドのトレースを出力するメソッドトレース機能 ・ Javaヒープ使用量を出力するjheap ・ スレッドダンプを出力するスレッドダンプツール(Windows(R)のみ) ツール本体は、次に格納してあります。 ・ JDK 5.0使用時: [Interstageインストールフォルダ]\jdk5\tools ・ JRE 5.0使用時: [Interstageインストールフォルダ]\jre5\tools ・ JDK 6使用時 : [Interstageインストールフォルダ]\jdk6\tools ・ JRE 6使用時 : [Interstageインストールフォルダ]\jre6\tools 以下の“$DIR”はインストール時に指定する相対ディレクトリ名です。“$DIR”のシステム推奨名は“opt”です。 ・ JDK 5.0使用時: /$DIR/FJSVawjbk/jdk5/tools ・ JRE 5.0使用時: /$DIR/FJSVawjbk/jre5/tools ・ JDK 6使用時 : /$DIR/FJSVawjbk/jdk6/tools ・ JRE 6使用時 : /$DIR/FJSVawjbk/jre6/tools 各ツールの詳細は、“トラブルシューティング集”の“Javaツール機能”を参照してください。 - 254 - 第9章 データベース連携サービスのチューニング Interstageのシステム構成に応じて、データベース連携サービスで提供するパラメタをチューニングする必要があります。 ここでは、データベース連携サービスのiniファイル内のパラメタについて説明します。 9.1 データベース連携サービスのiniファイル設定情報 データベース連携サービスのiniファイルには、以下の表に示すパラメタを設定します。 システムチューニングを行ってデータベース連携サービスを使用する場合は、iniファイルを変更します。iniファイルを変更しない場 合、データベース連携サービスは、初期値で動作します。 iniファイルは、インストール時に、以下に格納されます。設定例については、“9.2 iniファイルの設定例”を参照してください。 ■ファイル名 C:\Interstage\ots\etc\ots.ini 注)本製品のインストールパスがデフォルトの場合のパスです。 ■パラメタ一覧 タイプ 共用メモリ セマフォ メッセージ キュー Windows(R) 固有パラメタ パラメタ 意味 初期値 最小値 最大値 チューニン グ shmmni 共用メモリ識別子の数 100 25 16777215 - shmseg プロセスごとのセグメント数 100 25 16777215 - semmni セマフォid数 (注1) 100 25 16777215 ○ semmsl idごとの最大セマフォ数 (注1) 25 25 16777215 ○ semvmx セマフォ最大値 32768 32768 16777215 - msgmap messageマップ内のエントリ数 50 25 16777215 - msgmax メッセージ最大サイズ 4096 4096 16777215 - msgmni メッセージ待ち行列id数 10 10 16777215 - msgssz メッセージセグメントサイズ 8 8 255 - msgtql メッセージキューidごとのヘッダ数 20 20 16777215 - msgseg メッセージセグメント数 2048 2048 16777215 - msgemuwait メッセージキューwaitプロセス数 (注2) 64 64 16777215 ○ insmax 内部プロセス間通信メッセージ長 32768 32768 16777215 - msgwait 内部プロセス間通信待ち合わせ数 (注 2) 64 64 16777215 ○ execmax 最大プロセス数 (注2) 64 64 16777215 ○ prntmax 最大親プロセス数 (注2) 64 10 16777215 ○ ftokmax 最大ファイル名数 (注2) 64 64 16777215 ○ interval プロセス終了監視間隔時間(秒) 1 1 16777215 - inthndl 資源監視間隔時間(秒) 10 1 16777215 - mutexmax 最大mutex数 300 150 16777215 - ○:チューニング可能です。 -:基本的には、初期値から変更しないでください。 - 255 - 注1)“9.3 セマフォ資源”を参照して設定してください。 注2)“9.4 Windows(R)固有パラメタ”を参照して設定してください。 9.2 iniファイルの設定例 iniファイルの設定例を以下に示します。 [shminfo] # shared memory id count shmmni=100 # segment count of process shmseg=100 [seminfo] # semaphore id count semmni=100 # semaphore count of id semmsl=25 # maximum semaphore semvmx=32768 [msginfo] # entry count in message map msgmap=50 # maximum message size msgmax=4096 # message queue count(id count) msgmni=10 # message segment size msgssz=8 # header count of system message msgtql=20 # message segment count msgseg=2048 # message queue WAIT process count msgemuwait=64 [insinfo] # length of interprocess communication insmax=32768 # wait count of interprocess communication msgwait=64 # maximum process count execmax=64 # maximum parent process count prntmax=64 # maximum count of ftok file name ftokmax=64 # process finish observation space time interval=1 # space time inthndl=10 # mutex count mutexmax=300 #で始まる行は、コメントです。 設定値には、半角数字だけ使用できます。 9.3 セマフォ資源 データベース連携サービスを使用する場合、同期制御/排他制御のため、セマフォ資源を使用します。 セマフォ資源は、以下の算出式で見積ります。 - 256 - セマフォ資源 意味 種類 必要数 semmni セマフォの組 加算値 5 + x(注) semmsl 組あたりのセマフォの最大数 設定値 25 以上 注)x:起動するリソース管理プログラムの種類 × 4(リソース管理プログラムを起動する場合) 9.4 Windows(R)固有パラメタ Windows(R)固有パラメタは、以下の算出式で見積ります。 パラメタ 意味 種類 初期値 必要数 msgemuwait メッセージキューwaitプロセス数 設定値 64 10 + a(注1) msgwait 内部プロセス間通信待ち合わせ数 設定値 64 10 + b + c(注2) execmax 最大プロセス数 設定値 64 10 + b + c(注2) prntmax 最大親プロセス数 設定値 64 10 + b + c(注2) ftokmax 最大ファイル数 設定値 64 25 + d(注3) 注1)a:リソース管理プログラムの最大多重度 注2)b:リソース管理プログラムの多重度の合計、c:ワークユニットの多重度の合計(サーバアプリケーションの合計) 注3)d:リソース定義ファイルの合計 - 257 - 付録A CORBAサービスの動作環境ファイル CORBAサービスの動作環境ファイルについて説明します。各ファイルは、以下に格納されます。 格納パス C:\Interstage\ODWIN\etc (インストールパスはデフォルト) /etc/opt/FSUNod (インストールパスはデフォルト、 インストール時に動作環境ディレクトリ(“Fixed configuration install directory”)として変更可能) /etc/opt/FJSVod ファイル (Interstage Application Server Enterprise Editionにおいて提供) config gwconfig inithost/initial_hosts queue_policy nsconfig irconfig (Interstage Application Server Standard-J Editionにおいて提供) config inithost/initial_hosts queue_policy nsconfig irconfig (Interstage Web Serverにおいて提供) config inithost/initial_hosts ・ 上記以外のファイルは、CORBAサービスの動作環境としてカスタマイズできません。エディタなどで編集しないでください。 ・ 上記のファイル内に日本語は記載できません。 ・ システムの異常停止などに起因して動作環境ファイルなどの資源が破壊されると、CORBAサービスが正常に起動できない場合が あります。 正常に起動できない、かつ以下のメッセージが発生する場合は、資源が破壊されている可能性があるので、環境の再構築を行う か、バックアップした資源を復元してCORBAサービスの再起動を行う必要があります。 メッセージ番号:od10400, od10402, od10404, od10406, od10504, od10509, od10510 万が一のため、運用環境を構築したら資源のバックアップを行うことを推奨します。 - 258 - バックアップについては、“運用ガイド(基本編)”の“メンテナンス(資源のバックアップ/他サーバへの資源移行/ホスト情報の変更)” で説明されています。 A.1 config ■概要 configファイルは、CORBAサービスの各種動作環境に関する定義が格納されたファイルです。 ■ファイル名 C:\Interstage\ODWIN\etc\config (インストールパスはデフォルト) Solarisサーバ: /etc/opt/FSUNod/config (インストールパスはデフォルト) Windows(R)クライアント: C:\Interstage\ODWIN\etc\config (インストールパスはデフォルト) Linuxサーバ: /etc/opt/FJSVod/config (インストールパスはデフォルト) Windows(R)クライアント: C:\Interstage\ODWIN\etc\config (インストールパスはデフォルト) ■ファイル内情報 configファイルは、以下の形式で値を設定します。 ◆形式: パラメタ名 = 設定値 半角のシャープ(#)を行の先頭に指定した場合は、その行はコメントとして扱われます。また、空行は解析時に無視されます。 # コメント ◆記述例: # comment period_receive_timeout = 72 ◆パラメタ: 以下の動作環境について、パラメタ設定値を変更することができます。 ・ ホスト情報に関する動作環境 ・ ネットワーク環境に関する動作環境 ・ アプリケーション資源に関する動作環境 ・ タイムアウト監視に関する動作環境 ・ セキュリティ機能に関する動作環境 ・ コード変換機能に関する動作環境 - 259 - ・ 保守機能に関する動作環境 ・ 旧バーションの互換に関する動作環境 ・ パラメタ値を変更した場合、次回のCORBAサービス起動時より有効となります。 ・ configファイル内に日本語は記載できません。 ・ 下表に記載していないパラメタは初期値を変更しないでください。 ・ 備考欄に“必須パラメタ”と記載されているパラメタは省略することはできません。(Solaris版および Linux版には必須パラメタはあり ません) ・ 数値を指定するパラメタ(period_receive_timeout等)に数値以外の文字列(“abc”など)を指定した場合、“0”が設定されたものとして 扱われます。 ◆ホスト情報に関する動作環境 パラメタ名 初期値 意味 備考 省略値 指定範囲 IIOP_hostname - - - IIOP_port 8002 - - マシンにIPアドレス(またはホスト名)が複数設定されている場合 に、CORBAサーバアプリケーションで使用するIPアドレスを限 定した運用を行う場合に設定します。 IPアドレス(またはホスト名)を設定すると、サーバアプリケーショ ンのオブジェクトリファレンスの生成時には、ここで設定したIP アドレスが組み込まれ、クライアントからの接続時に使用されま す。また、CORBAサービスは指定されたIPアドレスのみでバイ ンドを行います。 本パラメタが省略された場合はすべてのIPアドレスに対してバ インドが行われます。ただし、IPv4/IPv6のどちらの(または両方 の)IPアドレスをバインドするかどうかはIP-versionパラメタの設 定に依存します。 サーバ機能 のみ有効。 (注1) (注2) (注3) CORBAサービスが使用するポート番号。 Windowsの場合、省略できません。 Solaris、Linuxの場合、初期値(8002)以外を指定するときは必 ず指定してください。 (注4) 注1) Interstage Web Serverでは指定不可。 注2) 例えばLANカードが複数装着されたマシンにおいて、1つのLANカードからのみ接続要求を受け付けることができます。 ホスト名が指定された場合はIP-versionの値に従って名前解決が行われます。 IP-versionがv4-dualの場合はIPv4での名前解決が優先的に行われます。 IP-versionがv6の場合はIPv6での名前解決が優先的に行われます。 Windows版においてリンクローカルおよびサイトローカルのIPv6アドレスを指定する場合はscope-idも記載する必要があります。(例: fe80::1234:5678:9abc:def0%4) 注3) 必要のない限り本パラメタを設定しないでください。注2)に記述されているような特殊用途以外では設定する必要はありません。誤っ たホスト名を設定するとInterstageの起動が失敗します。 また、“localhost”を設定すると“127.0.0.1”(IPv4環境の場合)のみでバインドが行われ、他ホストからのリクエストが受け付けられなくな りますので“localhost”と設定しないで下さい。“127.0.0.1”(IPv4環境の場合)のIPアドレスで定義されているホスト名を設定した場合も同 - 260 - 様に他ホストからのリクエストが受け付けられなくなります。 LinuxではOSインストール直後の状態では自ホスト名に対するIPアドレスが127.0.0.1に設定されており、自ホスト名をIIOP_hostname に設定すると他ホストからの接続を受け付けることができなくなります。 注4) Windowsの場合、必須パラメタです。 Solaris、Linuxの場合、この値が無効になると/etc/servicesの設定値が有効になります。 ◆ネットワーク環境に関する動作環境 パラメタ名 初期値 意味 備考 省略値 指定範囲 con_accept all all all, localhost IP-version v4-dual v4-dual v4, v4-dual, v6 ・ all: すべてのマシンからの接続を受け付けます。 ・ localhost: クライアントからの接続受付を自ホストに制限する場合に 指定します。自ホストからの接続のみを受け付け、他ホス トからの接続を受け付けません。 システムセキュリティなどの理由で、他ホストからの接続要 求を許可しない場合に指定してください。 運用するIPバージョンを設定します。 ・ v4: IPv4のみを利用してCORBAアプリケーションを運用 します(IPv6は使用しません)。 ・ v4-dual: IPv4およびIPv6を利用してCORBAアプリケーショ ンを運用します。 サーバとして動作する際はIPv4およびIPv6の両方を受け 付けます。 クライアントとしての動作する際にIPv4を優先的に利用し ます。 ・ v6: IPv4およびIPv6環境で、CORBAアプリケーションを運 用します。 サーバとして動作する際はIPv4およびIPv6の両方を受け 付けます。 クライアントとしての動作する際にIPv6を優先的に利用し ます。 IPv6に対応していない環境で“v4-dual”もしくは“v6”を指定し た場合、“v4”が設定されます。 read_interval_timeout 30 30 0~ 100000000 write_interval_timeout 30 ソケットに対する読み込みの待機時間。 この時間を超えても読み込みできない状態が持続する場合、 アプリケーションにシステム例外(COMM_FAILURE)が通知 されます。 この値が実際の時間(秒)となります。0を設定した場合、時間 監視をしません。 このパラメタによる監視は電文の受信処理が始まってから開 始されます。例えば、リプライの受信待ちの状態においてパ ケットが1つも届かなければread_interval_timeoutによる監視 は行いません。この場合はperiod_receive_timeoutによる監視 が行われます。パケットが1つでも届くと電文の受信処理を開 始するためread_interval_timeoutによる監視が行われます。 ソケットに対する書き込みの待機時間。 この時間を超えて書き込みできない状態が持続する場合、ア - 261 - サーバ機能 のみ有効。 (注) パラメタ名 初期値 意味 備考 省略値 指定範囲 30 0~ 100000000 tcp_nodelay no no yes, no プリケーションにシステム例外(COMM_FAILURE)が通知さ れます。 この値が実際の時間(秒)となります。0を設定した場合、時間 監視をしません。 このパラメタによる監視は電文の送信処理が始まってから開 始されます。 TCP_NODELAY機能を有効にするか無効にするかを設定し ます。 ・ yes: 電文送信時においてNagleアルゴリズムを無効にしま す。 ・ no : Nagleアルゴリズムは有効となります。 Nagleアルゴリズムが有効の場合、送信データのバッファリン グを行うためネットワーク使用効率が上がります。Nagleアルゴ リズムを無効にした場合、送信データのバッファリングを行わ ないためネットワーク使用効率が下がり通信全体の性能が下 がる可能性がありますが、データの送受信に発生するタイム ラグが減少し、応答性能が向上する場合があります。 注) Interstage Web Serverでは初期値から変更しないでください。 ◆アプリケーション資源に関する動作環境(プロセス/スレッド多重度、使用コネクション数など) これらのパラメタに実際に指定可能な値はOSの資源によって制限されます。 パラメタ名 初期値 意味 備考 サーバアプリケーションのリクエスト実行用スレッド(または プロセス)の最大数。 サーバ機能 のみ有効。 (注1) (注3) (注4) クライアントアプリケーションが使用するサーバホストへの コネクションの最大値。 ポイント参照 省略値 指定範囲 max_exec_instance 512 (注8) 256 16~ 1000000 max_IIOP_local_init_con 256 256 1~1000000 max_IIOP_local_init_requests 4096 4096 クライアントアプリケーションが同時に送信できるリクエスト 数の最大値。 1~1000000 max_IIOP_resp_con 8 (注8) クライアントアプリケーションと確立できる接続の最大値。 8 1~500000 - 262 - サーバ機能 のみ有効。 (注2) (注4) (注11) (注12) ポイント参照 パラメタ名 初期値 意味 備考 max_IIOP_resp_conの自動拡張の最大値。 0またはmax_IIOP_resp_con以上の値を指定してください。 0を指定すると以下の値が設定されます。 サーバ機能 のみ有効。 (注1) (注4) (注6) (注11) (注12) 省略値 指定範囲 limit_of_max_IIOP_resp_con 0 (意味参 照) 0 (意味参 照) max_IIOP_resp_con × 1.3 (小数部分切り捨て) 0~1000000 max_IIOP_resp_con_extend_number 0 (意味参 照) 0 (意味参 照) max_IIOP_resp_conの自動拡張の拡張数。 0を指定すると以下の値が設定されます。 (limit_of_max_IIOP_resp_con - max_IIOP_resp_con) ÷ max_IIOP_resp_con (小数部分切り上げ) サーバ機能 のみ有効。 (注1) (注6) (注7) (注11) (注12) 0~1000000 max_IIOP_resp_requests サーバホストにおいて同時に受信できるリクエスト数の最 大値。 サーバ機能 のみ有効。 (注2) (注4) (注10) 0 (意味参 照) max_IIOP_resp_requestsの自動拡張の最大値。 0またはmax_IIOP_resp_requests以上の値を指定してくだ さい。 0を指定すると以下の値が設定されます。 サーバ機能 のみ有効。 (注1) (注4) (注6) (注10) 0~1000000 max_IIOP_resp_requests × 1.3 (小数部分切り捨て) 0 (意味参 照) max_IIOP_resp_requestsの自動拡張の拡張数。 0を指定すると以下の値が設定されます。 128 (注8) 128 1~500000 limit_of_max_IIOP_resp_requests max_IIOP_resp_requests_extend_number 0 (意味参 照) 0 (意味参 照) max_processes サーバ機能 のみ有効。 (注1) (注6) (注7) 0~1000000 (limit_of_max_IIOP_resp_requests - max_IIOP_resp_requests) ÷ max_IIOP_resp_requests (小 数部分切り上げ) 20 (注8) 最大プロセス数。(起動クライアント + サーバ数) サーバ機能 のみ有効。 (注4) (注5) インプリメンテーションリポジトリの最大登録数。 サーバ機能 のみ有効。 (注2) CORBAサービスのキュー制御で使用するデフォルトバッ ファのバッファ数を指定します。 ワークユニット運用されているCORBAアプリケーションで ワークユニット定義の“Buffer Number:通信バッファ数”を 指定しているCORBAアプリケーションを除く、CORBAサー ビスの通信で使用します。 サーバマシン上で同時に処理される最大リクエスト数を指 定してください。 0を指定すると、以下の値が設定されます。 サーバ機能 のみ有効。 (注2) (注4) 16 1~1000000 max_impl_rep_entries 512 256 100~ 1000000 number_of_common_buffer 0 (意味参 照) 0 (意味参 照) 0~500000 (注10) max_IIOP_resp_requests × 0.2 (小数部分切り捨て) limit_of_number_of_common_buffer 0 (意味参 照) number_of_common_bufferの自動拡張の最大値。 0またはnumber_of_common_buffer以上の値を指定してく - 263 - サーバ機能 のみ有効。 パラメタ名 初期値 意味 備考 省略値 指定範囲 number_of_common_buffer_extend_number 0 (意味参 照) ださい。 0を指定すると以下の値が設定されます。 0~1000000 (注10) limit_of_max_IIOP_resp_requests 0 (意味参 照) number_of_common_bufferの自動拡張の拡張数。 0を指定すると以下の値が設定されます。 0 (意味参 照) (limit_of_number_of_common_buffer - number_of_common_buffer) ÷ number_of_common_buffer (小数部分切り上げ) 0~1000000 max_bind_instances 0 (意味参 照) CORBAサービスに登録可能な「サーバプロセスとオブジェ クトのバインド関係」の数。 0を指定すると以下の値が設定されます。 0 (意味参 照) (注1) (注4) (注6) サーバ機能 のみ有効。 (注1) (注6) (注7) サーバ機能 のみ有効。 (注2) (注4) (注9) 1024 × max_processes ( 計算結果が65535を超えた場合は65535 ) 0~1000000 注1) Interstage Web Serverでは指定不可。 注2) Interstage Web Serverでは初期値から変更しないでください。 注3) 設定値の目安: 登録アプリケーション数(*1) × プロセス最大多重度(*2) × スレッド最大多重度(*3)+ 接続クライアント数(*4) + 64 登録アプリケーション数(*1) × プロセス最大多重度(*2) × スレッド最大多重度(*3)+ 接続クライアント数(*4) + 172 *1) OD_impl_instコマンドで登録したアプリケーション数 *2) OD_impl_instコマンドで指定するproc_conc_max値 *3) OD_impl_instコマンドで指定するthr_conc_maximum値 *4) isgendefコマンドのscale-valueに対応した接続クライアント数 注4) サーバ機能では、本パラメタの設定値および実際の消費量をodprtcurparamコマンドにより確認することができます。 初期値より増加させる場合、システム資源(共用メモリなど)のチューニングが必要です。詳細については、“3.1.1 CORBAサービスの システム資源の設定”を参照してください。 また、Linuxの場合は、bashまたはボーンシェルの場合はulimitコマンドを、Cシェルの場合はlimitコマンドを使用して、ファイルディス クリプタ数を“max_IIOP_resp_con値 + max_processes値”だけ拡張してからCORBAサービスおよびCORBAアプリケーションを起動し てください。 注5) CORBAサービスのプロセス(CORBAサービス、ネーミングサービス、インタフェースリポジトリサーバ、インタフェースリポジトリキャッ シュサーバ)も含みます。見積もりを行う場合、Interstageのサービスの使用分(20)にアプリケーション使用分を加算してください。 CORBAサービスのコマンドも含みます。コマンドを同時に複数起動する場合は、その数を加算してください。 注6) 自動拡張について 自動拡張を行うパラメタについてはlimit_of_[パラメタ名]というパラメタと[パラメタ名]_extend_numberというパラメタが存在します。例え ば、max_IIOP_resp_conというパラメタについてはlimit_of_max_IIOP_resp_con・max_IIOP_resp_con_extend_numberが存在します。 そして、各パラメタは初期値を[パラメタ名]、最大値をlimit_of_[パラメタ名]として、[パラメタ名]_extend_number分割で必要に応じて拡 - 264 - 張を行います。 以下に例を示します。 --------------------------------------------------------------------max_IIOP_resp_con = 100 limit_of_max_IIOP_resp_con = 140 max_IIOP_resp_con_extend_number = 2 --------------------------------------------------------------------上記のパラメタの場合、max_IIOP_resp_conは初期値を100として、120、140と最大2回の拡張を行います。 なお、isconfig.xmlファイルの定義項目AutoConfigurationModeにMANUALを指定した場合、自動拡張に関するパラメタは無視され 拡張は行いません。isconfig.xmlについての詳細に関しては“運用ガイド(基本編)”を参照してください。 注7) 一度の拡張処理で増加できるサイズは初期値のサイズに制限されます。 一度の拡張サイズが初期値のサイズを超える拡張を行う設定がされた場合、拡張数は0が設定された場合と同様の値に補正されます。 また、自動拡張の最大値と初期値との差分よりも拡張数が大きい場合は、拡張数は自動拡張の最大値と初期値との差分の値に補正 されます。 --------------------------------------------------------------------max_IIOP_resp_con = 100 limit_of_max_IIOP_resp_con = 300 max_IIOP_resp_con_extend_number = 1 --------------------------------------------------------------------上記のパラメタの場合、max_IIOP_resp_con_extend_numberは2に補正されます。 注8) 以下の場合は初期値が異なります。 Interstage Application Server Enterprise Edition/Standard-J Editionの場合。 Interstage Web Serverでは初期値に変更はありません。 Interstage Application Server Enterprise Edition/Standard-J Editionで標準インストール・カスタムインストール・GUIインストーラを使 用したインストールを行った場合(pkgaddコマンドによるインストールを行わない場合)。 Interstage Application Server Enterprise Editionの拡張システムおよびInterstage Web Serverでは初期値に変更はありません。 Interstage Application Server Enterprise Edition/Standard-J Editionで標準インストール・カスタムインストール・GUIインストーラを使 用したインストールを行った場合(rpmコマンドによるインストールを行わない場合)。 Interstage Web Serverでは初期値に変更はありません。 初期値は以下のように変更されています。 パラメタ名 初期値 max_IIOP_resp_con 512 max_IIOP_resp_requests 2048 max_processes 512 max_exec_instance 16384 注9) C++のCORBAアプリケーションがCORBA::ORB::bind_object関数を発行して登録するオブジェクト数と別JavaVMから呼び出され るEJBアプリケーションについてSession BeanとEntity BeanのEJB objectのインスタンス数の加算値よりも大きな値を設定してくださ い。 注10) number_of_common_bufferとlimit_of_number_of_common_bufferの設定可能な値はSolaris 9ではシステムパラメタのsemvmx値、 - 265 - Solaris 10以降では65535が最大値になります。 number_of_common_bufferとlimit_of_number_of_common_bufferの設定可能な値はSEMVMXのOS実装値(32767)が最大値に なります。 なお、number_of_common_bufferとlimit_of_number_of_common_bufferの設定を省略した場合は、max_IIOP_resp_requestsと limit_of_max_IIOP_resp_requestsの値から求まる各パラメタの値が設定可能な最大値を超過しないか確認をお願いします。 注11) 以 下 に 示 す OS で は 、 "max_IIOP_resp_con" ま た は 、 "(limit_of_max_IIOP_resp_con max_IIOP_resp_con_extend_numberの計算値"は、OSの仕様により最大値が以下に制限されます。 - max_IIOP_resp_con)/ - Red Hat Enterprise Linux 5以前 65520 - Solaris システムパラメタのsemmslまたは、process.max-sem-nsemsの最大値に制限されます。 システムパラメタの最大値は、Solarisのドキュメントを参照してください。 注12) OSのメモリ使用状況によっては、指定可能範囲であってもod10730メッセージが出力される場合があります。 od10730メッセージが出力された場合、以下の対処を行ってください。 - Interstage起動時 Interstageを再度起動してください。 - CORBAアプリケーション運用時 CORBAサーバアプリケーションへ再接続してください。 ポイント: max_IIOP_local_init_con、max_IIOP_resp_conについて CORBAサービスは、サーバアプリケーションが動作しているマシンごとに1つのコネクションを使用します。 max_IIOP_local_init_conは、各アプリケーションが使用するサーバホストへのコネクション数の最大値を指定します。 max_IIOP_resp_conは、各ホストで使用するアプリケーション間のコネクション数を指定します。 原則として、アプリケーション間のコネクションはクライアントアプリケーションのプロセス単位に生成されます。例えば、クライアントアプ リケーションから1つのサーバアプリケーションに複数のリクエストが同時に発行されても、コネクション数は1になります。 SSL連携機能を使用する場合、SSL接続のコネクションとSSL接続でないコネクションは別コネクションとして数える必要があります。例 えば、クライアントアプリケーションから、1つのサーバマシンにSSL接続のコネクションとSSL接続でないコネクションを使用した場合、コ ネクション数は2になります。 なお、以下の場合にはコネクションを使用するので必要に応じて加算する必要があります。 ・ CORBAサービスのコマンド実行時は1コネクション使用します。コマンドを同時に複数起動する場合は、その数を加算して指定し ておいてください。 ・ インタフェースリポジトリ動作時は、1コネクションを使用します。 ・ ロードバランス機能の動作時は、ネーミングサービスおよびロードバランス機能はそれぞれをサーバとしたクライアントとして動作す るため、2コネクションを使用します。 ・ インタフェースリポジトリ、ネーミングサービス、ロードバランス機能などの各サービスはサーバアプリケーションです。そのため、ネー ミングサービスへ参照、登録などのリクエストを発行すると1コネクションを使用します。他ホスト上のインタフェースリポジトリ、ネーミ ングサービスを参照する設定の場合は、参照先ホストのIIOP_resp_conが1消費されます。 例えばTYPE3 EJBで初期化したホスト上でネーミングサービスへアクセスするアプリケーションを起動すると、ネーミングサービス が起動しているホスト上のIIOP_resp_con資源が1消費されることになります。 以下に、各パラメタのコネクション数のカウント方法を示します。 max_IIOP_local_init_con: - 266 - クライアントアプリケーションが動作しているホスト上で、クライアントアプリケーション(プロセス単位)からサーバアプリケーション(ホスト 単位)へのコネクション数の最大値を指定します。 ・ 設定値の目安(インタフェースリポジトリ動作時): max_IIOP_local_init_con = [1つのクライアントアプリケーションが接続するサーバホスト数の最大値]と 256のうちの最大値 ・ 設定値の目安(インタフェースリポジトリ動作時、SSL連携機能を使用): max_IIOP_local_init_con = [1つのクライアントアプリケーションが接続するサーバホスト数の最大値×2]と 256のうちの最大値 max_IIOP_resp_con: サーバアプリケーションが動作しているホスト上で、接続するクライアントアプリケーションのプロセス数の合計を指定します。同一ホス ト上でクライアントアプリケーションとサーバアプリケーションが接続する場合も、そのコネクション数を加算する必要があります。 ・ 設定値の目安(インタフェースリポジトリ動作時): max_IIOP_resp_con = 接続するクライアントアプリケーションのプロセス数 + 2 ・ 設定値の目安(インタフェースリポジトリ動作時、SSL連携機能を使用): max_IIOP_resp_con = (接続するクライアントアプリケーションのプロセス数 × 2) + 2 ポイント: max_IIOP_local_init_requests、max_IIOP_resp_requestsについて CORBAサービスでは、クライアントアプリケーションが同時に送信するリクエスト数に応じてmax_IIOP_local_init_requestsを設定する 必要があります。また、サーバアプリケーションが同時に受信するリクエスト数に応じてmax_IIOP_resp_requestsを設定する必要があり ます。 max_IIOP_local_init_requests: クライアントアプリケーションが同時に送信できるリクエスト数の最大値を指定します。下の図ではクライアントアプリケーション1が5個 のリクエストを同時に送信し、アプリケーション2が1個のリクエストを同時に送信しています。このため、max_IIOP_local_init_requestsは 5以上の値を設定する必要があります。 た だ し 、 算 出 さ れ た 値 が 4096 以 下 の 場 合 は 初 期 値 の 4096 の ま ま で 問 題 あ り ま せ ん 。 こ の 例 で は 4096 に 満 た な い の で max_IIOP_local_init_requestsはデフォルトの4096から変更の必要はありません。 - 267 - max_IIOP_resp_requests: CORBAサーバアプリケーションが同時に受信できるリクエスト数の最大値を指定します。 それぞれのクライアントマシンから発行されたリクエストがサーバマシンに到達し、CORBAサーバアプリケーションで同時に処理され る数になるので、個々のクライアントマシンから同時に発行されるリクエストの合計値を見積もる必要があります。 下 の 図 で は そ れ ぞ れ の ク ラ イ ア ン ト マ シ ン か ら 発 行 さ れ た リ ク エ ス ト が 同 時 に 9 個 サ ー バ マ シ ン に 到 達 し て い る の で、 max_IIOP_resp_requestsには9以上を設定する必要があります。 ◆タイムアウト監視に関する動作環境 パラメタ名 初期値 意味 備考 省略値 指定範囲 period_client_idle_con_timeout 96 (480秒) 96 (480秒) 0~20000000 period_idle_con_timeout 120 (600秒) クライアントにおける、無通信状態(サーバへのリクエスト送信な し)の監視時間(リクエスト返信完了後のコネクション維持時間)。 この時間を超えてもサーバへのリクエスト送信がない場合、サー バとのコネクションの切断を行います。(注3) この値に5を乗じた値が実際の時間(秒)となります。0を設定す ると無通信監視を行いません。 サーバにおける、無通信状態(クライアントからのリクエスト送信 なし)の監視時間(リクエスト返信完了後のコネクション維持時間)。 - 268 - サーバ機能 のみ有効。 (注1) (注4) パラメタ名 初期値 意味 備考 省略値 指定範囲 1 (5秒) 0~20000000 period_receive_timeout 72 (360秒) 72 (360秒) 0~20000000 period_server_timeout 120 (600秒) (注2) 120 (600秒) 1~20000000 この時間を超えてもクライアントからのリクエスト送信がない場 合、クライアントとのコネクションを切断し、リクエスト処理に使用 したメモリ資源を解放します。 この値に5を乗じた値が実際の時間(秒)となります。0を設定す ると無通信監視を行いません。 クライアントにおける、リクエスト送信から返信までの待機時間。 この時間を超えてもサーバからの返信がない場合、クライアン トにタイムアウトが通知されます。 この値に5を乗じた値が実際の時間(秒)となります。 Persistentタイプ以外のサーバアプリケーションとその他のアプ リケーションで意味が異なります。 Persistentタイプ以外のサーバアプリケーションにおいてはアプ リケーション起動からCORBA_ORB_initメソッド完了までの監 視時間となります。この時間以内にCORBA_ORB_initメソッド が完了しないとクライアントにシステム例外(NO_IMPLEMENT) が通知されます。 クライアントアプリケーションとPersistentタイプのサーバアプリ ケーションにおいてはCORBA_ORB_initメソッド発行から CORBA_ORB_initメソッド完了までの監視時間となります。 この値に5を乗じた値が実際の時間(秒)となります(0は指定で きません)。 サーバ機能 のみ有効。 (注1) 注1) Interstage Web Serverでは初期値から変更しないでください。 注2) 初期値より減少させた場合は、インタフェースリポジトリの起動に失敗することがあります。 注3) 次回リクエスト送信時にサーバとのコネクションの再接続を行います。 なお、クライアントアプリケーションがプロセスモードの場合は、時間超過のタイミングではコネクション切断は行わず、次回リクエスト送 信時にサーバとのコネクションの切断・再接続を行います。 注4) サーバ側の無通信監視時間超過によるコネクション切断のタイミングでクライアントがリクエストを発行すると、クライアントに通信異常 が通知される場合があります。この問題を回避するためには、クライアント側のperiod_client_idle_con_timeoutにサーバ側の period_idle_con_timeoutよりも小さな値を設定してください。 タイムアウト時間は、連携するアプリケーションに適用されるタイムアウト時間を考慮して設定する必要があります。詳細は“OLTPサー バ運用ガイド”(Interstage Application Server Enterprise Editionで提供)の“CORBAアプリケーション運用時のタイマ監視”を参照してく ださい。 ◆セキュリティ機能に関する動作環境(アプリケーション間通信) パラメタ名 初期値 意味 備考 省略値 指定範囲 http_proxy proxy_host HTTPプロキシサーバのホスト名。 - 269 - (注1) (注2) パラメタ名 初期値 意味 備考 省略値 指定範囲 null (値は設定さ れません) - http_proxy_port 8080 HTTPプロキシサーバのポート番号。 (注1) (注2) HTTPプロキシサーバの使用を指定。 (注1) (注2) 0 - http_proxy_use no UNO_IIOP_ssl_use UNO_IIOP_ssl_port no ・ yes:使用する yes, no ・ no :使用しない no SSL連携の有効/無効を選択。 no ・ yes:有効 yes, no ・ no :無効 4433 4433 (注3) SSL連携で使用するポート番号。 UNO_IIOP_ssl_useが“yes”の場合に有効です。 - 注1) Interstage Web Serverでは初期値から変更しないでください。 注2) プレインストール型ランタイム(Portable-ORB以外の実行環境)でHTTPプロキシサーバを経由してHTTPトンネリングを使用する場合に 指定します。http_proxy、http_proxy_portは、“http_proxy_use=yes”のときに有効であり、Webブラウザで使用しているHTTPプロキシ サーバのホスト名とポート番号を指定します。 注3) SSL 接 続 の コ ネ ク シ ョ ン と SSL 接 続 で な い コ ネ ク シ ョ ン は 別 コ ネ ク シ ョ ン と し て 数 え る 必 要 が あ り ま す 。 max_IIOP_resp_con、 max_IIOP_local_init_conパラメタを見積もる際には注意してください。 ◆セキュリティ機能に関する動作環境(CORBAサービス資源) パラメタ名 初期値 意味 備考 CORBAサービス資源のセキュリティ強化機能の有効/無効を指 定。“yes”を指定すると、CORBAアプリケーションはiss_groupの グループに属するユーザ(またはroot)のみが起動可能となりま す。 (注1) (注2) CORBAサービス資源のセキュリティ強化機能有効時 (iss_use=yes指定)のアプリケーション動作のグループIDを指定 します。 (注1) (注2) (注3) (注4) 省略値 指定範囲 iss_use no no yes, no iss_group root(0) root(0) - 注1) インストール時のセキュリティ設定として“強化セキュリティモード”を選択した場合、初期値は以下のように変更されています。 - 270 - パラメタ名 初期値 iss_use yes iss_group インストール時に指定した“Interstage運用グループ名” 注2) CORBAサービス資源のセキュリティ強化機能に関する設定を変更する場合、issetsecuritymodeコマンドの使用を推奨します。詳細 は“セキュリティシステム運用ガイド”の“共通の対策”および“リファレンスマニュアル(コマンド編)”の“issetsecuritymode”を参照してくだ さい。 注3) すでにシステムに登録されているグループを指定してください。 なお、指定したグループのエントリ情報の取得処理が行われます。また、指定した値に関わらず、sysとotherグループのエントリ情報 の取得処理も行われます。このとき、OSの設定(nsswitch.conf)によってはLDAP等と通信する場合もあります。詳細はOSのマニュアル を参照してください。 注4) CORBAアプリケーションの実行は、iss_groupに指定したグループに属するユーザまたはrootに限定され、他の一般ユーザは実行で きなくなりますので、アプリケーションの実行ユーザに注意してください(“リファレンスマニュアル(コマンド編)”の“OD_impl_inst”を参 照)。 ◆コード変換機能に関する動作環境 パラメタ名 初期値 意味 備考 省略値 指定範囲 undefined_char_conversion single single single, multi, fail 未定義文字をコード変換した場合の動作を設定します。 (注2) ・ single: デフォルト すべての未定義文字は半角のアンダースコアに変換します。 (注1) ・ multi 半角の未定義文字は半角のアンダースコアに変換し、全角の 未定義文字は全角のアンダースコアに変換します。 ・ fail 未定義文字の変換を行うとアプリケーションにシステム例外 DATA_CONVERSIONを通知します。 注1) 文字コードがUNICODEまたはUTF8の場合は、“multi”を指定した場合と同様に全角の未定義文字は全角のアンダースコアに変換 します。 注2) クライアントおよびサーバの両方で設定してください。コード変換機能の詳細については“OLTPサーバ運用ガイド”の“コード変換”を 参照してください。 ◆保守機能に関する動作環境 パラメタ名 初期値 意味 備考 省略値 指定範囲 access_log_policy start (初期値を推奨) start CORBAサービス起動時のアクセスログの採取/非採取の状 態。 ・ start: 起動時からログ採取する - 271 - サーバ機能の み有効 (注1) パラメタ名 初期値 意味 備考 省略値 指定範囲 start, standby access_log_size 3000000 ・ standby: ログ採取しない アクセスログファイルの最大サイズ。(バイト単位) サーバ機能の み有効 (注1) アクセスログ採取レベルのキーワードを連結して指定。 (区切り文字はコロン(“:”)、空白は指定不可) “all”を指定すると、すべての採取レベルを指定したものとみ なされます。 サーバ機能の み有効 (注1) (注2) 3000000 1~2147483647 (longの最大値) access_log_level send_stex: recv_stex: send_userex: recv_userex: close_resp_info send_stex: recv_stex: send_userex: recv_userex: close_resp_info - error_log_policy start (初期値を推奨) start CORBAサービス起動時のエラーログの採取/非採取の状態。 (注1) ・ start: 起動時からログ採取する ・ standby: ログ採取しない start, standby error_log_size 3000000 エラーログファイルの最大サイズ。(バイト単位) (注1) CORBAサービス起動時のインフォメーションログの採取/非採 取の状態。 (注1) 3000000 1~2147483647 (longの最大値) info_log_policy info_log_size start (初期値を推奨) start ・ start: 起動時からログ採取する start, standby ・ standby: ログ採取しない 3000000 インフォメーションログファイルの最大サイズ。(バイト単位) (注1) 内部ログの採取を指定。 (注3) 3000000 1~2147483647 (longの最大値) logging log_file_size no no ・ yes: 採取する yes, no ・ no : 採取しない 10000000 -1 内部ログのファイルサイズの上限値。(バイト単位) “logging = yes”とする場合、本パラメタは省略しないでくださ い。 (注3) CORBAサービス起動時のプロセスログの採取/非採取の状 態。 (注1) 4096~ 2147483647 (longの最大値) process_log_policy start (初期値を推奨) - 272 - パラメタ名 初期値 意味 備考 省略値 指定範囲 process_log_size start ・ start: 起動時からログ採取する start, standby ・ standby: ログ採取しない 3000000 プロセスログファイルの最大サイズ。(バイト単位) (注1) ログファイルの出力先を絶対パスで指定します。本パラメタで 指定したパスには、以下のログファイルが出力されます。 (注1) (注3) (注 4) 3000000 1~2147483647 (longの最大値) log_file_path - - - ・ アクセスログ ・ エラーログ ・ インフォメーションログ ・ プロセスログ ・ 内部ログ 本パラメタで指定したパスが存在しなかった場合、CORBA サービスの起動に失敗します。 128バイトより長いパスは指定できません。128バイトより長いパ スを指定した場合、無効となります。 また、空白および“=”を含むパスは指定できません。空白また は“=”を含むパスを指定した場合、その直前までが有効となり ます。 “\”と“/”は区別されず、共にフォルダの区切りとして使用され ます。 snap_size 40000 スナップショットサイズの上限値。(バイト単位) サーバ機能の み有効 スナップショットの採取を指定。 サーバ機能の み有効 40000 1024~ 2147483647 (longの最大値) (注5) snap_use trace_file_synch_level yes yes ・ yes: 採取する yes, no ・ no : 採取しない stop stop - トレースファイルへの出力タイミングを指定。複数指定可能(セ パレータは“&”)。 ・ none:odformtraceコマンド実行時のみ出力。 ・ exit:アプリケーション正常終了時、終了したアプリケーショ ンのトレース情報を出力。 ・ vanish:アプリケーション異常終了時、終了したアプリケー ションのトレース情報を出力。 ・ stop:CORBAサービス終了時、すべてのアプリケーション のトレース情報を出力。 - 273 - サーバ機能の み有効 パラメタ名 初期値 意味 備考 省略値 指定範囲 ・ loop: メ モ リ 上 に 採 取 さ れ た ト レ ー ス 情 報 の サ イ ズ が trace_size_per_processを超えた場合に出力。 trace_size_per_process プロセスごとのトレース情報サイズの最大値(バイト単位)。 10000 10000 サーバ機能の み有効 1024~100000000 (注5) trace_size_of_daemon 0 0 0, 1024~ 100000000 trace_use yes (初期値を推奨) yes CORBAサービスのデーモンプロセスに対するトレース情報サ イズの最大値(バイト単位)。 0を指定すると、“trace_size_per_process × 32”が設定されま す。 なお、計算結果が100000000を超えた場合は100000000が設 定されます。 trace_size_per_processよりも小さな値を設定した場合は、 trace_size_per_processの値に補正されます。 トレース情報の採取を指定 サーバ機能の み有効 ・ yes: 採取する ・ no : 採取しない yes, no 注1) アクセスログ・プロセスログ・エラーログ・インフォメーションログは、“log_file_path”で指定したパスに採取されます。“log_file_path”を 指定しなかった場合は、以下のパスに採取されます。 また、ディスク領域として、以下のログファイルサイズの合計分が必要となります。 ログファイル格納パス C:\Interstage\ODWIN\var 配下 (インストールパスはデフォルト) /var/opt/FSUNod 配下 (インストールパスはデフォルト) /var/opt/FJSVod 配下 ログファイル名とファイルサイズ ログ名 ログファイル名 ログファイルサイズ アクセスログ accesslog accesslog.old access_log_size×2 プロセスログ (サーバ用ライブラリ(ODSV.DLL, libOM.so)をリンクしている場合) proclog proclog.old process_log_size×2 プロセスログ (クライアント用ライブラリ(ODWIN.DLL)を リンクしている場合) proclogcl proclogcl.old process_log_size×2 エラーログ (サーバ用ライブラリ(ODSV.DLL, libOM.so)をリンクしている場合) errlog errlog.old error_log_size×2 - 274 - ログ名 ログファイル名 ログファイルサイズ エラーログ (クライアント用ライブラリ(ODWIN.DLL)を リンクしている場合) errlogcl errlogcl.old error_log_size×2 インフォメーションログ (サーバ用ライブラリ(ODSV.DLL, libOM.so)をリンクしている場合) infolog infolog.old info_log_size×2 インフォメーションログ (クライアント用ライブラリ(ODWIN.DLL)を リンクしている場合) infologcl infologcl.old info_log_size×2 以下のログファイルを採取するためには、ログファイル格納パスに、管理者権限グループに対する書き込みのアクセス許可が必 要です。 - アクセスログ - プロセスログ(サーバ用ライブラリをリンクしている場合) - エラーログ(サーバ用ライブラリをリンクしている場合) - インフォメーションログ(サーバ用ライブラリをリンクしている場合) また、以下のログファイルを採取するためには、ログファイル格納パスに、クライアントアプリケーションを実行するユーザが所属し ているグループに対する書き込みのアクセス許可が必要です。 - プロセスログ(クライアント用ライブラリをリンクしている場合) - エラーログ(クライアント用ライブラリをリンクしている場合) - インフォメーションログ(クライアント用ライブラリをリンクしている場合) 上記のアクセス許可がない場合はログファイルの出力に失敗しますが、この際、特にエラーメッセージなどが表示されない場合が あります。このため、ログファイルを採取する際には、運用前にログファイル格納パスのアクセス許可が正しく設定されているか確認 してください。 注2) access_log_level(アクセスログ採取レベル)に指定可能なキーワードは、“トラブルシューティング集”の“障害調査資料の採取”- “CORBAサービスのログ情報の採取”を参照してください。 注3) “logging=yes”を指定した場合、内部ログファイルへの出力処理に時間を要するため、CORBAサービスの性能が劣化し、CORBA アプリケーションのレスポンス性能が低下します。また、インタフェースリポジトリやネーミングサービスの起動に時間がかかります。 なお、インタフェースリポジトリおよびネーミングサービスの起動に1分以上かかった場合、Interstageの起動に失敗しますので注意 してください。“logging=yes”を指定してInterstageの起動に失敗した場合は、“トラブルシューティング集”の“Interstageの起動/停止 時の異常”を参照して対処を実施してください。 “logging=yes”を指定した場合、内部ログは“log_file_path”で指定したパスに採取されます。“log_file_path”を指定しなかった場 合は、以下のパスに出力されます。ファイル名は“log_file_path”の指定にかかわらず共通です。 パス: C:\Interstage\ODWIN\var ファイル名: ・log (log.old) ・アプリケーションごとのappNNNN.log(appNNNN.old) (NNNNは英数字) パス: /var/opt/FSUNod ファイル名: /log (log.old) - 275 - パス: /var/opt/FJSVod ファイル名: /log (log.old) プレインストール型Javaライブラリ使用時は、上記に加えて、以下のファイルに出力されます。“log_file_path”の値は影響しませ ん。 - ユーザ作業ディレクトリ(Java VMのシステムプロパティのuser.dirの指す位置)配下 JVxxxxxxxxxx.log (xxxxxxxxxxは数字) アプレット運用の場合、user.dirはJava VMの起動オプションで変更可能です。 注4) マルチシステムを使用する場合、デフォルトシステムとマルチシステムで同じ値を指定しないでください。ログファイルが正常に出 力されない場合があります。 注5) Interstage Web Serverでは、初期値より大きい値は指定しないでください。 ◆旧バーションの互換に関する動作環境 パラメタ名 初期値 意味 備考 省略値 指定範囲 msg_output_compatible no no od10301, od10605, od10924, od10925, od10926, od10941, od11101, od60003, no 以下のメッセージの出力有無を指定します。システムログに以下 のメッセージを出力する場合は、メッセージ番号を指定します。複 数指定する場合は、アンパサンド(&)で区切って指定します。以下 のメッセージを出力しない場合は、“no”を指定します。 ・ od10301 ・ od10605 ・ od10924 ・ od10925 ・ od10926 ・ od10941 ・ od11101 ・ od60003 A.2 gwconfig ■概要 gwconfigファイルは、HTTPトンネリング使用時に、Webサーバで起動されるHTTP-IIOPゲートウェイの動作環境を定義するファイルです。 CORBAサービスのタイムアウト監視に関連する項目を修正した場合に、同様の項目について定義を修正する必要があります。 なお、初期値から変更しない場合、gwconfigファイルは必要ありません。 ■ファイル名 C:\Interstage\ODWIN\etc\gwconfig (インストールパスはデフォルト) /etc/opt/FSUNod/gwconfig (インストールパスはデフォルト) - 276 - /etc/opt/FJSVod/gwconfig ■ファイル内情報 gwconfigファイルは、以下の形式で値を設定します。 ◆形式: パラメタ名 = 設定値 半角のシャープ(#)を行の先頭に指定した場合は、その行はコメントとして扱われます。また、空行は解析時に無視されます。 # コメント ◆記述例: timeout_response=60 ◆パラメタ: 設定値を変更することのできるパラメタを下表に示します。 パラメタ名 初期値 意味 指定範囲 timeout_response 360 0~ 100000000 timeout_session 180 0~ 214748364 7 timeout_connection 60 0~ 214748364 7 logmode 5 1~5 リクエストの返信待ち時間 HTTP-IIOPゲートウェイにおける、リクエスト送信から返信までの待機時間(秒)。 この時間内にサーバメソッドから返信されないと、クライアントにタイムアウトが通知 されます。クライアント側で、CORBAサービスのperiod_receive_timeout(クライアン ト側のリクエスト送信から返信までの待機時間。configファイルで定義)を変更した 場合、このパラメタは、period_receive_timeout値以下になるよう変更する必要があ ります。0を指定するとタイムアウトを行いません。 セション保持時間(クライアント間無通信監視時間) HTTP-IIOPゲートウェイにおける、クライアントの管理単位の保持時間(秒)。 サーバからの返信待ちがない状態で、この時間内にクライアントから新たなリクエス ト送信がない場合には、クライアントの管理情報は破棄されます。0を指定するとタ イムアウトを行いません。 コネクション保持時間(サーバ間無通信監視時間) HTTP-IIOPゲートウェイにおける、無通信状態の監視時間。 サーバからの返信待ちがない状態で、この時間内にクライアントから新たなリクエス ト送信がない場合には、サーバとのコネクションを切断します。0を指定するとタイム アウトを行いません。 HTTP-IIOPゲートウェイの内部ログ採取の有無 (注) 以下から指定します。 ・ 5:内部ログ情報を採取しません。 ・ 3:リクエストデータおよびエラー発生時の情報を採取します。 ・ 2:“3”で採取する情報に加えて、リプライデータおよび内部処理の情報を採取 します。 ・ 1:“2”で採取する情報に加えて、トレース情報を採取します。 max_log_file_size 1048576 ログファイルサイズ(バイト単位) - 277 - パラメタ名 初期値 意味 指定範囲 1048576~ 10485760 注) ・ HTTP-IIOPゲートウェイの内部ログは、以下に出力されます。 内部ログの出力先は環境変数OD_HTTPGW_HOMEまたはOD_HOMEより変更可能です。 C:\Interstage\ODWIN\var\httpgw*_0.log(httpgw*_1.log) (*は英数字) /opt/FSUNod/var/httpgw*_0.log(httpgw*_1.log) (*は英数字) /opt/FJSVod/var/httpgw*_0.log(httpgw*_1.log) (*は英数字) ・ 内部ログ採取を終了するためには、gwconfigにパラメタを設定した後、Webサーバを再起動する必要があります。 ・ HTTP-IIOPゲートウェイの内部ログが出力されるディレクトリにInterstage HTTP Serverのサーバプロセスを実行するユーザ名/グルー プ名の書き込み権を設定してください。書き込み権がない場合、システムログにメッセージod40102が出力されます。 ・ 定義情報を変更した場合、次回のWebサーバ起動時より有効となります。 ・ gwconfigファイルの格納位置 gwconfigファイルの格納場所は、環境変数OD_HTTPGW_HOMEまたはOD_HOMEで指定することが可能です。両方指定されて いる場合にはOD_HTTPGW_HOMEが優先され、指定されたディレクトリ配下のetcディレクトリに格納します。また、同ディレクトリ配 下にvarディレクトリを作成してください。 ・ 最終行には、必ず改行を入れてください。 ・ 設定値に数字以外が含まれた場合、数字までを有効とします。 ・ SolarisまたはLinuxの場合、通信ごとにコネクションを解放します。このため、timeout_sessionおよびtimeout_connectionを設定する 必要はありません(設定しても値は無視されます)。 Windowsの場合、timeout_sessionおよびtimeout_connectionのタイムアウトの契機でコネクションを解放します。このため、これらの パラメタに0を設定すると、コネクションがリークする可能性があります。 A.3 inithost/initial_hosts ■概要 inithost/initial_hostsファイルは、ネーミングサービス、インタフェースリポジトリのホスト情報を定義するファイルです(ネーミングサービ ス、インタフェースリポジトリは、CORBAアプリケーション連携を行う場合に必要となる、アプリケーションの所在、インタフェース情報が 登録されているサービスです)。 inithost/initial_hostsには、サービスが存在するホスト名(またはIPアドレス)とCORBAサービスのポート番号(デフォルト8002)を指定し ます。ホスト名・ポート番号は最大16組まで指定できます。 サービスの問い合わせは定義順に行われ、参照するサービスが存在しない場合は次行に定義されているホストに問い合わせを行います。 なお、ネーミングサービス・インタフェースリポジトリをローカルホスト上で動作させる場合は、ホスト名・ポート番号の設定は必要ありま せん。 - 278 - ■ファイル名 C:\Interstage\ODWIN\etc\inithost (インストールパスはデフォルト) Solarisサーバ: /etc/opt/FSUNod/initial_hosts (インストールパスはデフォルト) Windows(R)クライアント: C:\Interstage\ODWIN\etc\inithost (インストールパスはデフォルト) Linuxサーバ: /etc/opt/FJSVod/initial_hosts (インストールパスはデフォルト) Windows(R)クライアント: C:\Interstage\ODWIN\etc\inithost (インストールパスはデフォルト) ■ファイル内情報 inithost/initial_hostsファイルは、以下の形式で値を設定します。 ◆形式: ホスト名 ポート番号 半角のシャープ(#)を行の先頭に指定した場合は、その行はコメントとして扱われます。また、空行は解析時に無視されます。 # コメント ◆記述例: # comment hostname 8002 ◆パラメタ: 設定値を変更することのできるパラメタを下表に示します。 パラメタ名 初期値 意味 ホスト名 なし ネーミングサービス、またはインタフェースリポジトリサービスが動作しているホスト 名(またはIPアドレス)を指定します。ホスト名の長さとして、64バイトまで指定できま す。 (注1)(注2) ポート番号 なし 上記サービスが動作しているホストで定義されているCORBAサービスのポート番 号を指定します。 注1) サーバ側のイニシャルサービスやネーミングサービスに登録されているオブジェクトリファレンスに設定されているホスト名に対して名 前解決(IPアドレスへの変換)が可能である必要があります。登録されているオブジェクトリファレンスの情報を参照する場合は、サーバ 側でOD_or_admコマンド(-lオプション)及びodlistnsコマンド(-lオプション)を実行してください。 なお、自ホスト側/サーバ側(サービスが動作しているホスト)のホスト名定義と統一させて指定する必要があります。 [自ホスト側] Windows(R)システムフォルダ\system32\drivers\etc配下のlmhostsまたはhosts - 279 - [自ホスト側] /etc/hostsまたはNIS+など [サーバ側] サーバ側のホスト名定義 注2) ホスト名に自ホストのホスト名やIPアドレスは指定しないでください。自ホスト名を指定した場合、サービスの問い合わせがループする 場合があります。 ・ 定義情報の変更について 定義情報を変更した場合、次回のCORBAサービス起動時より有効となります。 ・ isinit、ismodifyserviceコマンドの実行および設定について - isinitおよびismodifyserviceコマンドを実行する場合は、inithost/initial_hostsファイルに指定されているインタフェースリポジトリ サービスおよびネーミングサービスのホスト名を、コメントまたは削除してください。 - inithost/initial_hostsファイルの設定は、isinitおよびismodifyserviceコマンドの実行後に可能になります。 - inithost/initial_hostsファイルにホスト名が設定されている場合でも、isinitおよびismodifyserviceコマンドで設定したホスト名が 優先されます。 また、isinitおよびismodifyserviceコマンドで設定したホスト名は、inithost/initial_hostsファイルに設定する必要はありません。 - isinitおよびismodifyserviceコマンドを実行して環境設定を行った場合、inithost/initial_hostsファイルを使用してネーミングサー ビスのリモートホスト運用を行うことはできません。それは、isinitおよびismodifyserviceコマンドを使用すると、ネーミングサービ スのリモートホスト名がイニシャルサービスに設定されるため、inithost/initial_hostsファイルが使用されないためです。 - inithost/initial_hostsファイルを使用してネーミングサービスのリモートホスト運用が行えるのは、isinitおよびismodifyserviceコマ ンドが含まれないCORBAサービスクライアントでの運用に限られます。 ・ 不要なホスト情報定義について Windows(R)クライアントのinithostに、存在しない、または通信不可状態のホストが定義された場合、クライアントアプリケーションの 動作が遅くなることがあります。不要なホスト名は削除してください。 ホスト名・ポート番号の設定は、odsethostコマンドでも行うことができます。 A.4 queue_policy ■概要 queue_policyファイルは、キュー制御機能のキューポリシーとして使用されるファイルです。 サンプルファイルとしてqueue_policy.defaultを提供していますので、キュー制御機能を使用する場合は、queue_policy.defaultを編集 してqueue_policyファイルを作成してください。 ■ファイル名 C:\Interstage\ODWIN\etc\queue_policy (インストールパスはデフォルト) - 280 - /etc/opt/FSUNod/queue_policy (インストールパスはデフォルト) /etc/opt/FJSVod/queue_policy ■ファイル内情報 queue_policyには、[QUEUEGROUP]セクション、[QUEUE]セクション、[GUARANTY]セクションに分かれています。[QUEUEGROUP] セクションおよび[QUEUE]セクションは、odsetqueコマンドで更新します。 [GUARANTY]セクションはエディタなどで変更してください。[GUARANTY]セクションが未定義の場合の最大値は、“リファレンスマ ニュアル(コマンド編)”の“odsetque”を参照してください。 ◆形式: [GUARANTY] キュー名 = キューの上限値 ◆記述例: [GUARANTY] queue1 = 64 ◆パラメタ: 設定値を変更することのできるパラメタを下表に示します。 パラメタ名 指定範囲 意味 キュー名 (注2) - odsetqueコマンドで登録したキュー名を指定します。 キューの上限値 1~2147483647 (longの最大値) キューの上限値を指定します。(省略不可) (注1) 注1) すべての上限値の合計が、limit_of_max_IIOP_resp_requests以下になるように設定する必要があります。 limit_of_max_IIOP_resp_requestsのデフォルト値は以下となります。 max_IIOP_resp_requests × 1.3 (小数部分切り捨て) 0が指定された場合、デフォルト値となります。 isconfig.xml フ ァ イ ル の 定 義 項 目 AutoConfigurationMode に MANUAL を 指 定 し 、 自 動 拡 張 を 行 わ な い 設 定 に し た 場 合 は、 max_IIOP_resp_requestsとなります。 注2) CORBAサービスが持っているキューと設定値について下表に示します。 キュー名 設定値(キューの上限値) SYSTEM_GLOBAL 変更不可 OD_ORB_QUEUE 変更不可 COS_NAMING_QUE max_IIOP_resp_con以上の値 INTERFACE_REP_QUE max_IIOP_resp_con以上の値 - 281 - ・ 定義情報を変更した場合、次回のCORBAサービス起動時より有効となります。 ・ odsetqueコマンドで登録した際、[GUARANTY]にはキュー情報が追加されません。キューの上限値を設定する場合、新たに定義 を追加する必要があります。 A.5 nsconfig ■概要 nsconfigファイルは、ネーミングサービスの動作環境を設定するファイルです。 ■ファイル名 C:\Interstage\ODWIN\etc\nsconfig (インストールパスはデフォルト) /etc/opt/FSUNod/nsconfig (インストールパスはデフォルト) /etc/opt/FJSVod/nsconfig ■ファイル内情報 nsconfigファイルは、以下の形式で値を設定します。 ◆形式: パラメタ名 = 設定値 パラメタ名と設定値の間の文字列は、“ = ”(半角スペース+半角イコール+半角スペース)を設定します。 半角のシャープ(#)を行の先頭に指定した場合は、その行はコメントとして扱われます。また、空行は解析時に無視されます。 # コメント ◆記述例: file_sync = yes trace_level = update bl_how_many = 65536 ogl_how_many = 256 ext_intf = yes cn_userexception_log_use = yes cn_userexception_log_size = 2000000 ◆パラメタ: 設定値を変更することのできるパラメタを下表に示します。なお、指定が必須となるパラメタはありません。 - 282 - パラメタ名 初期値 意味 指定範囲 file_sync yes yes, no ネーミングサービスのデータベースへの更新処理でファイルの同期書き込みを行 うかを設定します。 ・ yes: ファイルの同期書き込みを行う。 ・ no : ファイルの同期書き込みを行わない。 初期創成などの大量データの更新時に、このパラメタをnoにすることにより処理を 高速化することができます。ネーミングサービスの運用中には、信頼性を向上させ るため、本パラメタはyesにしてください。 trace_level update update, all メソッド実行の自動トレースを採取するトレースレベルを指定します。 ・ update: 更新ログだけを採取する。 ・ all: すべてのトレースを採取する。 bl_how_many 65536 0~65536 ogl_how_many 256(初期 値を推奨) 128~256 ext_intf yes yes, no NamingContext::list, BindingIterator::next_nで返されるバインディング数の最大値 を指定します。 ロードバランスオブジェクトグループのリストの最大値を指定します。 注) ネーミングサービスでは、ロードバランスオブジェクトグループのリストを作成す る際、本パラメタの設定値によりメモリを獲得します。使用するメモリ容量に影響が 発生するため、メモリ容量を考慮して必要最小限の値を設定してください。 ネーミングサービスの拡張機能を使用するかを指定します。 ・ yes: ネーミングサービスの拡張機能を使用する。 ・ no : ネーミングサービスの拡張機能を使用しない。 noを指定すると、ネーミングコンテキスト拡張インタフェース(NamingContextExtイ ンタフェース)を使用できません。V2.X以前のクライアントアプリケーションを動作さ せる場合は、noを指定する必要があります。 cn_userexception_log_use yes yes, no ユーザ例外ログを採取するかを指定します。 ・ yes: ユーザ例外ログを採取する。 ・ no : ユーザ例外ログを採取しない。 cn_userexception_log_size 2000000 ユーザ例外ログのファイルサイズを指定します。 1000~ 2000000 ・ 変更した値は、次回のネーミングサービス起動時より有効となります。 ・ パラメタext_intfに“no”を設定してV2.X以前のクライアントアプリケーションを動作させる場合は、運用に応じた対処が必要となる場 合があります。V2.X以前のネーミングサービスを使用する場合の注意事項については、“アプリケーション作成ガイド(CORBAサー ビス編)”の“旧バージョンからの移行上の注意”-“ネーミングサービスに関する注意事項(V2以前のバージョンからの移行)”を参 照してください。 A.6 irconfig - 283 - ■概要 irconfigファイルは、インタフェースリポジトリのバックアップやログ情報などの動作環境を設定するファイルです。 ■ファイル名 C:\Interstage\ODWIN\etc\irconfig (インストールパスはデフォルト) /etc/opt/FSUNod/irconfig (インストールパスはデフォルト) /etc/opt/FJSVod/irconfig ■ファイル内情報 irconfigファイルは、以下の形式で値を設定します。 ◆形式: パラメタ名 = 設定値 半角のシャープ(#)を行の先頭に指定した場合は、その行はコメントとして扱われます。また、空行は解析時に無視されます。 # コメント ◆記述例: auto backup = no(yes) auto backup path = auto recovery = no(yes) logging = no(yes) logging memory size = 512 logfile path = sync = no select cache obj = ◆パラメタ: 設定値を変更することのできるパラメタを下表に示します。なお、指定が必須となるパラメタはありません。 パラメタ名 初期値 意味 指定範囲 auto backup no yes, no インタフェースリポジトリ起動時に自動的にバックアップを行うかを指定します。 ・ yes: 自動的にバックアップを行う。 ・ no : 自動的にバックアップを行わない。 注)バックアップは、インタフェースリポジトリ起動時に1回だけ行います。 auto backup path auto recovery - - no yes, no バックアップデータの格納場所を指定します。auto backup=yesと指定した場合、必 ずパスを指定する必要があります。パスを指定しないとバックアップは行われません。 注)格納場所には、作成したデータベースサイズ以上の空き領域が必要です。 トランザクション処理中のシステムダウンなどによりデータベースの異常を検出した 場合に、バックアップデータを元に自動的にリカバリを行うかを指定します。 - 284 - パラメタ名 初期値 意味 指定範囲 ・ yes: 自動的にリカバリを行う。 ・ no : 自動的にリカバリを行わない。 注)本機能を使用する場合は“auto backup=yes”と指定し、auto backup pathを指定 する必要があります。 ir_timeout 1800(秒) 0~ 100000000(秒) no yes, no iss_use IDLコンパイル(IDLc)およびインタフェース情報移入(odimportir)において、インタ フェースリポジトリへのリクエストの復帰までの待機時間を指定します。0を指定す ると、リクエスト復帰までの待機時間は監視されません。 資源保護機能の有効/無効を指定します。 ・ yes: 資源保護機能を有効とする。 ・ no : 資源保護機能を無効とする。 “yes”を指定すると、インタフェースリポジトリはデータベース管理者(デフォルト: root)のみが運用可能となります。 注)インストール時のセキュリティ設定として“強化セキュリティモード”を選択した場 合、初期値は“yes”になります。 logging no yes, no トラブル発生時にログ情報を採取するかを指定します。 ・ yes : ログ情報を採取する。 ・ no : ログ情報を採取しない。 採取したログは、irlogdumpコマンドによりファイルに出力できます。通常は、初期 値(no)で運用します。 logging memory size 512(KB) logfile path - 1~4096(KB) - - select cache obj - sync no yes, no ログ情報を格納する共用メモリのサイズを指定します。logging=noとした場合、この 値は意味を持ちません。 “logging=yes”とした場合、irlogdumpコマンドにより出力されるログ情報の格納ディ レクトリをフルパスで指定します。パスを指定しない場合は、CORBAサービスの動 作ディレクトリと同一のディレクトリに格納されます(“A.1 config”参照)。 “logging=no”と指定した場合、この値は意味を持ちません。 インタフェースリポジトリ起動時にキャッシュ対象とするオブジェクトを指定します。 キャッシュ対象オブジェクトは、テキストファイル内にキャッシュ対象オブジェクトの リポジトリIDを記述し、そのファイル名をフルパスで指定します。 ファイル名が指定されない場合は、全登録オブジェクトがキャッシュ対象となります。 ファイルの作成例および注意事項については、以下のキャッシュ対象オブジェク トの指定方法を参照してください。 同期モードを指定します。 yes:同期モードを指定します。 no:同期モードを指定しません。 “no”を指定すると、データベースへの書き込みと同期しないモードで動作するた め、インタフェースリポジトリ更新処理のスループットが向上します。ただし、更新中 のシステムダウンなどで発生するデータベース破壊を認識できない場合があります。 “yes”を指定すると、トランザクション単位での書き込みを保証するため、同期モー ドで動作します。信頼性が要求されるシステムを構築する場合に設定します(デー タベース破壊の認識可)。 同期モードを指定した場合、指定しない場合に比べて更新処理のスループットは 低下します。このとき、クライアントへのサーバメソッドの復帰時間が長くなるため、 タイムアウトが発生する可能性があります。これを防ぐには、“A.1 config”の period_receive_timeout値をチューニングしてください。 - 285 - ◆キャッシュ対象オブジェクトの指定方法 インタフェースリポジトリ起動時、キャッシュ対象オブジェクトを限定することにより、インタフェースリポジトリに大量のオブジェクトが登 録されている場合の起動性能を改善することができます。 ただし、キャッシュ対象オブジェクトを指定した場合は、キャッシュ対象としないオブジェクトに対する参照性能は低下するため、運用 に関しては注意が必要です。 また、キャッシュ対象オブジェクトを指定してインタフェースリポジトリを起動した場合は、以後、インタフェースリポジトリに対する登録/ 更新(IDLc, tdc, odimportir)を行うことができません。運用時(インタフェースリポジトリの登録/更新を行わない)に使用してください。 キャッシュ対象オブジェクトは、ユーザがテキストファイル内にキャッシュ対象オブジェクトのリポジトリIDを記述します。 リポジトリIDは、Repositoryオブジェクト(ルートオブジェクト)に直接包含されるModuleDefオブジェクトまたはInterfaceDefオブジェクトの み指定可能で、指定されたオブジェクトに包含されるオブジェクトすべてがキャッシュ対象となります。 キャッシュ対象オブジェクトが継承またはスコープ参照で他のモジュールと関連付けられている場合は、そのモジュールもキャッシュ 対象として指定する必要があります。 インタフェースリポジトリで管理するオブジェクトの種類、およびインタフェースリポジトリオブジェクトの包含/継承関係については“アプ リケーション作成ガイド(CORBAサービス編)”(Interstage Application Server Enterprise Editionで提供)の“インタフェースリポジトリサー ビスのプログラミング”を参照してください。 なお、インタフェースリポジトリに登録されているオブジェクトと包含関係については、odlistirコマンドで表示できます。 キャッシュ対象オブジェクトを指定するためのファイルの記述例を以下に示します。 IDL:testmodule1:1.0 IDL:testmodule2:1.0 IDL:testmodule3:1.0 注) 1行に、キャッシュ対象オブジェクトのリポジトリIDを1つだけ記述できます。 コメントは、使用できません。 ・ 変更した値は、次回のインタフェースリポジトリサービス起動時より有効となります。 ・ ismodifyserviceで環境設定を行う際に“auto backup”が指定されていた場合は、データベースが空の状態でバックアップが行われ ます。この状態でバックアップされたデータベースは、使用できません。 ・ auto backup機能はインタフェースリポジトリ起動時の状態でバックアップが行われます。起動後に更新されたインタフェース定義情 報はバックアップに反映されません。起動後に更新された情報が必要な場合は、Interstage(インタフェースリポジトリ)を再起動する か、またはodbackupsysコマンドを使用してバックアップを行ってください。 ・ odbackupsysコマンドでは、キャッシュ対象オブジェクトを指定したファイルをバックアップできません。ファイルのコピーコマンドなど でバックアップを行ってください。 ・ インタフェースリポジトリのデータベース管理者がroot(デフォルト)以外であり、かつirconfigファイルに“iss_use=yes”を設定すると、 ログ情報採取機能の有効化(irconfigファイルの“logging=yes”)を指定しても、インタフェースリポジトリ(データベースアクセス機 能)のログ情報が採取されなくなります(キャッシュサーバのログ情報は採取されます)。 また、irconfigファイルに"iss_use=yes"を設定した場合は、irlogdumpコマンド(ログ情報の出力・制御)は管理者権限(root)で実行 する必要があります。 - 286 - 付録B コンポーネントトランザクションサービスの環境定義 本定義は以下の製品でだけサポートしています。 ・ Interstage Application Server Enterprise Edition コンポーネントトランザクションサービスの環境定義ファイルについて説明します。本定義ファイルは、以下に格納されます。 格納パス C:\Interstage\etc\sysdef /var/opt/FSUNtd/etc/sysdef /var/opt/FJSVtd/etc/sysdef 本定義ファイルは、コンポーネントトランザクションサービスが停止している時に、変更可能です。 コンポーネントトランザクションサービスの環境定義の記述形式と制御文について説明します。 備考 万一のため、運用環境を構築したら資源のバックアップを行うことを推奨します。 バックアップについては、“運用ガイド(基本編)”の“メンテナンス(資源のバックアップ/他サーバへの資源移行/ホスト情報の変更)”を 参照してください。 B.1 記述形式 通常ファイル記述形式は、以下の構文により構成されます。なお、通常ファイルの記述形式に誤りがあった場合、構文エラーとなりま す。構文エラー時には、そのファイルに記述されているすべての内容が無効となります。 ・ ステートメント ・ セクション ・ コメント行 ・ 空行 B.1.1 ステートメント ステートメントとは、情報を設定するための行であり、以下の形式で記述します。 キーワード: 設定内容(\n) ステートメントは、キーワード、“:”(コロン)、および設定内容から構成されています。 ステートメントの記述規則を以下に示します。 ・ ステートメントを省略する場合、対象ステートメントを削除するか、設定内容だけ省略します。 ・ ステートメントを記述している行にコメントは記述できません。 ステートメントを構成する情報の詳細を以下に説明します。 ■キーワード 固有のキーワードを設定します。キーワードには、以下の規則があります。 ・ キーワードは対象行の先頭の英数字から“:”(コロン)の直前までを意味します。 ・ キーワードには英数字で始まる英数字とスペースで構成されている文字列を指定できます。 - 287 - ・ キーワード中に指定されている英字の大文字/小文字の区別はしません。 ・ キーワード中にスペースを含むことができます。 ・ キーワード中に連続したスペースが指定された場合、1つのスペースが指定されたものとみなされます。 ・ 対象行の先頭にスペースやタブが指定されている場合、そのスペースやタブは無視されます。 ■:(コロン) キーワードと設定内容の区切りをあらわす文字として使用し、以下の規則があります。 ・ コロンは必ず半角で指定する必要があります。 ・ コロンの前後にスペースやタブが記述されている場合、そのスペースやタブは無視されます 。 ■設定内容 キーワードに対応する内容を設定します。設定内容には、以下の規則があります。 ・ 設定内容は、対象行の“:”の直後から指定できます。それ以降の“:”は設定内容に含まれる文字として扱われます。 ・ 設定内容の終わりはスペース、タブ、改行('\n')、またはEOFで示します。 ・ 設定内容に指定されている英字の大文字/小文字は区別されます。 ・ 設定内容は、1つの文字列しか指定できません。 ・ 設定内容中にスペースやタブが含まれる場合、二重引用符で囲む必要があります。 ・ 設定内容を複数記述する場合、ステートメントを繰り返し記述します。 ステートメントの設定例 例1)キーワード“Keyword:”には“Information”を設定します。 Keyword: Information(\n) KEYWORD: Information(\n) KeyWord: Information(\n) Keyword: Information(\n) Keyword: Information(\n) 以上のステートメントはすべて同じように解析されます。 例2)キーワード“This is a Keyword:”には“Information Area”を設定します。 This is a Keyword: "Information Area"(\n) THIS IS A KEYWORD: "Information Area"(\n) This is a keyword: "Information Area"(\n) This is a Keyword: "Information Area"(\n) 以上のステートメントはすべて同じように解析されます。 構文エラーとなるステートメントの例 # 設定内容が2つ指定されている(\n) Keyword: Information Area(\n) # ステートメントを記述している行にコメントが指定されている(\n) Keyword: Information # This is a Statement(\n) # 二重引用符で終了していない(\n) Keyword: "START Information. (\n) - 288 - # キーワードと設定内容が2行で指定されている(\n) Keyword: "START Information. (\n) Information END" (\n) また、登録されていないキーワードを指定した場合も構文エラーとなります。 B.1.2 セクション セクションとは、ステートメントの集合(グループ)であり、以下の形式で記述します。 [セクション名](\n) キーワード: 設定内容 (\n) キーワード: 設定内容 (\n) セクションは、“[セクション名]”と複数のステートメントから構成されており、以下の規則があります。 ・ セクションとは“[セクション名]”で始まり、次のセクション、またはEOFまでを意味します。 ・ セクションを省略する場合、セクションをすべて削除するか、コメントにする必要があります。 ・ “[セクション名]”だけのセクションは指定できません。 ・ “[セクション名]”を記述する行に“[セクション名]”以外は記述できません。 ・ セクション名は必ず[ ](角括弧)で囲む必要があります。 ・ セクション名には英数字で始まる英数字とスペースで構成されている文字列を指定できます。 ・ セクション名に指定されている英字の大文字/小文字の区別はしません。 ・ “[セクション名]”を記述している行にコメントは指定できません。 正常なセクションの設定例 # セクションにステートメントが1つある(\n) [Section] (\n) Keyword: Information(\n) # セクションにステートメントが3つある(\n) [Section] (\n) Keyword1: Information(\n) Keyword2: Information(\n) Keyword3: Information(\n) 構文エラーとなるセクションの例 # [セクション名]が記述されている行にコメントが指定されている(\n) [Section] # This is a Section(\n) Keyword: Information(\n) # [セクション名]の角括弧が正しく終了していない(\n) [Section(\n) Keyword: Information. (\n) また、登録されていないセクション名を指定した場合も構文エラーとなります。 - 289 - B.1.3 コメント行 コメント行は、通常ファイル中にコメント(注釈)を記述する時に使用します。以下の形式で記述します。 # コメント(\n) コメント行には以下の規則があります。 ・ コメント行の先頭に#(シャープ)を指定します。 ・ #は半角文字で指定する必要があります。 B.1.4 空行 空行を記述することができます。 空行は解析時無視されます。 B.2 環境定義ファイルの制御文 B.2.1 [SYSTEM ENVIRONMENT]セクション ◆形式 [SYSTEM ENVIRONMENT]セクションは以下の形式で記述します。なお、本セクションは省略できません。 [SYSTEM ENVIRONMENT] System Scale: システムの規模 Using Session Information Management Object: SMOの使用の有無 Name of Session Information Management Object: SMOのオブジェクト名 Number of Maximum WRAPPER Hold Session: システム最大保留セション数 Number of Communication Buffer: トランザクションアプリケーションの通信 バッファ数 Using Interface Check: インタフェース情報チェック機能使用の 有無 [SYSTEM ENVIRONMENT] System Scale: システムの規模 Using Session Information Management Object: SMOの使用の有無 Name of Session Information Management Object: SMOのオブジェクト名 Number of Maximum WRAPPER Hold Session: システム最大保留セション数 Number of Communication Buffer: トランザクションアプリケーションの通信 バッファ数 Using Interface Check: インタフェース情報チェック機能使用の 有無 IP version: 使用するネットワークのバージョン [SYSTEM ENVIRONMENT] - 290 - System Scale: システムの規模 Using Session Information Management Object: SMOの使用の有無 Name of Session Information Management Object: SMOのオブジェクト名 Number of Communication Buffer: トランザクションアプリケーションの通信 バッファ数 Using Interface Check: インタフェース情報チェック機能使用の 有無 ◆設定内容 System Scale:システムの規模 システムの規模を指定します。 Interstage統合コマンドにより初期化を行った場合には、適切なシステム規模が設定されますので、修正する必要はありません。 システム規模は、接続クライアント数より選択します。各定義値の意味を、以下に示します。 設定値 システム規模 接続クライアント数 small 小規模 1~5 1~50 moderate 中規模 6~10 51~100 large 大規模 11~50 101~500 super 超大規模 51~100 501~1000 Using Session Information Management Object:セション情報管理機能の使用の有無 セション情報管理機能の使用の有無を指定します。 ・ YES: セション情報管理機能を使用する。 ・ NO : セション情報管理機能を使用しない。省略値。 Name of Session Information Management Object:セション情報管理機能のオブジェクト名 セション情報管理機能のネーミングサービス登録時の名前を指定します。 指定できる値は、OD_or_admコマンドの-nオプションに指定可能な255バイト以内の値です。ただし、ネーミングコンテキストの指定は できません。省略値は、“ISTD::SMO”です。 Using Session Information Management Object ステートメントに“NO”が指定された場合は、本ステートメントは無視されます。 Number of Maximum WRAPPER Hold Session:システム最大保留セション数 システム全体でのセション保留数を指定します。 0を指定した場合にはセションの抑制は行いません。 本定義は、[WRAPPER]セクションで指定するPSYS NameステートメントおよびNumber of Maximum Sessionステートメントを定義した 場合に有効となります。 指定できる値は、0~1000です。省略値は、0です。 Number of Communication Buffer:トランザクションアプリケーションの通信バッファ数 トランザクションアプリケーションに対する通信時に使用するバッファの数です。本ステートメントで指定した通信バッファ数に、4096byte を積算したサイズの通信バッファが用意されます。 指定できる値は、500~10000です。 1回の通信データ長×同時接続クライアント数を計算し、その値をもとに通信バッファ数を見積もってください。 通信バッファは、十分なサイズを用意してください。 なお、システムスケールにより、以下の省略値が設定されます。 - 291 - small 500 moderate 1000 large 1500 super 2000 Using Interface Check:インタフェース情報チェック機能使用の有無 インタフェース情報チェック機能使用の有無を指定します。 ・ YES: インタフェース情報チェック機能を使用する。 ・ NO : インタフェース情報チェック機能を使用しない。省略値。 IP version:使用するネットワークのバージョン 使用するネットワークのバージョンを指定します。 ・ v6: IPv6ネットワークを使用する。 ・ v4: 従来のIPv4ネットワークを使用する。省略値。 B.2.2 [WRAPPER]セクション ◆形式 [WRAPPER]セクションは以下の形式で記述します。 [WRAPPER] PSYS Name: 負荷抑制対象DPCF通信パス名 Number of Maximum Session: 最大同時通信セション数 ◆設定内容 PSYS Name:負荷抑制対象DPCF通信パス名 負荷抑制の対象とするDPCF通信パス名を8文字以内の英数字で指定します。 DPCF通信パス名については、以下を参照してください。 IDCMヘルプ IDCM使用手引書 Number of Maximum Session:最大同時通信セション数 PSYS Nameステートメントで設定したDPCF通信パスにおける同時に通信できるセション数の最大値を指定します。 指定できる値は、1~1000です。この値を超えたセションが、負荷抑制の対象となります。 ・ 負荷抑制機能を使用する場合、[SYSTEM ENVIRONMENT]セクションと[WRAPPER]セクションの各ステートメントをすべて定義 してください。 ・ [WRAPPER]セクションのPSYS NameステートメントとNumber of Maximum Sessionステートメントはペアで指定します。 - 292 - ・ 複数のDPCF通信パスに対して負荷抑制を行う場合には、複数の[WRAPPER]セクションにPSYS NameステートメントとNumber of Maximum Sessionステートメントをペアで指定します。 ・ Number of Maximum Sessionステートメントに指定する値は、IDCMネットワーク定義で指定した優先会話コネクション数以下の値 を指定してください。優先会話コネクション数より大きな値を指定した場合、負荷抑制されないことがあります。 IDCMネットワーク定義の詳細は、以下を参照してください。 IDCMヘルプ IDCM使用手引書 - 293 - 付録C データベース連携サービスの環境定義 データベース連携サービスの環境定義について説明します。 C.1 configファイル ■概要 configファイルは、OTSシステム起動時に反映される情報を管理している定義ファイルです。 注意 ・ configファイルの修正を反映させるには、OTSシステムを再起動する必要があります。 ・ 本ファイルで編集した値をInterstage管理コンソールから参照するためには、Interstage管理コンソールを再起動する必要がありま す。Interstage管理コンソールの起動・停止方法は、“運用ガイド(基本編)”の“Interstage管理コンソールによるInterstage運用”- “Interstage管理コンソールの起動・停止”を参照してください。 ■ファイル名 configファイルは、インストール時に、以下に格納されます。 C:\Interstage\ots\etc\config /opt/FSUNots/etc/config /opt/FJSVots/etc/config 注意 本製品のインストールパスがデフォルトの場合のパスです。 ■ファイル内情報 ◆形式: キー名=設定値 ◆設定例 OBSERVE_CYCLE_TIME=6 (注) TRAN_TIME_OUT=300 2PC_TIME_OUT=60 COM_RETRY_TIME=2 (注) COM_RETRY_MAX=3 (注) RECOVER_RETRY_TIME=30 (注) - 294 - RECOVER_RETRY_MAX=60 (注) RESOURCE_TRANMAX=5 OTS_TRACE_SIZE=4096 (注) RESOURCE_TRACE_SIZE=4096 (注) RECOVERY_TRACE_SIZE=4096 (注) OBSERVE_TRACE_SIZE=4096 (注) DATABASE_RETRY_TIME=5 (注) DATABASE_RETRY_MAX=5 (注) MEM_RETRY_TIME=5 (注) MEM_RETRY_MAX=5 (注) RSCSTOP_CHECK_COUNT=100 (注) OTS_VERSION=5 (注) JTS_VERSION=5 (注) TRACE_MODE=1 TRACE_LEVEL=1 JAVA_VERSION=14 PATH=C:\Interstage\JDK5\bin\java.exe....(Windows(R)の場合) PATH=/opt/FJSVawjbk/jdk5/bin/java.......(Solaris/Linuxの場合) 注)インストール時に作成されたconfigファイルには、該当項目は記載されていません。項目を指定すると、値は有効となりますが、省 略値から変更しないことを推奨します。 ポイント ・ タイムアウトの詳細については、“OLTPサーバ運用ガイド”を参照してください。 ・ configファイルの項目は、すべて省略可能です。省略時は、省略値が有効となります。 ◆キー一覧 キー 意味 OBSERVE_CYCLE_TIME 監視周期の指定 TRAN_TIME_OUT トランザクションタイムアウト検出時間の指定 2PC_TIME_OUT フェーズ間タイムアウト検出時間の指定 COM_RETRY_TIME トランザクション処理エラー時のリトライ間隔指定 COM_RETRY_MAX トランザクション処理リトライ上限回数の指定 RECOVER_RETRY_TIME OTSシステムリカバリ処理リトライ間隔指定 RECOVER_RETRY_MAX OTSシステムリカバリ処理リトライ上限回数の指定 RESOURCE_TRANMAX 1リソース管理プログラムのトランザクションの最大多重度 OTS_TRACE_SIZE OTSシステムのトレースログサイズ指定 RESOURCE_TRACE_SIZE リソース管理プログラムのトレースログサイズ指定 RECOVERY_TRACE_SIZE リカバリプロセスのトレースログサイズ指定 OBSERVE_TRACE_SIZE 監視プロセスのトレースログサイズ指定 DATABASE_RETRY_TIME データベースシステムアクセスのリトライ間隔指定 DATABASE_RETRY_MAX データベースシステムアクセスのリトライ上限回数指定 MEM_RETRY_TIME OTSシステム処理中のエラーでのリトライ間隔指定 MEM_RETRY_MAX OTSシステム処理中のエラーでのリトライ上限回数指定 RSCSTOP_CHECK_COUNT 通常停止からのトランザクション待ち合わせ回数指定 OTS_VERSION OTSのバージョン - 295 - キー 意味 JTS_VERSION JTSのバージョン JAVA_VERSION JDK/JREのバージョン PATH JDK/JREのパス TRACE_MODE トレースの出力形式 TRACE_LEVEL トレースの出力レベル ◆キー詳細 OBSERVE_CYCLE_TIME:監視周期の指定 OTSシステムが監視を実施する周期(秒単位)を指定します。以下の点に注意して設定してください。 - 本値に小さい値を設定すると、頻繁に監視が行われるため、システムのパフォーマンスが低下します。 - 本値に大きい値を設定すると、監視の間隔が長くなるため、異常の検出が遅くなります。 指定可能な範囲は、1~60です。省略値は、5です。 TRAN_TIME_OUT:トランザクションタイムアウト検出時間の指定 データベース連携サービスがトランザクションタイムアウト(beginからcommitまで)を検出する時間(秒単位)を指定します。アプリ ケーションにおいてset_timeoutメソッドでタイムアウト時間を設定した場合は、アプリケーションの設定が有効となります。 指定可能な範囲は、1~2147483647です。省略値は、300です。 2PC_TIME_OUT:フェーズ間タイムアウト検出時間の指定 OTSシステムがトランザクションの2PC(2フェーズコミット)で、リソース管理プログラムにおいて1フェーズと2フェーズ間のタイムアウ トを検出する時間(秒単位)を指定します。 指定可能な範囲は、1~2147483647です。省略値は、60です。 注意 CORBA サ ー ビ ス の ク ラ イ ア ン ト 側 の 無 通 信 監 視 時 間 ( CORBA サ ー ビ ス の 動 作 環 境 フ ァ イ ル の パ ラ メ タ “period_client_idle_con_timeout”の設定値×5)が“0”ではない場合、本値にはこの値よりも小さい値を設定してください。 COM_RETRY_TIME:トランザクション処理エラー時のリトライ間隔指定 トランザクション処理で通信異常などのエラーが発生した場合に、その通信をリトライする間隔(秒単位)を指定します。 指定可能な範囲は、1~600です。省略値は、2です。 COM_RETRY_MAX:トランザクション処理リトライ上限回数の指定 トランザクション処理で通信異常などのエラーが発生した場合に、その通信をリトライする上限回数を指定します。 指定可能な範囲は、1~2147483647です。省略値は、3です。 RECOVER_RETRY_TIME:OTSシステムリカバリ処理リトライ間隔指定 OTSシステムのリカバリ処理で通信異常などのエラーが発生した場合に、その通信をリトライする間隔(秒単位)を指定します。 指定可能な範囲は、1~600です。省略値は、30です。 - 296 - RECOVER_RETRY_MAX:OTSシステムリカバリ処理リトライ上限回数の指定 OTSシステムのリカバリ処理で通信異常などのエラーが発生した場合に、その通信をリトライする上限回数を指定します。 指定可能な範囲は、1~2147483647です。省略値は、60です。 RESOURCE_TRANMAX:1リソース管理プログラムのトランザクションの最大多重度 1リソース管理プログラムのトランザクションの最大多重度を指定します。 指定可能な範囲は、1~2147483647です。省略値は、5です。 ポイント OTSシステムのスレッド多重度と1リソース管理プログラムのトランザクションの最大多重度は、以下の関係を保つように設定してくだ さい。 OTSシステムのスレッド多重度 =< 1リソース管理プログラムのトランザクションの最大多重度 OTS_TRACE_SIZE:OTSシステムのトレースログサイズ指定 OTSシステムのトレースログサイズ(Kバイト単位)を指定します。 指定可能な範囲は、128~2147483647です。省略値は、4096(Kバイト)です。 RESOURCE_TRACE_SIZE:リソース管理プログラムのトレースログサイズ指定 リソース管理プログラムのトレースログサイズ(Kバイト単位)を指定します。 指定可能な範囲は、128~2147483647です。省略値は、4096(Kバイト)です。 RECOVERY_TRACE_SIZE:リカバリプロセスのトレースログサイズ指定 リカバリプロセスのトレースログサイズ(Kバイト単位)を指定します。 指定可能な範囲は、128~2147483647です。省略値は、4096(Kバイト)です。 OBSERVE_TRACE_SIZE:監視プロセスのトレースログサイズ指定 監視プロセスのトレースログサイズ(Kバイト単位)を指定します。 指定可能な範囲は、128~2147483647です。省略値は、4096です。 DATABASE_RETRY_TIME:データベースシステムアクセスのリトライ間隔指定 OTSシステムでのデータベースシステムへのアクセス時に、メモリ資源不足などのリトライ可能なエラーが発生した場合のリトライ間 隔(秒単位)を指定します。 指定可能な範囲は、1~600です。省略値は、5です。 DATABASE_RETRY_MAX:データベースシステムアクセスのリトライ上限回数指定 OTSシステムでのデータベースシステムへのアクセス時に、メモリ資源不足などのリトライ可能なエラーが発生した場合にリトライす る上限回数を指定します。 指定可能な範囲は、1~2147483647です。省略値は、5です。 MEM_RETRY_TIME:OTSシステム処理中のエラーでのリトライ間隔指定 OTSシステムの処理中に、メモリ資源不足などのリトライ可能なエラーが発生した場合のリトライ間隔(秒単位)を指定します。 指定可能な範囲は、1~600です。省略値は、5です。 - 297 - MEM_RETRY_MAX:OTSシステム処理中のエラーでのリトライ上限回数指定 OTSシステムの処理中に、メモリ資源不足などのリトライ可能なエラーが発生した場合にリトライする上限回数を指定します。 指定可能な範囲は、1~2147483647です。省略値は、5です。 RSCSTOP_CHECK_COUNT:通常停止からのトランザクション待合せ回数指定 トランザクション処理中にリソース管理プログラムを通常停止し、トランザクション完了をOBSERVE_CYCLE_TIMEの監視同期に合 わせた待合せ回数を指定します。 OBSERVE_CYCLE_TIME × RSCSTOP_CHECK_COUNT秒間、トランザクションの完了を待ち合わせ、時間内に完了しない場 合は、リソース管理プログラムの停止を通常停止から強制停止に切り替えます。 指定可能な範囲は、1~2147483647です。省略値は、100です。 OTS_VERSION:OTSのバージョン OTSのバージョンを指定します。通常、変更しないでください。 省略値は、5です。 JTS_VERSION:JTSのバージョン JTSのバージョンです。通常、変更しないでください。 省略値は、5です。 JAVA_VERSION:JDK/JREのバージョン JTS用リソース管理プログラムが利用するJavaのバージョンです。14を指定します。 省略値は、14です。 PATH:JDK/JREのパス JTS用リソース管理プログラムが利用するjavaコマンドへのパスをフルパスで指定します。java実行体を含めるパスを指定してください。 初期値は、JDK/JRE 5.0のバージョンに対応したパスです。通常、変更しないでください。 注意 - JTS用のリソース管理プログラムを利用する場合は、必ず指定してください。 - Interstage Application Serverに同梱されているJDK/JREのパスを指定してください。 TRACE_MODE:トレースの出力形式 JTSを利用した環境で出力されるトレースの出力形式を、以下から選択して指定します。 - 異常発生時に、OTSのインストールパス/var配下にトレースファイルを出力する場合:“1” 注)通常、“1”を選択してください。 - システムの状態に関係なく、常時、OTSのインストールパス/var配下にトレースファイルを出力する場合:“2” 注)常時出力されるため、ファイルサイズに注意してください。 - トレースファイルを出力しない場合:“3” TRACE_LEVEL:トレースの出力レベル JTSを利用した環境で出力されるトレースのモードを、“1”から“5”までの数値で指定します。数値が大きいほど、詳細なトレース情 報を出力します。 通常運用時は、“1”が指定されます。パフォーマンスに影響があるため、通常、変更しないでください。 - 298 - C.2 セットアップ情報ファイル ■概要 セットアップ情報ファイルは、otssetupコマンドによるOTSシステム動作環境の設定時に指定するファイルです。isinitコマンドでInterstage の初期化を行う場合は、“Interstage動作環境定義”をカスタマイズする必要があります。Interstage動作環境定義の詳細については、 “運用ガイド(基本編)”を参照してください。 セットアップ情報ファイルは、otssetupコマンド実行時に作成します。1度作成したセットアップ情報ファイルは、次回のセットアップ時に も使用可能であるため、保管しておいてください。 ■ファイル内情報 ◆形式: パラメタ名=設定値 ◆設定例 MODE=SYS LOGFILE=c:\ots\logfile........(Windows(R)の場合) LOGFILE=/dev/rdsk/c0t0d0s0....(Solarisの場合) LOGFILE=/dev/raw/raw1.........(Linuxの場合) TRANMAX=10 PARTICIPATE=4 OTS_FACT_THR_CONC=5 OTS_RECV_THR_CONC=2 JTS_RMP_PROC_CONC=5 JTS_RMP_THR_CONC=16 HOST=otshost PORT=8002 LOCALE=EUC ポイント 太字以外の項目は、省略可能です。省略時は、省略値が有効となります。 C.2.1 MODE: セットアップ種別 OTSシステムが動作するホストか、リソース管理プログラムだけが動作するホストかを、以下から選択して指定します。大文字で指定し てください。 ・ OTSシステムおよびリソース管理プログラムが動作するホストの場合:“SYS” OTSシステム動作環境のセットアップ、リソース管理プログラムの動作環境のセットアップ、およびシステムログファイルの作成を行 います。 ・ リソース管理プログラムだけが動作するホストの場合:“RMP” リソース管理プログラムの動作環境のセットアップだけを行います。 注)“RMP”を設定してセットアップした環境では、OTSシステムを起動できません。 Interstage動作環境定義ファイルの“OTS Setup mode”に相当します。 “RMP”を設定する場合、リソース管理プログラムを正しく動作させるために、OTSシステムが動作するホストのネーミングサービスを参 照する必要があります。以下のどちらかの方法でセットアップを行ってください。 ・ “RMP”を設定すると同時に、OTSシステムが動作しているホストの“HOST”/“PORT”/“LOCALE”を指定してセットアップを行 います。この場合、ネーミングサービスはOTSシステムではなく、“RMP”を設定したホストのネーミングサービスが利用されます。 “RMP”を設定したホストとOTSシステムが動作するホストのネーミングサービスをそれぞれ独立させて運用させることが可能となり ます。 - 299 - ・ isinitコマンドに“type3”を指定してInterstageの初期化(NS Use/NS Host/NS Port Number/NSに、OTSシステムが動作するホ ストのネーミングサービスを設定)を行った後、“RMP”を設定してotssetupコマンドでセットアップを行ってください。これにより、OTS システムが動作するホストと“RMP”を設定したホストのネーミングサービスは、共有されます。 注意 ・ “SYS”を設定したホスト同士のネーミングサービスを共有することはできません。必ず1つのネーミングサービスには1つの“SYS”を 設定したホストになるようにしてください。“RMP”を設定する場合は、複数のホストでネーミングサービスを共有できます。 ・ “RMP”を設定した場合、otsstartコマンドではOTSシステムを起動できません。otsstartrscコマンドでリソース管理プログラムの起動 だけを行うことができます。 C.2.2 LOGFILE: システムログファイルのパス OTSシステムのシステムログファイルを指定します。 OTSシステムのシステムログファイルへのパス(ドライブ名を含む絶対パス)を、制御文字(ShiftJISコードの0x00~0x1F,0x7F)を除 く文字列で指定します。半角英文字の大文字と小文字、全角英文字の大文字と小文字は区別されません。 OTSシステムのシステムログファイルと使用するローデバイスまたはファイル名を、スラッシュ(/)で始まる空白文字と半角カナを除く 文字列で指定します。 “MODE”に“SYS”を設定した場合に有効となります。 最大長は、255文字です。 Interstage動作環境定義ファイルの“OTS path for system log”に相当します。 ポイント ローデバイスの作成手順を以下に示します。 1. オペレーティングシステムのpartedコマンド/fdiskコマンドで、ローデバイスのパーティションを作成します。 2. ディスクのパーティションに対応するudevのブロックデバイス名を特定します。 partedコマンドを使用した場合の例を以下に示します(#:プロンプト)。 [RHEL5の場合] # parted /dev/sda (parted) p : 番号 開始 1 32.3kB 2 107MB 3 9656MB 終了 107MB 9656MB 10.7GB サイズ タイプ 107MB プライマリ 9550MB プライマリ 1078MB プライマリ ファイルシステム ext3 (parted) q # udevinfo -q path -n /dev/sda3 /block/sda/sda3 # udevinfo -q env -p /block/sda/sda3 | grep ID_PATH ID_PATH=pci-0000:00:10.0-scsi-0:0:0:0 [RHEL6の場合] # parted /dev/sda (parted) p - 300 - フラグ boot lvm lvm : 番号 1 2 8 開始 1049kB 211MB : 77.5GB 終了 211MB 32.4GB サイズ 210MB 32.2GB タイプ primary primary 78.5GB 974MB logical ファイルシステム ext4 ext4 フラグ boot (parted) q # udevadm info --query=path --name=/dev/sda8 /devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda8 # udevadm info --query=property --path=/devices/pci0000:00/0000:00:1f.2/host0/target0:0:0/0:0:0:0/block/sda/sda8 | grep ID_PATH ID_PATH=pci-0000:00:1f.2-scsi-0:0:0:0 3. udevの設定ファイル(/etc/udev/rules.d/60-raw.rules)を編集し、作成したパーティションをバインドします。 [RHEL5の場合] ACTION=="add", KERNEL=="sda3", ENV{ID_PATH}=="pci-0000:00:10.0-scsi-0:0:0:0", RUN+="/bin/raw /dev/raw/raw1 %N" [RHEL6の場合] ACTION=="add", KERNEL=="sda8", ENV{ID_PATH}=="pci-0000:00:1f.2-scsi-0:0:0:0", RUN+="/bin/raw /dev/raw/raw1 %N" 4. udevによりローデバイスのアクセス権限が正しく設定されるように、/etc/udev/rules.d/配下の追加パーミッションルールファイルを 必要に応じて編集します。 注意 ・ ローデバイスをバインドするブロックデバイスは、パーティションを指定してください。パーティション番号のないハードディスクデバ イス(/dev/sdgなど)は、ディスクラベル(パーティションテーブル)を含んでいるため、ローデバイスとして使用しないでください。 ・ セットアップ情報ファイルのログファイルの指定には、必ずキャラクタデバイスにバインドしたデバイス名を指定してください。 C.2.3 TRANMAX: 最大トランザクション多重度 トランザクションの最大数を指定します。必ず指定する必要があります。 また、MODEに“RMP”を設定した場合は、連携するOTSシステム(MODEに“SYS”を設定しているシステム)と同じ値を設定してくださ い。 設定可能な範囲は、1~256です。 設定可能な範囲は、1~1024です。 Interstage動作環境定義ファイルの“OTS maximum Transaction”に相当します。 C.2.4 PARTICIPATE: 1トランザクションに参加するリソース数 1トランザクションに参加するリソースの最大数を指定します。 MODEに“SYS”を設定した場合に有効となります。 設定可能な範囲は、2~32です。省略値は、4です。 Interstage動作環境定義ファイルの“OTS Participate”に相当します。 - 301 - C.2.5 OTS_FACT_THR_CONC: OTSシステムのスレッド多重度 OTS シ ス テ ム の ス レ ッ ド 多 重 数 を 指 定 し ま す 。 指 定 し た 数 だ け 、 begin/commit/rollback な ど の Current イ ン タ フ ェ ー ス 、 お よ び UserTransactionインタフェースを同時に動作させることが可能となります。 MODEに“SYS”を設定した場合に有効となります。 設定可能な範囲は、1~31です。省略値は、5です。 Interstage動作環境定義ファイルの“OTS Multiple degree”に相当します。 最大値を超えた場合は、警告メッセージ“ots9013”が出力され、自動的に31が設定されます。 ポイント OTSシステムのスレッド多重度は、トランザクション処理性能を最大限に引き出すようにチューニングされているため、省略値から変更 する必要はありません。 変更する場合は、以下の関係を保つように設定してください。 OTSシステムのスレッド多重度 =< リソース管理プログラムの多重度(注) OTSシステムのスレッド多重度 =< 1リソース管理プログラムのトランザクションの最大多重度 注)JTS用リソース管理プログラムにおける多重度は、以下の算出式で見積もってください。 JTS用のリソース管理プログラムのプロセス多重度(JTS_RMP_PROC_CONC) × JTS用のリソース管理プログラムのスレッド多重度(JTS_RMP_THR_CONC) C.2.6 OTS_RECV_THR_CONC: リカバリプロセスのスレッド多重度 リカバリプログラムのスレッド多重数を指定します。指定した数だけ、リカバリ処理を同時に動作させることが可能となります。 MODEに“SYS”を設定した場合に有効となります。 設定可能な範囲は、1~2147483647です。省略値は、2です。 Interstage動作環境定義ファイルの“OTS Recovery”に相当します。 C.2.7 JTS_RMP_PROC_CONC: JTS用のリソース管理プログラムのプロセス多重 度 JTS用のリソース管理プログラムのプロセス多重度を指定します。使用するリソース(データベース、リソースアダプタなど)の数だけ指 定することを推奨します。 設定可能な範囲は、1~32です。省略値は、2です。5以下の場合、変更する必要はありません。 Interstage動作環境定義ファイルの“OTS JTS's RMP Multiple degree of Process”に相当します。 最大値を超えた場合は、警告メッセージ“ots9017”が出力され、自動的に32が設定されます。 ポイント リソース管理プログラムの多重度は、トランザクション処理性能を最大限に引き出すようにチューニングされているため、省略値から変 更する必要はありません。 変更する場合は、OTSシステムのスレッド多重度とリソース管理プログラムの多重度の関係を以下のように設定してください。 OTSシステムのスレッド多重度 =< リソース管理プログラムの多重度(注) 注)JTS用リソース管理プログラムにおける多重度は、以下の算出式で見積もってください。 JTS用のリソース管理プログラムのプロセス多重度(JTS_RMP_PROC_CONC) × JTS用のリソース管理プログラムのスレッド多重度(JTS_RMP_THR_CONC) - 302 - C.2.8 JTS_RMP_THR_CONC: JTS用のリソース管理プログラムのスレッド多重度 JTS用のリソース管理プログラムのスレッド多重度を指定します。 設定可能な値は、1~2147483647です。省略値は、16です。 通常、変更する必要はありません。 Interstage動作環境定義ファイルの“OTS JTS's RMP Multiple degree of Thread”に相当します。 ポイント リソース管理プログラムの多重度は、トランザクション処理性能を最大限に引き出すようにチューニングされているため、省略値から変 更する必要はありません。 変更する場合は、OTSシステムのスレッド多重度とリソース管理プログラムの多重度の関係を以下のように設定してください。 OTSシステムのスレッド多重度 =< リソース管理プログラムの多重度(注) 注)JTS用リソース管理プログラムにおける多重度は、以下の算出式で見積もってください。 JTS用のリソース管理プログラムのプロセス多重度:JTS_RMP_PROC_CONC × JTS用のリソース管理プログラムのスレッド多重度:JTS_RMP_THR_CONC C.2.9 HOST: OTSシステムが動作するホスト名 OTSシステムが利用するネーミングサービスのホスト名を、英数字、マイナス記号(-)、またはピリオド(.)から構成される64文字以内の英 字から始まる文字列で指定します。最後の文字には、マイナス記号(-)、またはピリオド(.)を記述できません。 MODEに“RMP”を設定した場合に有効となります。 本ステートメントは、省略可能です。設定する場合は、PORTを同時に設定する必要があります。 本ステートメントの利用方法については、MODEを参照してください。 Interstage動作環境定義ファイルの“OTS Host”に相当します。 注意 “isinit”コマンドで“type3”を選択している場合は、使用しないでください。 C.2.10 PORT: OTSシステムが動作するホストのCORBAサービスのポート番号 OTSシステムが利用するネーミングサービスのポート番号を指定します。 MODEに“RMP”を設定した場合に有効となります。 設定可能な範囲は、1024~65535です。 本ステートメントは、省略可能です。設定する場合は、HOSTを同時に設定する必要があります。 本ステートメントの利用方法については、MODEを参照してください。 Interstage動作環境定義ファイルの“OTS Port”に相当します。 注意 isinitコマンドに“type3”を指定してInterstageを初期化した場合は、使用しないでください。 C.3 RMPプロパティ ■概要 JTS用リソース管理プログラムに対するプロパティファイルです。 RMPプロパティは、Javaのプロパティリストの形式で、その他のキーを設定することもできます。設定されたキーと値は、JTS用リソース 管理プログラムが動作するJavaVMのシステムプロパティに反映されます。 - 303 - ■ファイル名 RMPプロパティファイルは、インストール時に、以下に格納されます。 C:\Interstage\ots\etc\RMP.properties /opt/FSUNots/etc/RMP.properties /opt/FJSVots/etc/RMP.properties 注意 本製品のインストールパスがデフォルトの場合のパスです。 ■ファイル内情報 ◆形式: パラメタ名=設定値 ◆パラメタ RecoveryTarget: リカバリ対象 JTS用のリソース管理プログラムの起動時にリカバリを行う対象をリソース定義名で指定します。リカバリ対象が設定されていない場合、 リカバリ対象が複数の場合は、空白で区切って指定してください。 ポイント RecoveryTargetを省略した場合でも、登録済みリソースに対してリカバリ処理を行います。 例 リカバリ対象が3つの場合 RecoveryTarget=Oracle_resource1 Oracle_resource2 Oracle_resource3 JavaPath: Javaコマンドへのパス 必要な場合に、記述を追加します。通常、指定しないでください。指定した場合、動作の保証はできません。 JavaCommandOption: Javaコマンドに受け渡すオプション 必要な場合に、記述を追加します。通常、指定しないでください。指定した場合、動作の保証はできません。 - 304 - Classpath: 追加するクラスパス 必要な場合に、記述を追加します。通常、指定しないでください。指定した場合、動作の保証はできません。 クラスタサービス機能利用時に、リソースと連携するために必要となるクラスライブラリへのパスを設定します。クラスライブラリの詳細 については、“アプリケーション作成ガイド(データベース連携サービス編)”の“リソース管理プログラムの作成から起動まで”を参照 してください。 Librarypath:追加するライブラリパス リソースと連携するために必要となるライブラリへのパスを指定します。 JTS用のリソース管理プログラムの環境変数PATHに追加されます。 JTS用のリソース管理プログラムの環境変数LD_LIBRARY_PATHに追加されます。 Environ:追加する環境変数 リソースと連携するために必要となる環境変数を指定します。 例 環境変数ORACLE_HOMEを指定する場合 Environ ORACLE_HOME=C:\app\user\product\11.2.0\db Environ ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome C.4 リソース定義ファイル ■概要 OTS/JTSが連携するリソース(データベース、リソースアダプタなど)に接続するための情報を定義するファイルです。otssetrscコマン ドを利用して、リソース単位に登録します。 ■ファイル内情報 ◆形式: キー名=設定値 ◆設定例 OTS用リソース定義ファイル # 環境変数 ENVIRON ORACLE_SID=orac ENVIRON ORACLE_HOME=/opt/oracle.............(Solaris/Linuxの場合) - 305 - ENVIRON LD_LIBRARY_PATH=/opt/oracle/lib.....(Solaris/Linuxの場合) # 使用するデータベースシステム名とOPENINFO文字列、CLOSEINFO文字列 NAME=oracle_rmp_thread RMNAME=Oracle_XA OPENINFO=Oracle_XA+Acc=P/system/manager+SesTm=0+Threads=true CLOSEINFO= THREADS=TRUE................................(Solaris/Linuxの場合) JTS用リソース定義ファイル # database1 name=xads1 rscType=JTS type=JDBC lookUpName=jdbc/XADataSource initialContextFactory=com.sun.jndi.fscontext.RefFSContextFactory providerURL=file:/tmp/JNDI user=dbuser password=dbpass logfileDir=c:\interstage\ots\var............(Windows(R)の場合) logfileDir=/opt/FSUNots/var.................(Solarisの場合) logfileDir=/opt/FJSVots/var.................(Linuxの場合) 注意 キーの名前は、OTSおよびJTSで大文字/小文字が異なりますが、同じ意味を持ちます。 ◆キー一覧 意味 キー(JTS) キー(OTS) ENVIRON - 環境変数の設定 NAME name リソース定義名 RMNAME - リソースマネージャ名 OPENINFO - オープン文字列 CLOSEINFO - クローズ文字列 THREADS - スレッドモード OTS_RMP_PROC_CONC - OTS用のリソース管理プログラムの多重度 RSCTYPE rscType リソース定義ファイルの種類 - type リソースの種類 - lookupName リソースの検索名 - initialContextFactory initialContextFactory名 - providerURL プロバイダURL USER - ユーザ名 - user ユーザ名 - password パスワード GROUP - グループ名 - logfileDir リソースのログファイル格納ディレクトリ - 306 - ◆キー詳細 ENVIRON: 環境変数の設定(OTS) 値dataに、リソース管理プログラム、またはリソース管理プログラムと同じプロセス内で動作するデータベースライブラリに渡す環境 変数envを指定します。省略可。 リソース管理プログラムを使用するサーバアプリケーションの起動時に指定するデータベースへの環境変数と同一の環境変数を指 定してください。 また、リソース定義ファイルには、以下のような$指定できません。 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/oracle/lib 使用するデータベースがSymfoware/RDBの場合は、環境変数LD_LIBRARY_PATHにSymfoware/RDBの必須製品であるライブ ラリのパス名を指定してください。 NAME、name: リソース定義名(OTS、JTS) otssetrscコマンドでの登録時に、本パラメタに指定したリソース定義名で登録します。1度登録されたリソース定義ファイルは、すべ てリソース定義名で扱うことができます。リソース定義名は、32文字以内で指定します。省略不可。 “JTSRMP”は予約語であるため、リソース定義名として使用できません(一部またはすべてを小文字にしても使用できません)。 JTS用リソース定義ファイルでは、isj2eeadminコマンドで登録するJ2EEリソース定義の接続対象となるリソースの“定義名”を指定し てください。詳細については、“リファレンスマニュアル(コマンド編)”の“isj2eeadmin”を参照してください。 RMNAME: リソースマネージャ名(OTS) system_nameに、データベースのシステム名を以下から選択して指定します。 - Oracleの場合:“Oracle_XA” - Symfoware/RDBの場合:“RDBII” - SQL Serverの場合:“MS_SQL_Server” - MQDの場合:“XA_MQD” OPENINFO: オープン文字列(OTS) open_dataに、データベースのベンダが公開する、データベースをオープンする場合に必要なopen文字列を、256文字以内の文字 列で指定します。 指定する内容については、各データベースのマニュアルを参照してください。 注意 - OPENINFOに指定するユーザ名は、各データベースに対するアクセス権限がないと、リソース管理プログラムの起動に失敗し ます。必要な権限については、各データベースのマニュアルを参照してください。 - プロセスモード/スレッドモードのタイプが、リソース管理プログラム作成時と動作時(リソース定義ファイル内のスレッド指定)と で異なる場合、リソース管理プログラムの起動が誤動作する可能性があります。必ずタイプをあわせて運用してください。 - 307 - CLOSEINFO: クローズ文字列(OTS) close_dataに、データベースのベンダが公開する、データベースをクローズする場合に必要なclose文字列を、256文字以内の文字 列で指定します。 指定する内容については、各データベースのマニュアルを参照してください。 THREADS: スレッドモード(OTS) リソース管理プログラムのモードを以下から選択して指定します。 - プロセスモードの場合:“FALSE”(省略時) - スレッドモードの場合:“TRUE” OTS_RMP_PROC_CONC: OTS用のリソース管理プログラムの多重度(OTS) OTS用のリソース管理プログラムの多重数を指定します。通常、変更する必要はありません。 指定可能な範囲は、1~31です。省略値は、5です。 最大値を超えた場合は、警告メッセージ“ots9017”を出力し、31を自動的に設定します。 注意 リソース管理プログラムの多重度は、トランザクション処理性能を最大限に引き出すようにチューニングされているため、省略値から 変更する必要はありません。 変更する場合は、OTSシステムのスレッド多重度とリソース管理プログラムの多重度の関係を以下のように設定してください。 OTSシステムのスレッド多重度 =< リソース管理プログラムの多重度 RSCTYPE、rscType: リソース定義ファイルの種類(OTS、JTS) リソース定義ファイルの種別を以下から選択して指定します。 - OTSを利用する場合:“OTS”(省略時) - JTSを利用する場合:“JTS” 注)JTSを利用する場合は、必ず“JTS”を指定してください。 type: リソースの種類(JTS) リソースの種類を以下から選択して指定します。省略不可。 - JDBCを利用してデータベースと接続する場合:“JDBC”/“DBMS”(旧バージョンでの指定方法) - J2EE Connector Architectureを利用してリソースアダプタと接続する場合は、“JCA” lookupName: リソースの検索名(JTS) JDBCを利用してデータベースと接続する場合は、データベースが提供するデータソースをバインドした名前を指定します。isj2eeadmin コマンドで登録するJ2EEリソース定義で設定したデータソース名と同じ値を指定してください。 J2EE Connector Architectureを利用してリソースアダプタと接続する場合は、リソースアダプタの配備時に設定した“リソース名”を指 定してください。 initialContextFactory: initialContextFactory名(JTS) バインドされたデータソース参照時に使用するinitialContextFactoruy名を指定します。isj2eeadminコマンドで登録するJ2EEリソース 定義で設定したクラス名と同じ値を指定してください。JDBCを利用してデータベースと接続する場合は、必ず指定してください。 - 308 - providerURL: プロバイダURL(JTS) バインドされたデータソース参照時に使用するprovider URLを指定します。isj2eeadminコマンドで登録するJ2EEリソース定義で設 定したクラス名と同じ値を指定してください。 USER: ユーザ名(OTS) リソース管理プログラムの実行ユーザを指定します。otssetrscコマンド実行時に、-uオプションを指定した場合は、オプションに指定 されたユーザ名が有効となります。 “GROUP”と同時に指定する必要があります。 指定したユーザは、“GROUP”に指定するグループに所属している必要があります。 強化セキュリティモードの場合は、強化セキュリティモード設定時に指定したグループに所属している必要があります。 user: ユーザ名(JTS) リソースとの接続時にユーザ名が必要な場合に指定します。isj2eeadminコマンドで登録するJ2EEリソース定義によって設定した ユーザ名を指定してください。 password: パスワード(JTS) リソースとの接続時にパスワードが必要な場合に指定します。isj2eeadminコマンドで登録するJ2EEリソース定義によって設定した ユーザのパスワードを指定してください。 GROUP: グループ名(OTS) リソース管理プログラムの実行ユーザを指定します。otssetrscコマンド実行時に、-gオプションを指定した場合は、オプションに指定 されたグループ名が有効となります。 “USER”と同時に指定する必要があります。 強化セキュリティモードの場合、本設定は無効となり、強化セキュリティモード設定時に指定したグループ名が有効となります。 logfileDir: リソースのログファイル格納ディレクトリ(JTS) 接続したリソースのトラブルを調査する場合は、トレースログを採取するディレクトリを指定してください。ディレクトリ名の最後に、セ パレータを付加しないでください。 通常、指定しません。 C.5 OTSシステム用業務システム情報定義ファイル ■概要 トランザクションサービスがSystemwalker Resource Coordinatorと連携して動的ダウンリカバリを実現するためのOTSシステム用業務シ ステム情報定義ファイルです。 ■ファイル内情報 ◆形式: キー名=設定値 ◆パラメタ factory_quemode: トランザクション処理閉塞の動作(OTS、JTS) トランザクションサービスのトランザクション処理閉塞の動作を、以下から選択して指定します。 - トランザクション開始処理を受け付けず、トランザクション開始要求をエラーとする場合:“que” - 309 - - トランザクション開始処理を受け付け、トランザクション処理を待ち状態とする場合:“dsp” C.6 アプリケーション用業務システム情報定義ファイル ■概要 トランザクションサービスがSystemwalker Resource Coordinatorと連携して動的ダウンリカバリを実現するためのアプリケーション用業務 システム情報定義ファイルです。 ■ファイル内情報 ◆形式: キー名=設定値 ◆パラメタ resource: リソース管理プログラムの情報(OTS) 対象となる業務で使用しているリソース管理プログラムのフルパスとリソース定義名を、カンマ(,)で区切って指定します。 注意 - リソース管理プログラムのフルパスは、必ずダブルクォーテーション("")で囲んでください。 - 複数指定する場合は、複数行で指定してください。 workUnit: ワークユニットの情報(OTS、JTS) 対象となる業務のワークユニット名を指定します。 ポイント 複数指定する場合は、カンマ(,)で区切ります。複数行で指定することもできます。 - 310 - 付録D イベントサービスの環境定義 イベントサービスの動作環境ファイル、およびイベントチャネル・サプライヤ・コンシューマ総数の見積もり方法について説明します。 イベントサービスの動作環境ファイルは、以下に格納されます。 格納パス C:\Interstage\eswin\etc (インストールパスはデフォルト) /etc/opt/FJSVes (インストールパスはデフォルト) /etc/opt/FJSVes ファイル traceconfig 上記以外のファイルは、イベントサービスの動作環境としてカスタマイズできません。エディタなどで編集しないでください。 本ファイルは以下の製品で使用することができます。 ・ Interstage Application Server Enterprise Edition ・ Interstage Application Server Standard-J Edition D.1 traceconfig ■概要 traceconfigファイルは、イベントサービスのトレース動作環境に関する定義が格納されたファイルです。 ■ファイル名 C:\Interstage\eswin\etc\traceconfig (インストールパスはデフォルト) /etc/opt/FJSVes/traceconfig (インストールパスはデフォルト) /etc/opt/FJSVes/traceconfig ■ファイル内情報 traceconfigファイルは、以下の形式で値を設定します。 - 311 - ◆形式: パラメタ名 = 設定値 ◆パラメタ: 以下の動作環境について、パラメタ設定値を変更することができます。 パラメタ値を変更した場合、次回のイベントサービス起動時より有効となります。 パラメタ名 初期値 意味 省略値 指定範囲 trace_size 1024 512 トレース情報の採取に使用するバッファのサイズをキロバイト単位 で指定します。 (注1) 512~102400 trace_file_number 50 採取するトレース情報ファイルの最大数を指定します。トレース情 報ファイルの数が指定値を超えた場合は、古いトレース情報ファイ ルに上書きします。 10 50 10 50~1000 10~1000 trace_auto yes トレース情報の自動採取を有効にするかを指定します。 yes ・ yes: トレース情報の自動採取を有効とする。 (注2) yes, no ・ no : トレース情報の自動採取を無効とする。 process trace_buffer 内部トレースを採取する単位を指定します。 process ・ process: プロセス単位で内部トレースを採取する。 process, system ・ system: イベントサービス単位で内部トレースを採取する。 注1) トレース情報の出力サイズはチャネル数、コンシューマ数、サプライヤ数、および通信頻度によって異なります。起動処理系、通信処 理系、および停止処理系で使用するトレース情報のバッファサイズを以下に記載します。 - 312 - プロセス単位で内部トレースを採取する(trace_buffer = process)場合、トレース情報の出力サイズはチャネル数、コンシューマ数、サ プライヤ数、および通信頻度によって異なります。起動処理系、通信処理系、および停止処理系で使用するトレース情報のバッファサ イズを以下に記載します。 なお、イベントサービス単位で内部トレースを採取する(trace_buffer = system)場合は、起動処理系、通信処理系、および停止処理系 で使用するトレース情報を1つのバッファに格納されるため、それぞれを加算してください。 ・ 起動処理系 イベントチャネル起動: 3.2KB サプライヤ起動処理(pushメソッドを出すまで): 1.0KB コンシューマ起動処理(pullメソッドを出すまで): 1.0KB ・ 通信処理系 pushメソッド: 0.8KB pullメソッド(受信成功): 1.2KB pullメソッド(COMM_FAILURE[minor=0x464a09c1]): 1.0KB ・ 停止処理系 イベントチャネル停止: 3.4KB サプライヤdisconnect処理: 0.5KB コンシューマdisconnect処理: 0.8KB トレース情報バッファサイズを初期設定で運用した場合の計算例を以下に示します。 【1チャネルで、コンシューマ数:サプライヤ数が1:1の場合】 1回の通信(push/pull)で2.0KB(0.8KB+1.2KB)のバッファサイズが必要となります。 トレース情報バッファは、バッファを半分ずつサイクリックに使用するため、トレース情報バッファ(サイズ:1024KB)に格納できる通 信のトレース情報数は256回となります。 (トレース情報バッファサイズ ÷ 2) ÷ 1回の通信に必要なバッファサイズ = (1024KB ÷ 2) ÷ 2.0KB = 256回 40秒に1回の通信を行うと仮定した場合、約2.8時間の通信をロギングできることになります。 256 × 40秒 = 10240秒 = 約2.8時間 上記の例では、トレース情報を自動採取する事象が発生するまでの約2.8時間分のトレース情報を採取することができます。 トレース情報バッファサイズは、少なくとも5分以上のトレース情報が採取可能なサイズを指定してください。 トレース情報バッファサイズを初期値から変更した場合、その増分だけ共用メモリ使用量が増加します(キロバイト単位)。 注2) トレース情報の自動採取を有効とする(trace_auto = yes)場合、トレースファイルは以下のファイル名で出力されます。(XXX:3桁の 10進数の数値) C:\Interstage\eswin\var\ESLOGXXX /var/opt/FJSVes/ESLOGXXX プロセス単位で内部トレースを採取する(trace_buffer = process)場合 - イベントサービスのデーモンプロセスのログ情報 /var/opt/FJSVes/ESLOGDUMPDAEMONXXX - イベントファクトリプロセスのログ情報 /var/opt/FJSVes/ESLOGDUMPFACTORYXXX - 313 - - 静的イベントチャネルプロセスのログ情報 /var/opt/FJSVes/ESLOGDUMPグループ名XXX - 動的イベントチャネルプロセスのログ情報 /var/opt/FJSVes/ESLOGDUMPインプリメンテーション名XXX イベントサービス単位で内部トレースを採取する(trace_buffer = system)場合 /var/opt/FJSVes/ESLOGXXX D.2 サプライヤ・コンシューマ総数の見積もり方法 不揮発チャネル運用時、同じユニットを使用するイベントチャネルに接続するサプライヤ・コンシューマの総数は、以下の見積もり式を 参考にして見積もってください。 イベントチャネルの最大接続数の合計値(注) + 10 < ユニット定義ファイルのtranmax値 注) 同じユニットを使用するすべてのイベントチャネルについて、イベントチャネルごとに以下の値を求めて、その合計値を算出してく ださい。 イベントチャネルの最大接続数 (esmkchnlコマンドの-mオプションの指定値(省略値:16)) × 2 イベントチャネルの最大接続数 (esmkchnlコマンドの-mオプションの指定値(省略値:16)) + 16 - 314 - 付録E Interstage HTTP Serverの環境定義 Interstage HTTP Serverの運用状態をチューニングするには、Interstage管理コンソールを使用して設定する方法と、Interstage HTTP Serverの環境定義ファイル(httpd.conf)を使用して設定する方法があります。 Interstage管理コンソールを使用して設定する場合、以下の手順で環境設定を行います。Interstage管理コンソールの起動については “運用ガイド(基本編)”の“Interstage管理コンソールによるInterstage運用”を、Interstage管理コンソールの定義詳細についてはInterstage 管理コンソールのヘルプを参照してください。 ・ Interstage管理コンソールのスタンドアロンサーバで環境設定を行う場合 1. スタンドアロンサーバのInterstage管理コンソールにログインします。 2. [システム] > [サービス] > [Webサーバ] > [Webサーバ名] > [環境設定]タブ > [Webサーバ:環境設定](詳細設定[表示])画 面を使用して環境設定を行います。 ・ Interstage管理コンソールの管理サーバで環境設定を行う場合 1. 管理サーバのInterstage管理コンソールにログインします。 2. [一括操作] > [Interstage管理コンソール] > [Interstage Application Server] > [サービス] > [Webサーバ] > [FJapache(サーバ グループ名またはサーバ名)] > [環境設定]タブ > [Webサーバ:環境設定](詳細設定[表示])画面を使用して環境設定を行 います。 ここでは、環境定義ファイル(httpd.conf)の定義方法について説明します。 なお、Interstage HTTP Serverの環境定義ファイルは、以下に格納されています。 (インストールパスはデフォルト) C:\Interstage\F3FMihs\servers\(Webサーバ名)\conf\httpd.conf (インストールパスはデフォルト) /var/opt/FJSVihs/servers/(Webサーバ名)/conf/httpd.conf /var/opt/FJSVihs/servers/(Webサーバ名)/conf/httpd.conf E.1 タイムアウト時間 ■タイムアウト時間の設定 タイムアウト時間を設定する場合、環境定義ファイル(httpd.conf)の以下のディレクティブを編集します。 Timeout クライアント送受信タイムアウト時間(秒) クライアントとの間でデータパケットを送受信するときに待機する最長の時間(秒)を指定します。待機時間には、0から65535までを指定 できます。 Interstage HTTP Serverは、指定された時間に達してもパケットを受信できない場合、TCPコネクションが切断されます。接続している ネットワークのトラフィックが増大し、TCPコネクションの接続が頻繁に中断される場合は、待機時間を増やすことにより中断回数を減少 させることができます。 クライアント送受信タイムアウト時間の初期値は“600”、省略値は“300”です。 - 315 - ポイント クライアントからTCPコネクションが接続されたあとにリクエストが届かない場合は、指定した時間(秒)に達すると、TCPコネクションが切 断されます。 SSLHandshakeTimeout SSLコネクション確立時の送受信タイムアウト時間(秒) SSLコネクションの確立処理でクライアントからのデータパケットを送受信するときに待機する最長の時間(秒)を設定します。待機時間 には、0から65535までを指定できます(0を指定した場合、無制限)。 Interstage HTTP Serverは、指定された時間に達してもパケットを受信できない場合は、TCPコネクションが切断されます。通常、SSLコ ネクションの確立処理にかかる時間をチューニングしたい場合に設定します。 SSLコネクション確立時の送受信タイムアウト時間の初期値は、ありません。省略値は、Timeoutディレクティブの設定値です。 ■HTTP Keep-Alive機能の設定 HTTP Keep-Alive機能を設定する場合、環境定義ファイル(httpd.conf)の以下のディレクティブを編集します。 KeepAlive On|Off Interstage HTTP Serverでは、クライアント(Webブラウザ)との間で持続的な接続を維持できます。 “Off”を指定した場合は、1つの要求が完了するたびに接続を閉じて、次の要求に対して新しく接続しますが、“On”を指定することに より複数の要求を同じ接続で繰り返し使えるため、クライアントのレスポンスが向上します。 初期値・省略値は、“On”です。 KeepAliveTimeout 次のリクエストまでのタイムアウト時間(秒) クライアントの1つのリクエストが完了してから、コネクションを閉じずに次の新しいリクエストを待つ時間(秒)を指定します(“KeepAlive On”の場合のみ有効)。接続維持時間には、0から65535までを指定できます。この時間を経過しても次のリクエストがない場合は、接続 を閉じます。 接続維持時間の初期値・省略値は、“15”です。 ■タイムアウト時間の構成図 タイムアウト時間(TimeoutおよびKeepAliveTimeout)の構成図を以下に示します。 - 316 - T1:Timeout(初期値 600秒) クライアントとの間でデータパケットを送受信するときに待機する最長の時間(秒)。 注) POSTまたはPUTリクエストにおいて、データを分割して複数回送受信される場合は、個々のデータの送受信時にかかる最長 の時間となります。 T2:KeepAliveTimeout(初期値 15秒) クライアントの1つのリクエストが完了してから、コネクションを閉じずに次の新しいリクエストを待つ時間(秒)。 E.2 クライアントの同時接続数 クライアントの同時接続数を設定する場合、環境定義ファイル(httpd.conf)の以下のディレクティブを編集します。 クライアントの同時接続数の構成図については、“Interstage HTTP Server 運用ガイド”の“Webサーバのプロセス構成”を参照してくだ さい。 ThreadsPerChild クライアントの同時接続数 Interstage HTTP Serverが、クライアント(Webブラウザ)からの接続要求を同時に受け付けることができる最大数を指定します。最大数に は、1からThreadLimitディレクティブに指定した値までを指定できます。 本値を大きくすることにより同時アクセス可能な数は多くなりますが、メモリ資源や一時ファイルなどの消費に伴いシステム全体の性能 が劣化する可能性があります。 同時アクセス最大数の初期値は“50”、省略値は“64”です。 ThreadLimit 通信スレッドの上限数 ThreadsPerChildディレクティブに設定するクライアント数の上限値を設定します。1から15000までを指定できます。1より小さな値を指定 した場合は、1で動作します。15000より大きな値を指定した場合は、15000で動作します。 本ディレクティブは、ThreadsPerChildディレクティブに1920よりも大きな値に設定する必要がある場合にだけ使用してください。 通信スレッドの上限数の初期値は、ありません。省略値は“1920”です。 MaxClients クライアントの同時接続数 Interstage HTTP Serverが、クライアント(Webブラウザ)からの接続要求を同時に受け付けることができる最大数を指定します。最大数に は、1からServerLimitディレクティブで指定した値までを指定できます。1より小さな値を指定した場合は、1で動作します。ServerLimit ディレクティブで指定した値より大きな値を指定した場合は、ServerLimitディレクティブで指定した値で動作します。 本値を大きくすることにより同時アクセス可能な数は多くなりますが、メモリ資源や一時ファイルなどの消費に伴いシステム全体の性能 が劣化する可能性があります。 クライアントの同時接続数の初期値は“50”、省略値は“256”です。 なお、この設定値を超過するクライアントの接続要求があった場合は、リクエスト処理待ちキューに保存されます。リクエスト処理待ち キュー数は、ListenBacklogディレクティブで設定します。 ServerLimit 通信プロセスの上限数 MaxClientsディレクティブに設定するクライアントの同時接続数の上限値を設定します。1から20000までを指定できます。1より小さな値 を指定した場合は、1で動作します。20000より大きな値を指定した場合は、20000で動作します。 本ディレクティブは、MaxClientsディレクティブに256よりも大きな値に設定する必要がある場合にだけ使用してください。 通信プロセスの上限数の初期値は、ありません。省略値は“256”です。 ListenBacklog リクエスト処理待ちキューの最大数 ThreadsPerChildディレクティブで設定したクライアントの同時接続数よりも多くの接続要求があった場合に、本ディレクティブの設定値 がオペレーティングシステム内にキューイングされる数の最大値となります。最大数には、1から200までを指定できます。 リクエスト処理待ちキューの最大数の省略値は、“200”です。 - 317 - ListenBacklog リクエスト処理待ちキューの最大数 MaxClientsディレクティブで設定したクライアントの同時接続数よりも多くの接続要求があった場合に、以下の条件に応じた値がオペ レーティングシステム内にキューイングされる数の最大値となります。最大数には、1から2147483647までを指定できます。 リクエスト処理待ちキューの最大数の省略値は、“511”です。 条件 リクエスト処理待ちキューの最大数 本ディレクティブの設定値 ≦ 待機中TCPコネクションの最大値 (注) 本ディレクティブの設定値 本ディレクティブの設定値 > 待機中TCPコネクションの最大値 (注) 待機中TCPコネクションの最大値 (注) 注)待機中TCPコネクションの最大値は、オペレーティングシステムに設定されています。以下のコマンドを実行して確認してください。 待機中TCPコネクションの設定およびコマンドの詳細については、オペレーティングシステムのドキュメントを参照してください。 待機中TCPコネクションの最大値 コマンド実行例 tcp_conn_req_max_q /usr/sbin/ndd /dev/tcp tcp_conn_req_max_q /proc/sys/net/core/somaxconn /sbin/sysctl -n net.core.somaxconn - 318 - 付録F Interstage シングル・サインオンの環境定義 Interstage シングル・サインオンを運用するための、環境定義のチューニングについて説明します。 F.1 1台のサーバにリポジトリサーバを構築する場合のチューニング 1台のサーバに、リポジトリサーバを構築する場合のチューニングについて説明します。 ■Webサーバ(Interstage HTTP Server)のチューニング リポジトリサーバのチューニングは、Webサーバ(Interstage HTTP Server)の環境定義を変更することにより行います。 詳細については、“付録E Interstage HTTP Serverの環境定義”を参照してください。 クライアントの同時接続数 以下のディレクティブに、想定する同時アクセス最大数以上を設定します。(初期値:50) ThreadsPerChild MaxClients クライアント送受信タイムアウト時間 Timeoutにクライアントとの間でデータパケットを送受信するときに待機する最長の時間(秒)を指定します。(初期値:600) ◆チューニングの例 想定する同時アクセス最大数が256ユーザのシステムの場合 Interstage HTTP Server ThreadsPerChild=256+α(注1) Timeout=600(注2) Interstage HTTP Server MaxClients=256+α(注1) Timeout=600(注2) 注1) システムを安定稼動させるため、αには10~100までの値を設定してください。 注2) 接続しているネットワークのトラフィックが増大し、接続が頻繁に中断される場合には、本時間を増やしてください。 ■TCP/IPパラメタのチューニング セション管理の運用を行う場合は、リポジトリサーバ(更新系)のマシンのTCP/IPパラメタのチューニングを行います。(注) 詳細については、“3.4 TCP/IPパラメタのチューニング”を参照してください。 注) リポジトリサーバ(更新系)への同時アクセス最大数が増大し、セション管理サーバとの通信に失敗し、以下のメッセージが出力さ れる場合があります。この場合には、TCP/IPパラメタのチューニングを行ってください。 ・ sso00114 ・ sso00119 - 319 - F.2 1台のサーバに認証サーバを構築する場合のチューニング 1台のサーバに、認証サーバを構築する場合のチューニングについて説明します。 ■Webサーバ(Interstage HTTP Server)のチューニング 認証サーバのチューニングは、Webサーバ(Interstage HTTP Server)の環境定義を変更することにより行います。 詳細については、“付録E Interstage HTTP Serverの環境定義”を参照してください。 クライアントの同時接続数 以下のディレクティブに、想定する同時アクセス最大数以上を設定します。(初期値:50) ThreadsPerChild MaxClients クライアント送受信タイムアウト時間 Timeoutにクライアントとの間でデータパケットを送受信するときに待機する最長の時間(秒)を指定します。(初期値:600) ◆チューニングの例 想定する同時アクセス最大数が256ユーザのシステムの場合 Interstage HTTP Server ThreadsPerChild=256+α(注1) Timeout=600(注2) Interstage HTTP Server MaxClients=256+α(注1) Timeout=600(注2) 想定する同時アクセス最大数500ユーザを、5台の認証サーバにて負荷分散するシステムにおける認証サーバ1台あたりのチュー ニング Interstage HTTP Server ThreadsPerChild=100+α(注1) Timeout=600(注2) Interstage HTTP Server MaxClients=100+α(注1) Timeout=600(注2) 注1) システムを安定稼動させるため、αには10~100までの値を設定してください。 注2) 接続しているネットワークのトラフィックが増大し、接続が頻繁に中断される場合には、本時間を増やしてください。 F.3 1台のサーバにリポジトリサーバと認証サーバを構築する場合のチュー ニング 1台のサーバに、リポジトリサーバと認証サーバを構築する場合のチューニングについて説明します。 - 320 - ■Webサーバ(Interstage HTTP Server)のチューニング リポジトリサーバ、および認証サーバのチューニングは、Webサーバ(Interstage HTTP Server)の環境定義を変更することにより行います。 詳細については、“付録E Interstage HTTP Serverの環境定義”を参照してください。 クライアントの同時接続数 以下のディレクティブに、想定する同時アクセス最大数×2以上を設定します。(初期値:50) ThreadsPerChild MaxClients クライアント送受信タイムアウト時間 Timeoutにクライアントとの間でデータパケットを送受信するときに待機する最長の時間(秒)を指定します。(初期値:600) ◆チューニングの例 想定する同時アクセス最大数が256ユーザのシステムの場合 Interstage HTTP Server ThreadsPerChild=256×2+α(注1) Timeout=600(注2) Interstage HTTP Server MaxClients=256×2+α(注1) Timeout=600(注2) 注1) システムを安定稼動させるため、αには10~100までの値を設定してください。 注2) 接続しているネットワークのトラフィックが増大し、接続が頻繁に中断される場合には、本時間を増やしてください。 ■TCP/IPパラメタのチューニング セション管理の運用を行う場合は、リポジトリサーバ(更新系)のマシンのTCP/IPパラメタのチューニングを行います。(注) 詳細については、“3.4 TCP/IPパラメタのチューニング”を参照してください。 注) リポジトリサーバ(更新系)への同時アクセス最大数が増大し、セション管理サーバとの通信に失敗し、以下のメッセージが出力さ れる場合があります。この場合には、TCP/IPパラメタのチューニングを行ってください。 ・ sso00114 ・ sso00119 F.4 業務サーバを構築する場合のチューニング 業務サーバを構築する場合のチューニングについて説明します。 キャッシュサイズ、キャッシュ数、および使用するWebサーバのチューニングを行ってください。 ■キャッシュサイズ、キャッシュ数のチューニング セションの管理を行う運用の場合、認証した利用者の認証情報を業務サーバでキャッシュすることで認可性能を向上させることがで きます。キャッシュを効果的に行うためにはシステムの同時利用者数、および利用者の認証情報サイズに応じて、キャッシュサイズ、 キャッシュ数を適切に設定する必要があります。 - 321 - キャッシュサイズ、キャッシュ数の設定については、業務サーバのInterstage管理コンソールを使用して、[システム] > [セキュリティ] > [シングル・サインオン] > [業務システム] > [業務システム名] > [環境設定] > [詳細設定[表示]]をクリックし、以下より行います。 ・ [認証情報のキャッシュ]の[キャッシュサイズ] ・ [認証情報のキャッシュ]の[キャッシュ数] キャッシュサイズ 認証情報のサイズを以下の計算式で見積り、Kバイト単位で設定します。 認証情報サイズ = (150 + DNの文字列長 + ユーザIDの文字列長 + 認証方式の文字列長 + ロールサイズ(注1) + 拡張ユーザ情報サイズ(注2) ) × 1.4バイト 注1)設定するロール名の文字列長の総和 + 10×ロール数 注2)設定する属性名の文字列長の総和 + 属性値の文字列長の総和 + 10×拡張ユーザ情報数 キャッシュ数 認証情報のキャッシュは、利用者の最終アクセス時からアイドル監視時間が経過するまで保持します。アイドル監視時間内で想 定する同時アクセス最大数 + α(注)を設定してください。 注)1人の利用者が、アイドル監視時間内にサインオン、サインオフを繰り返した場合でも、キャッシュ数を消費するため、想定する 同時アクセス最大数よりも少し大きめの値を設定してください。 設定したキャッシュサイズ、キャッシュ数を超える利用があった場合も継続して利用可能ですが、システムのログにsso03062、もしくは sso03063のメッセージが出力されます。 認可性能が低下する可能性があるため、メッセージに従い対処してください。 ◆チューニングの例 利用者の情報が以下の場合を例に説明します。 項目 文 字 列 長 値 DN 55 cn=Fujitsu Tarou,ou=User,ou=interstage,o=fujitsu,dc=com ユーザID 5 tarou 認証方式 19 basicAuthOrCertAuth ロール名 5 Admin ロール名 6 Leader 拡張ユーザ情報(属性名) 4 mail 拡張ユーザ情報(属性値) 20 [email protected] 拡張ユーザ情報(属性名) 14 employeeNumber 拡張ユーザ情報(属性値) 6 100001 ロールサイズ 2つのロールが設定されるため、以下のようになります。 (Admin(5文字) + Leader(6文字)) + 10×ロール数(2個) = 31 - 322 - 拡張ユーザ情報サイズ 2つの属性が設定されるため、以下のようになります。 (mail(4文字) + employeeNumber(14文字)) + ([email protected](20文字) + 100001(6文字)) + 10×拡張ユーザ情報数(2個) = 64 上記より、認証情報サイズは以下のようになります。 認証情報サイズ = (150 + DNの文字列長(55文字) + ユーザIDの文字列長(5文字) + 認証方式の文字列長(19文字) + ロールサイズ(31文字) + 拡張ユーザ情報サイズ(64文字) ) × 1.4バイト = 約454バイト [キャッシュサイズ]には、上記認証情報サイズを切り上げ、1Kバイトを設定します。 ■Webサーバ(Interstage HTTP Server)のチューニング 詳細については、“付録E Interstage HTTP Serverの環境定義”を参照してください。 クライアントの同時接続数 以下のディレクティブに、想定する同時アクセス最大数以上を設定します。(初期値:50) ThreadsPerChild MaxClients クライアント送受信タイムアウト時間 Timeoutにクライアントとの間でデータパケットを送受信するときに待機する最長の時間(秒)を指定します。(初期値:600) ■Microsoft(R) Internet Information Servicesのチューニング Microsoft(R) Internet Information Servicesのチューニングについては、“Microsoft(R) Internet Information Services”のプロパティ情 報に以下の定義を設定することによりチューニングを行います。 最大接続数 最大接続数フィールドに想定する同時アクセス数以上を設定します。(default:1,000) - 323 - 付録G マルチサーバ管理の環境定義 マルチサーバ管理の環境定義ファイルのチューニングについて説明します。 G.1 マルチサーバ管理定義ファイル ■概要 マルチサーバ管理定義ファイルは、マルチサーバ管理の動作環境に関する定義が格納されたファイルです。 ■ファイル名 %IS_HOME%\jmx\etc\ssv.xml /etc/opt/FJSVisjmx/ssv.xml ■ファイル形式 <ssv>をルートタグとするXML形式。 ■タグ・属性一覧 タグ名:site 属性名 内容 デフォルト値 値の範囲 server.limit サイトに所属する管理対象サー バ数の上限 100 1~ INT_MAX (注) servergroup.limit サイトに所属するサーバグルー プ数の上限 100 1~ INT_MAX (注) server.limit.inser vergroup サーバグループに所属する管 理対象サーバの上限 100 1~ INT_MAX (注) 注) マルチサーバ管理定義ファイルに記述された値が範囲内に納まっていない場合、デフォルト値で動作します。 タグ名:ijserver 属性名 deploy.path 内容 配備対象アーカイブファイルの 一時格納ディレクトリ デフォルト値 値の範囲 - %IS_HOME%\jmx\var\ssv_ijs /etc/opt/FJSVisjmx/var/ssv_ijs - 324 - 付録H Portable-ORBの環境設定 Portable-ORBの動作環境ファイルは、porbeditenvコマンドを使用して設定します。Portable-ORBを使用する場合は、porbeditenvコマ ンドを使用して以下の環境設定を行ってください。 ・ 動作環境情報 ・ ホスト情報 ・ セキュリティ ・ ネットワーク環境 porbeditenvコマンドの詳細については、“リファレンスマニュアル(コマンド編)”の“porbeditenv”を参照してください。Portable-ORBの 動作環境ファイルの詳細については、“アプリケーション作成ガイド(CORBAサービス編)”の“Portable-ORB動作環境ファイルの指定” を参照してください。 また、運用環境を構築した場合は、万が一に備えて、資源のバックアップを行うことを推奨します。資源のバックアップについては、 “運用ガイド(基本編)”の“メンテナンス(資源のバックアップ/他サーバへの資源移行/ホスト情報の変更)”を参照してください。 - 325 - 付録I Webサーバ(Sun Java System Web Server)の環境定 義 Webサーバ(Sun Java System Web Server)の環境定義については、「J2EE ユーザーズガイド(旧版互換)」を参照してください。 - 326 - 索 引 Interstage ディレクトリサービスのシステム資源.......................85 Interstage ディレクトリサービスのシステム資源の設定............85 Interstage統合コマンドのシステム資源...................................92 Interstageの機能を使用するためのチューニング...................41 Interstageのチューニング.........................................................34 IPCキー値..............................................................................102 IPC資源のカスタマイズ..........................................................102 IPv6環境での運用...................................................................47 irconfig....................................................................................283 [数字] 1台のサーバに認証サーバを構築する場合のチューニング320 1台のサーバにリポジトリサーバと認証サーバを構築する場合の チューニング...........................................................................320 1台のサーバにリポジトリサーバを構築する場合のチューニング ................................................................................................319 1トランザクションに参加するリソース数.................................301 [C] CMS付きパラレルGC.............................................................193 config......................................................................................259 configファイル.........................................................................294 CORBAサービスのシステム環境の設定................................53 CORBAサービスのシステム資源............................................53 CORBAサービスの動作環境ファイル...................................258 CORBAワークユニットのチューニング..................................106 [J] J2EE互換のシステム資源........................................................76 J2EEのチューニング..............................................................174 Java EE機能のチューニング..................................................108 Java EEのシステム資源の設定................................................98 java.lang.OutOfMemoryErrorがスローされた場合...............244 java.lang.StackOverflowErrorがスローされた場合...............250 Java Native Interface(JNI)......................................................184 Java VM..................................................................................177 Java VM終了時における状態情報のメッセージ出力機能. .232 Java VMのヒープ領域サイズ/Perm領域サイズ.....................112 Javaツール機能......................................................................254 Javaヒープとガーベジコレクション..........................................181 Javaヒープのチューニング.....................................................209 JDK/JREのチューニング........................................................176 JDK関連のドキュメント...........................................................176 JNI処理異常時のメッセージ出力..........................................241 JPAのチューニング................................................................127 ■JDKドキュメント...................................................................176 JTS_RMP_PROC_CONC......................................................302 JTS_RMP_THR_CONC........................................................303 JTS用のリソース管理プログラムのスレッド多重度................303 JTS用のリソース管理プログラムのプロセス多重度...............302 [E] EJBコンテナのチューニング..................................................121 Enterprise Beanインスタンスのキャッシング...........................124 Enterprise Beanインスタンスのプーリング..............................126 EXTP4435メッセージまたはISJEE_OM1018メッセージが出力さ れた場合.................................................................................247 [F] FJGC.......................................................................................188 FJVMログ...............................................................................234 FJVM......................................................................................178 FJVMでサポートされるガーベジコレクション処理................185 FJVMに対して指定可能なチューニング用オプション.........183 [G] gwconfig.................................................................................276 [H] HOST......................................................................................303 [L] LOGFILE................................................................................300 [I] IIOP_port................................................................................260 IJServerクラスタのチューニング.............................................112 IJServerまたはEJBサービスのシステム資源の設定...............76 IJServerワークユニットのチューニング..................................106 inithost/initial_hosts................................................................278 iniファイルの設定例...............................................................256 Interstage HTTP Server..........................................................315 Interstage HTTP Serverのシステム資源..................................76 Interstage HTTP Serverのシステム資源の設定......................76 Interstage Java EE DASサービスのチューニング.................108 Interstage Java EE DASサービスのヒープ領域サイズとアドレス 空間........................................................................................149 Interstage Java EE Node Agentサービスのチューニング......111 Interstage Java EE管理コンソールのチューニング...............114 Interstage管理コンソールのシステム資源...............................92 Interstage管理コンソールのシステム資源の設定...................92 Interstage シングル・サインオンの環境定義.........................319 Interstage シングル・サインオンのシステム資源......................80 Interstage シングル・サインオンのシステム資源の設定..........80 [M] max_exec_instance.................................................................262 max_IIOP_resp_con...............................................................262 max_impl_rep_entries............................................................263 max_processes........................................................................263 MessageQueueDirectorのシステム資源...................................78 MessageQueueDirectorのシステム資源の設定.......................78 MODE....................................................................................299 MQ連携サービスを使用する場合...........................................20 [N] New世代領域サイズ自動調整機能付きGC(FJGC)............188 New世代領域用制御処理並列化機能付きGC(パラレルGC)190 nsconfig..................................................................................282 number_of_common_buffer...................................................263 [O] ORB........................................................................................142 ORBのチューニング...............................................................142 - 327 - 永続性ユニットの共有キャッシュ...........................................129 オブジェクト参照の圧縮機能.................................................196 OTS_FACT_THR_CONC.....................................................302 OTS_RECV_THR_CONC.....................................................302 OTSシステムが動作するホストのCORBAサービスのポート番号 ................................................................................................303 OTSシステムが動作するホスト名...........................................303 OTSシステムのスレッド多重度..............................................302 OTSシステム用業務システム情報定義ファイル...................309 [か] 仮想メモリと仮想アドレス空間...............................................178 環境定義ファイルの制御文...................................................290 環境変数..................................................................................45 ガーベジコレクション処理の結果ログ出力機能の強化........198 ガーベジコレクションのログ出力...........................................196 ガーベジコレクション発生回数..............................................113 ガーベジコレクション(GC)......................................................185 記述形式................................................................................287 基礎知識................................................................................176 業務構成管理機能のチューニング.......................................175 業務サーバを構築する場合のチューニング........................321 共有メモリ...............................................................................100 共有メモリ量の見積もり方法..................................................100 空行........................................................................................290 クライアントアプリケーションを追加した場合...........................40 クライアント機能を使用する場合........................................20,32 クライアント、サーバ兼用アプリケーションを追加した場合....41 クライアントの同時接続数......................................................317 クラスのインスタンス情報出力機能.......................................230 クラッシュダンプ......................................................................239 クラッシュダンプ・コアダンプ..................................................239 グループ管理サービスの設定...............................................113 コアダンプ...............................................................................240 コネクタのチューニング..........................................................137 コメント行................................................................................290 コンカレント・マーク・スイープGC付きパラレルGC(CMS付きパ ラレルGC)..............................................................................193 コンポーネントトランザクションサービスの環境定義.............287 コンポーネントトランザクションサービスのシステム環境の設定62 コンポーネントトランザクションサービスのシステム資源.........62 [P] PARTICIPATE.......................................................................301 period_idle_con_timeout........................................................268 period_receive_timeout..........................................................269 period_server_timeout............................................................269 PORT......................................................................................303 Portable-ORBの環境設定.....................................................325 [Q] queue_policy...........................................................................280 [R] read_interval_timeout.............................................................261 RMPプロパティ.......................................................................303 [S] SIGBUS発生により異常終了した場合..................................251 SSL通信の利用.....................................................................116 [SYSTEM ENVIRONMENT]セクション...............................290 [T] TCP/IPパラメタのチューニング..............................................101 traceconfig..............................................................................311 TRANMAX............................................................................301 [W] Webコンテナのチューニング.................................................117 Webサーバ(Sun Java System Web Server)の環境定義.......326 Webサーバコネクタのシステム資源........................................94 Webサービスのチューニング.................................................132 Windows(R)固有パラメタ.......................................................257 [WRAPPER]セクション..........................................................292 write_interval_timeout............................................................261 [さ] 最大トランザクション多重度...................................................301 サーバアプリケーションを追加した場合..................................40 サーバ機能運用時に必要なシステム資源.............................50 サーバ機能を使用する場合.................................................1,21 サーバマシン状態監視............................................................45 時間監視機能の相関関係....................................................153 システム.............................................................................99,100 システム構成情報の見積もり方法 (Linuxの場合)................100 システム構成情報の見積もり方法 (Solarisの場合)................99 システムのチューニング...........................................................50 システムログファイルのパス...................................................300 シャットダウンタイムアウト.......................................................140 出力例と調査例.....................................................................236 詳細属性................................................................................136 シリアルGC.............................................................................187 スタック....................................................................................180 スタックオーバーフロー検出時のメッセージ出力機能.........250 スタックトレース.......................................................................218 スタックトレースの解析方法.....................................219,220,221 スタックのチューニング..........................................................214 ステートメント..........................................................................287 スレッドダンプ.........................................................................222 [あ] アップロードファイルの最大サイズのチューニング...............115 アプリケーション最大処理時間.............................................113 アプリケーション追加によるチューニング................................39 アプリケーション用業務システム情報定義ファイル..............310 異常終了箇所の情報............................................................234 異常終了時のJavaヒープに関する情報................................236 異常終了時のシグナルハンドラ情報....................................235 異常発生時の原因振り分け..................................................244 イベントサービス.......................................................................43 イベントサービスの環境定義.................................................311 イベントサービスのシステム環境の設定.................................71 イベントサービスのシステム資源.............................................71 イベントサービスの動作環境ファイル....................................311 サプライヤ・コンシューマ総数の見積もり方法......................314 運用時に必要なディスク容量....................................................1 永続性コンテキストキャッシュ................................................127 - 328 - スレッドプーリング...................................................................121 スローダウンが発生した場合.................................................253 性能監視ツール使用時に必要なシステム資源......................99 性能情報の分析....................................................................163 セクション................................................................................289 セッションタイムアウト.............................................................114 接続検証.........................................................................134,139 セットアップ種別.....................................................................299 セットアップ情報ファイル.......................................................299 セマフォ資源..........................................................................256 想定するシステム形態.............................................................34 (Java EE)...................................................................................34 想定するシステム形態(マルチ言語サービス).......................35 マルチサーバ管理定義ファイル............................................324 マルチサーバ管理の環境定義.............................................324 マルチサーバ管理を使用する場合...................................18,32 メモリ容量.................................................................................21 メモリ領域不足事象発生時のメッセージ出力機能の強化...245 モニタロギング.................................................................157,158 モニタロギングの操作手順....................................................159 モニタロギングのログファイル................................................161 [や] ユーティリティワークユニットのチューニング.........................106 予兆監視機能から警告が通知された場合の対処...............145 予兆監視警告メッセージ(Javaヒープ)...................................146 予兆監視警告メッセージ(ガーベジコレクション)..................147 [た] タイムアウト監視.....................................................................268 タイムアウト時間.....................................................................315 暖機運転................................................................................215 チューニング/デバッグ技法...................................................218 チューニング方法..............................................................39,209 (Java EE)...................................................................................39 チューニング方法(マルチ言語サービス)................................39 長時間コンパイル処理の検出機能.......................................206 通信データサイズに関する注意事項....................................144 定義ファイルの設定値.............................................................36 ディスク容量...............................................................................1 データベース連携環境のチューニング................................132 データベース連携サービス.....................................................42 データベース連携サービスのiniファイル設定情報..............255 データベース連携サービスの環境定義...............................294 データベース連携サービスのシステム環境の設定................67 データベース連携サービスのシステム資源............................67 データベース連携サービスのチューニング..........................255 同一Java VM内のリモートアクセスでデータコピーを防ぐ機能127 動的コンパイル.......................................................................204 動的コンパイル発生状況のログ出力機能............................207 トランザクションアプリケーションのチューニング...................106 トランザクション管理........................................................135,140 トランザクションサービスのチューニング...............................141 [ら] ラッパーワークユニットのチューニング..................................106 リカバリプロセスのスレッド多重度..........................................302 リソース定義ファイル..............................................................305 リポジトリのチューニング........................................................175 例外発生時のスタックトレース出力.......................................222 ログ出力における時間情報のフォーマット指定機能...........233 ロードバランス...........................................................................43 [わ] ワークユニット数、オブジェクト数、プロセス数のチューニング104 ワークユニットのチューニング................................................104 [は] 配備時のチューニング...........................................................117 パラレルGC............................................................................190 ハングアップ(フリーズ)した場合............................................253 必要資源....................................................................................1 標準GC(シリアルGC)............................................................187 複数プロセス運用..................................................................112 フレーム..................................................................................180 プロセスが消滅(異常終了)した場合.....................................251 プロセス強制停止時間のチューニング.................................105 プロファイラ設定.....................................................................172 プロファイラ設定の運用方法.................................................172 プール内の接続数..........................................................132,137 ホスト情報(IPアドレス/ホスト名)の変更方法............................49 ポート番号..............................................................................116 [ま] マルチサーバ管理機能を使用する時に必要なシステム資源98 - 329 -