開発Blog

iWP Ver7.xでのチューニング

投稿日:2010-09-29 更新日:

開発本部の大西です。
開発は半期末とかあまり関係ないと思いきや、諸般の事情でいろいろと大変な今日この頃です。

江本さんが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のヒープサイズの落しどころは、

    1. 32bitの場合:-Xms1.2g -Xms1.2g
    2. 64bitの場合、-Xms4g -Xms4g

ぐらいかな?と思います。
(当然、搭載メモリ量以上、設定するなんて、ことはしないですよね?)

APサーバ[web.xml]でのチューニング

<p可能であれば、以下のServletFilterを無効にできるか検討してください。
(web.xmlのマッピングされているフィルターをコメントアウト等で削除する。)

    1. 画面遷移ログを取得するフィルタ:(TransitionLogFilter)
    2. 文字化け回避フィルタ:(LuxuryResponseWriterFilter)
    3. im-JavaEE Framework用パラメータ設定補助フィルタ:(FrameworkParameterSettingFilter)
    4. 外部アプリケーション接続モジュールでのURL変換フィルタ:(AbsoluteLinkFilter)
    5. ホットデプロイフィルタ:(hotdeployFilter)
    6. アクティブセッションを制御するフィルタ:(ActiveSessionFilter)
    7. 二重ログインチェックフィルタ:(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ファイルのコンパイル指定が可能です。

    1. resource-file/javascript/compiler/enable
    2. 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があります。

主な、チューニング個所は以上の部分になります。これらを参考にして、インストール状態での運用は避けていただき、熟睡できる日々を取り戻しましょう。

-開発Blog
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

no image

Forma関数で条件式を書く

IM-FormaDesignerの画面アイテム「関数」を利用して式を記述できますが、まもなくリリース予定のパッチ2よりAND演算・OR演算の論理演算関数や比較演算子を使えるようになります。 これにより …

no image

intra-mart Advent Calendar 2013 第21日:ルーティングテーブルに認可リソースを設定しないで済ませる方法

この記事は、intra-mart Advent Calendar 2013 第21日の記事です。 今回は、AutoRegisteringResourceMapper を紹介させていただきます。 このマ …

no image

iCEC2011 eBuilder AppProducer

4/26に開催された「intra-mart Certified Evangelist Conference 2011(iCEC2011)」での講演資料を公開します。 eBuilder AppProdu …

no image

トラブル時の現状把握に必要な情報

※下記内容は、過去のintra-mart(Ver4.3以前)に関する内容です。 最新のintra-martでは、異なる情報であることがありますので、ご注意ください。 大規模システムが増加するに従い、弊 …

no image

Formaでのスクリプト開発生産性向上

先日開催されました技術者交流会にて、クライアントサイドスクリプトを利用したFormaDesignerの画面開発が難しいという声を多くいただきました。 そこで、今回のブログ記事では、交流会の場で挙がった …