狠狠撸

狠狠撸Share a Scribd company logo
XPages のパフォーマンス?チューニング
月刊 Notes/DominoWebセミナー 7月号
2015年7月10日
リコーITソリューションズ株式会社
2015/7/10 Version: [###] Classification: Internal Owner: [Insert name] 1
海老原 賢次
リコーITソリューションズ株式会社
鹿児島事業所
ブログ:XPagesで行こう!
http://take-the-xpages.blogspot.jp/
資料をslideshareで公開しています
? 狠狠撸shareで公開していますので、後ほど振り返りでご利用ください。
? http://www.slideshare.net/kenjiebihara71
または
または
2015/7/10 Version: [0.1.0] Classification: Internal Owner: [EBIHARA Kenji] 2
XPagesで行こう! 検索
slideshare ebihara kenji 検索
2015/7/10 3
本日のコンテンツ
Version: [0.1.0] Classification: Internal Owner: [EBIHARA Kenji]
Domino/XPagesの設定の見直し2
チューニングの観点1
メモリの有効活用3
スコープの活用4
2015/7/10 4Version: [0.1.0] Classification: Internal Owner: [EBIHARA Kenji]
Domino/XPagesの設定の見直し2
チューニングの観点1
メモリの有効活用3
スコープの活用4
チューニングの観点
? メモリ効率の向上
? 処理効率の向上
? ※これらは、設定によっては互いに相反する可能性があります。
? ※それぞれ程度をわきまえる必要があります。
2015/7/10 Version: [###] Classification: Internal Owner: [Insert name] 5
メモリ効率の向上
? Domino/XPagesの設定見直し
? XPage設計、プログラム内でのメモリの節約
2015/7/10 Version: [###] Classification: Internal Owner: [Insert name] 6
処理効率の向上
? スコープの活用
? SSJS / CSJS の使い分け(今回は割愛)
2015/7/10 Version: [###] Classification: Internal Owner: [Insert name] 7
ツールを使ってボトルネックを調べる
?XPages Tool kit
–http://goo.gl/xMckjh
–CPUプロファイラ
–バックエンドクラスのプロファイラ
–メモリプロファイラ
2015/7/10 Version: [###] Classification: Internal Owner: [Insert name] 8
2015/7/10 9Version: [0.1.0] Classification: Internal Owner: [EBIHARA Kenji]
Domino/XPagesの設定の見直し2
チューニングの観点1
メモリの有効活用3
スコープの活用4
notes.ini の設定
2015/7/10 10
Javaのメモリ設定
? Java heap(ヒープ) size
–Java heap とは、Java が利用するメモリ領域の一つ。
–SSJSで作成されるオブジェクト(NotesDocument 、 変数、
XPageの情報など)が保存される。
–サーバーのメモリをいくら積んでも、この値の設定を変えないと、
意味がない。
2015/7/10 11
notes.ini の設定
? HTTPJVMMaxHeapSize
– DominoのHTTPプロセスで使用される、Javaヒープサイズ。
– デフォルト値が32/64bitでこんなに違う(8.5.3以降で確認)
? 32bit版???64MB
? 64bit版???1024MB
※32bitにくらべて64bitの方がメモリを多く消費する。(場合によっては2倍以上)
→デフォルト値の違い と プロセスの消費メモリ増加。
※移行したら、メモリのサイズの見直しが必要。
2015/7/10 12
notes.ini の設定
? HTTPJVMMaxHeapSizeSet = 1 に設定しないと、デフォルト値
に戻る事がある。
– デフォルトで設定されている???はずですが要確認。(Domino 9.0.1で確認)
2015/7/10 13
動作時の設定の確認
? NSDコマンドで出力できるログで設定値、使用量が確認できる
2015/7/10 Version: [###] Classification: Internal Owner: [Insert name] 14
<@@ ------ Notes Memory Summary -> Analysis -> Private Memory Breakdown ::
(nhttp: 8b0) (Time 09:53:05) ------ @@>
Domino Memory 38.11 MB (2.97%)
JVM Heap Memory 1024.00 MB (79.73%)
Native Allocations 222.25 MB (17.30%)
初回アクセス時のロード
? XPagesはDBを配置?保存した時にコンパイル(実行状態)され
ず、初回アクセス時にコンパイルされる。
? なので、初めのアクセス、または アプリケーション?タイムアウト後にアク
セスした場合、ページが表示されるまで数秒~数十秒かかります。
? これを notes.ini の設定で回避することができます。
2015/7/10 Version: [###] Classification: Internal Owner: [Insert name] 15
初回アクセス時のロード
? XPagesPreload = 1
–XPagesの実行環境をHTTPサービス起動時に読み込む。
? XPagesPreloadDB = {DBパス}
–指定したDBのXPagesがHTTPサービス起動時にコンパイル
される
? メモリを消費するので、使用頻度が低いDBは
対象外にすべき。
2015/7/10 Version: [###] Classification: Internal Owner: [Insert name] 16
XPagesの設定
2015/7/10 17
セッションの概念
2015/7/10 Version: [###] Classification: Internal Owner: [Insert name] 18
Aさんセッション1
Bさんセッション
Aさん
Bさん
画面1 画面1 画面2
画面1 画面1 画面2
更新
遷移
画面3
別ウィンドウ
表示
Aさんセッション2画面1 画面1 画面2
更新
遷移
画面3
遷移
別ブラウザでアクセス
各種タイムアウト
2015/7/10 19
指定した時間以上アクセスがない場合、XPagesのコンパイル情報や、
Application Scopeの値がメモリから削除される。
セッション毎に指定した時間以上アクセスがない場合、
そのセッションのセッションスコープや認証情報がメモリから削除される
大きいと利便性が向上するが、アクセスユーザー
が多い場合、より多くのメモリを消費する
ページの永続性とは
? ページにアクセスした時に、各コントロールの各プロパティの値、
状態を メモリ または ディスク に保存する。
ボタンのクリックイベント等で、全体更新、部分更新でSSJS
の処理(ポストバック)を行うときに、必要となる。
? コントロールが多いほどメモリを多く消費する。
? また、ViewScopeに保存された値も同様。
2015/7/10 Version: [###] Classification: Internal Owner: [Insert name] 20
ページの永続性
2015/7/10 Version: [###] Classification: Internal Owner: [Insert name] 21
パフォーマンス
低 ーーーーーーーーーーーー 高
メモリ負荷
備考
ページをメモリに保存する 低 ーーーーーーーーーーー★ 高
ページをディスク上に保存する 低 ★ーーーーーーーーーーー 高 ディスク領域を消費する
メモリに現在のページのみを保存する 低 ーーーーー★ーーーーーー 高
ページ永続性モード
2015/7/10 Version: [###] Classification: Internal Owner: [Insert name] 22
パフォーマンス
低 ーーーーーーーーーーーー 高
メモリ負荷
備考
全ページコンテンツ 低 ーーーーーーーーーーー★ 高
ツリー全体、そして構成後の変更のみ 低 ーーーーーーーー★ーーー 高
ツリーの構成後の変更のみ 低 ーー★ーーーーーーーー 高
なし。読み取り専用ページで有効 パフォーマンス
低 ーーーーーーーーーーー★ 高
メモリ負荷
低 ★ーーーーーーーーーーー 高
ポストバックの処理が使えない
ページの永続性データが消える条件
? ページを開いていき、メモリ内の最大ページ数を超
えた場合、古いページの情報から削除される。
–同じページでも、リンクなどでのページ遷移もカウント
される。
2015/7/10 Version: [###] Classification: Internal Owner: [Insert name] 23
2015/7/10 24Version: [0.1.0] Classification: Internal Owner: [EBIHARA Kenji]
Domino/XPagesの設定の見直し2
チューニングの観点1
メモリの有効活用3
スコープの活用4
XPagesの設計
2015/7/10 25
不要なサーバーコントロールを使用しない
? サーバーコントロールはHTML要素(タグ)より遅く、メモリを多く消費する
? <div></div>
? <xp:panel></xp:panel>
– どちらもブラウザでは<div></div>として出力される。
– <xp:**>で始まるコントロールは、プロパティの値をサーバーメモリーに格納し、ページを表示する
ときに、Javaのオブジェクトを生成する。
– その分、メモリにも速度にも影響がある。
– SSJSで、panelを操作しないのであれば、divを使うべき。
? テキストボックスコントロールを100個配置したページと
HTMLのinput タグを100個配置したページを
を表示した時の速度を計測
2015/7/10 26
2015/7/10 Version: [###] Classification: Internal Owner: [Insert name] 27
Xpagesのコントロールを100個
inputタグを100個
メモリの消費量も処理速度も微々たるものだが、ユーザー数、表示するページ数が
多くなればなるほど消費が大きくなる。
静的なページはViewStateを使わない
? ViewStateは、ポストバックの処理に必要なもの。
? 表示するだけの静的なページは、 ViewState を nostate にすることでメモリ
の消費を抑える事ができる。
2015/7/10 Version: [###] Classification: Internal Owner: [Insert name] 28
2015/7/10 29Version: [0.1.0] Classification: Internal Owner: [EBIHARA Kenji]
Domino/XPagesの設定の見直し2
チューニングの観点1
メモリの有効活用3
ライフサイクルとスコープの活用4
コントロールのプロパティの処理
2015/7/10 30
コントロールのプロパティで処理させない
? コントロールのプロパティの式は、ページを表示する処理で何度も呼ばれること
がある。
2015/7/10 Version: [###] Classification: Internal Owner: [Insert name] 31
例)コントロールの”可視”プロパティを 値の計算 でSSJSを記述
そのSSJSで、ビューを参照する処理を記述
1回のアクセスでDB、ビュー、文書へのアクセスが複数あることあわかる
あらかじめ値を取得して ViewState で渡す
2015/7/10 Version: [###] Classification: Internal Owner: [Insert name] 32
スコープの理解と利用
2015/7/10 33
スコープの理解と正しい活用
? スコープの種類は4種類
–Application Scope
–Session Scope
–View Scope
–Request Scope
? それぞれ、いつ、いくつ生成されて、いつ破棄されるのか、
理解しておく必要がある。
2015/7/10 Version: [###] Classification: Internal Owner: [Insert name] 34
Aさんセッション
ApplicationScope
Bさんセッション
Aさん
Bさん
画面1 画面1 画面2
画面1 画面1 画面2
更新
遷移
画面3
遷移
ApplicationScope
Aさんセッション
SessionScope
Bさんセッション
Aさん
Bさん
画面1 画面1 画面2
画面1 画面1 画面2
SessionScope
更新
画面1
遷移 遷移
リンクなどで別ウィンドウで表示した、画面でも
SessionScopeは共有される
SessionScope
Aさんセッション
ViewScope
Aさん
画面1 画面1 画面2
更新
ViewScope
Bさんセッション
ViewScope
Bさん
画面1 画面1 画面2
更新
ViewScope
画面1
ViewScope
遷移 遷移
画面は同一でも、新たにページを開いた場合は、別のスコープ
画面1
ViewScope
ViewScope
Aさんセッション
RequestScope
Aさん
画面1 画面1 画面2
更新
Bさんセッション
Bさん
画面1 画面1 画面2
更新
画面1
遷移 遷移
ページをレンダリングしたらメモリから削除される
画面1
遷移
RequestScope RequestScope RequestScope
RequestScope
RequestScope RequestScope RequestScope RequestScope
スコープ 発生条件 削除条件
Application
Scope
? DBをビルドまたは、HTTPタスクを起
動して初めてアクセスが有った時
? アプリケーションタイムアウト後に初め
てアクセスが有った時
? XSPのプロパティでアプリケーショ
ンのタイムアウトに指定した時間
以上、どのセッションからもアクセ
スがない時
? HTTPタスクを再起動またはDB
をビルドした時
Session
Scope
? ユーザーがブラウザを起動してから初
めてXPagesにアクセスした時
? ユーザーがセッション切れ後に
XPagesにアクセスした時
? セッションが終了した時
? XSPのプロパティでセッションタイ
ムアウトに指定した時間以上ア
クセスがない時(セッションが終
了する)
スコープ 発生条件 削除条件
View
Scope
? ユーザーがXPagesにアクセスし
た時
? XSPのプロパティのサーバー
ページの永続性の設定で
最大ページに達してキュー
から追い出された時
? セッションが終了した時
Request
Scope
? 画面の初期処理時
? 画面更新の初期処理時
? レスポンスをクライアントに返
した時
スコープ 利用例
Application
Scope
? どのユーザーにも共通で使用する情報を保持。
? DB独自の設定文書の内容など
Session
Scope
? セッション毎に共通で持っておく情報を保持。
? SSJSの”session”オブジェクトで取得できないユーザー
毎の情報、漢字氏名、所属など。
? 画面間の値の受け渡しには使わないほうがよい。(別
ウィンドウでもその値が参照されるため)
画面間の値の受け渡しには、URLパラメータを利用す
る。
スコープ 利用例
View
Scope
? 画面が開始してから終了するまで保持しておく情報。
? ユーザーには表示しないが、画面の情報として保持しておきたい値など。
“非表示の入力”コントロールで入れておく方法もあるが、このコントロール
は“renderd”プロパティをfalseにしないと、表示はされないがHTML内に
記載されるので、ユーザーから見える。またユーザーが勝手に書き換えもで
きてしまう。
メモリ効率の面からもViewScopeで管理するのが好ましい。
その場合、文書への書き戻し処理を忘れないように。
Request
Scope
? リクエストがあってからコントロールを表示するまで保持する情報。
? beforeRenderResponse等でViewから文書を取得し、各コントロー
ルでその文書を参照する場合など。
画面内の処理の変数的な扱いができる。
Scopeの利用シーンでは、これでよい場合はほとんどだったりする。
var common = {};
common.getSysSetting = function(){
//applicationScopeからシステム設定を取得
var setting = applicationScope.get('sysSetting');
//ない場合は、Viewから文書を取得してシステム設定を作成する
if(!setting){
var sysView = database.getView('sysView');
var doc = sysView.getFirstDocument();
setting = {
//JavaScriptのオブジェクトに展開
title: doc.getItemValueString('title'),
version: doc.getItemValueString('version')
};
//applicationScopeに格納する
applicationScope.put('sysSetting', setting);
}
return setting;
}
? セッションで共通で閲覧するシステム設定文書を、ApplicationScopeを利用して
Viewを参照することなく取得する例。
? ApplicationScopeはアクセスがないと消去されるので、ApplicationScopeにあるか
チェックし、なければ取得してApplicationScopeに格納する。
ご視聴ありがとうございました。
2015/7/10 48
齿笔补驳别蝉のパフォーマンス?チューニング

More Related Content

齿笔补驳别蝉のパフォーマンス?チューニング