開発本部の大西です。
開発は半期末とかあまり関係ないと思いきや、諸般の事情でいろいろと大変な今日この頃です。
江本さんがebuilderのネタばかり書くので、傷食気味にならないように、季節柄、チューニングネタを書かせていただきます。
intra-martのチューニングは、基本は、confディレクトリのhttp.xmlとimart.xmlで7~8割方完了します。
というか、「DBMS」と「プログラム」以外の設定ファイルでのチューニングは、あまり目に見えた効果はありません。
また、チューニングと言っても、どちらかというと安定運用のためのチューニングで、高速化という面はあまり期待しないでください。
題名にVer7.xと書いていますが、Ver5.0以降には、流用できる内容だと思います。
こんな事自体を書くような世の中になって悲しいのですが、各環境にあわせて、最適値をまさにチューニングしてください。そのとおりにしたら、動かねーぞ!こら!とか、根拠出せ、比較資料出せとかそんな不精なことは言われると心が折れますし、こういう紹介自体もできなくなるので、お控えください。お願いします・・・。
APサーバ[http.xml]でのチューニング
では、http.xmlのチューニングから、
Resinの最大スレッド数の変更
デフォルト:
[code language=":xml"]
256(256スレッドになっている。)
[/code]
Resinのhttpdサーバの機能を利用するのであれば、上記ではhttpアクセスのセッション分が不足するので、
スレッド数を増やすことが必須。または、原則、Webサーバ(Apache)を立てることを推奨します。
増やすと言っても、5120とか1万とかしても、動けないので、512ぐらいが限界だと思います。
なお、64bitOSの場合など、ヒープサイズが4G以上など潤沢に用意出来る場合などは、1024など大きめの値に設定することも可能です。
セッションタイムアウト時間
デフォルトは10分ですが、
[code language=":xml"]
10
[/code]
よく、1時間とかひどい場合24時間としている場合があります。
1時間であれば、長すぎるということはないですが、無駄なセッションオブジェクトが、最大60分残留する可能性があるので、セッションタイムアウト時間は、デフォルト値の10分などの短めにして、imart.xmlでのsession-auto-keepを有効にすることを推奨します。
その反面、クライアントで、ブラウザを立ち上げている限り、セッションは生き続けるので、離席時は、スクリーンセーバーで、パスワードロックするなどのリテラシーは必要かと思います。
データベースへの接続数
デフォルト値は、
[code language=":xml"]
20
[/code]
となっているので、高負荷時にコネクションが不足する可能性があるので、100ぐらいに増やしておくのがベター。
データベースコネクションの維持時間
データベースコネクションの維持時間は、デフォルト
[code language=":xml"]
30s
[/code]
となっており、AP-DB間の無通信30秒でコネクションがCloseされる。
せっかく、コネクションプーリングしているので、1時間(1h)や1日(1D)など長めの時間がよいと思われます。
プリペアドステートメントキャッシュサイズの変更
プリペアドステートメントキャッシュサイズが、デフォルト
[code language=":xml"]
8
[/code]
と8個になっているので、300など大きめの数字にするのがよいと思われます。
APサーバ[imart.xml]でのチューニング
ネットワークコネクション数の変更
[code language=":xml"]
intra-mart/platform/network/client/connection
[/code]
デフォルト値が、8になっているので、さすがにこれでは少ないので、これを、100~300程度まで増やす。
ServicePlatformのスレッド数の変更
[code language=":xml"]
intra-mart/platform/network/server/threads
[/code]
デフォルト値が、32になっているので、さすがにこれでは少ないので、これも、100~300程度まで増やす。
なぜ、300程度かというと、だいたい、CPU1コアあたり、200スレッド程度しか動作しないと思います。最近は2~4コアが主流なので、計算上、400~800スレッドとなりますが、上記のResinのスレッド等を考えると300程度が無難だと思います。
Javaのチューニング
GCのチューニングを目的としたJavaVMのチューニングがされてないことが多いです。
とりあえず、チューニングしておきたいということであれば、
あと、この時代に、32bitOSで、32bitJDKで運用しようというところは減ったと思いますが、ヒープを1GBにしたい場合、
[code language=":xml"]
-Xms1024m -Xmx1024m -XX:NewSize=276m -XX:MaxNewSize=276m -XX:SurvivorRatio=2 -XX:TargetSurvivorRatio=80 -XX:PermSize=128m -XX:MaxPermSize=128m
[/code]
な設定にしておくと無難だと思います。その後、VisualGCとかで、値を詰めていくのはかなり面白いです。
ちなみに、Javaのヒープサイズの落しどころは、
-
- 32bitの場合:-Xms1.2g -Xms1.2g
- 64bitの場合、-Xms4g -Xms4g
ぐらいかな?と思います。
(当然、搭載メモリ量以上、設定するなんて、ことはしないですよね?)
APサーバ[web.xml]でのチューニング
<p可能であれば、以下のServletFilterを無効にできるか検討してください。
(web.xmlのマッピングされているフィルターをコメントアウト等で削除する。)
-
- 画面遷移ログを取得するフィルタ:(TransitionLogFilter)
- 文字化け回避フィルタ:(LuxuryResponseWriterFilter)
- im-JavaEE Framework用パラメータ設定補助フィルタ:(FrameworkParameterSettingFilter)
- 外部アプリケーション接続モジュールでのURL変換フィルタ:(AbsoluteLinkFilter)
- ホットデプロイフィルタ:(hotdeployFilter)
- アクティブセッションを制御するフィルタ:(ActiveSessionFilter)
- 二重ログインチェックフィルタ:(DuplicateLoginHandlingFilter)
※詳細は、ServicePlatform設定ガイドを参照ください。
特に、ホットデプロイフィルタは、運用環境では不要ですので、外すことをおすすめします。
その他サーバ[imart.xml]でのチューニング
データプールサイズの変更
[code language=":xml"]
[/code]
sizeをtreasure/boxとtrash配下のファイルの数を指定してください。
Javaのチューニング
上の記載と同じです。
スクリプトベースのコンパイル設定
意外に知られていないのですが、
pages/platform/src/source-config.xml
pages/src/source-config.xml
にて、スクリプト開発モデルので、jsファイルやhtmlファイルのコンパイル指定が可能です。
-
- resource-file/javascript/compiler/enable
- resource-file/view/compiler/enable
をfalseからtrueにすることにより、自動コンパイルされ、再起動するまで、コンパイルされたもので動作します。
falseの場合、インタプリタで動作しますので、運用環境では、自動コンパイルで動作させる方が良いと思います。
アクティブセッション管理の無効化
v6.1以降では、セッション状況を管理する機能、アクティブセッション管理機能があり、ログイン、ログアウト、各リクエスト単位で、DBのテーブル(B_M_ACTIVE_SESSION_INFO)に更新処理が実行されています。
二重ログイン制御機能を使っておらず、システム管理者やログイングループ管理者で各ログイングループのユーザのセッションを明示的に無効化する必要がない場合は、この機能を無効化することで、各リクエスト毎での不要なDBアクセスがなくなりますので、DB側の負荷を下げることができます。
設定方法は、SeerverManagerのconf/active-session-config.xmlファイルを編集し、<group-default>タグの下に、
[code language=":xml"]
[/code]
を追加してください。
DBサーバでのチューニング
INDEXはなるべく張るようにしてください。
BPWといわれる現行のドキュメントワークフローであれば、storage/bpw/database
スタートパックであれば、 storage/startpack/data/basic
にindex用のDDLがあります。
主な、チューニング個所は以上の部分になります。これらを参考にして、インストール状態での運用は避けていただき、熟睡できる日々を取り戻しましょう。