Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
Norito Agetsuma
PPTX, PDF
8,134 views
Java EE パフォーマンスTips #glassfish_jp
2015-09-16 帰ってきたGlassFish Users Group Japan勉強会のスライドです。
Technology
◦
Read more
12
Save
Share
Embed
Embed presentation
Download
Downloaded 23 times
1
/ 32
2
/ 32
3
/ 32
4
/ 32
5
/ 32
6
/ 32
7
/ 32
8
/ 32
9
/ 32
10
/ 32
11
/ 32
12
/ 32
13
/ 32
14
/ 32
15
/ 32
16
/ 32
17
/ 32
18
/ 32
19
/ 32
20
/ 32
21
/ 32
22
/ 32
23
/ 32
24
/ 32
25
/ 32
26
/ 32
27
/ 32
28
/ 32
29
/ 32
30
/ 32
31
/ 32
32
/ 32
More Related Content
PDF
20160215 04 java ee7徹底入門 jbatch
by
Jun Inose
PDF
Jbatch実践入門 #jdt2015
by
Norito Agetsuma
PPTX
Unicode文字列処理
by
信之 岩永
PDF
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
by
Shuichi Tsutsumi
PDF
OAuth 2.0のResource Serverの作り方
by
Hitachi, Ltd. OSS Solution Center.
PDF
マーブル図で怖くないRxJS
by
bitbank, Inc. Tokyo, Japan
PPTX
脱 Excel設計書
by
rai
PDF
JSR 352 “Batch Applications for the Java Platform”
by
Norito Agetsuma
20160215 04 java ee7徹底入門 jbatch
by
Jun Inose
Jbatch実践入門 #jdt2015
by
Norito Agetsuma
Unicode文字列処理
by
信之 岩永
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
by
Shuichi Tsutsumi
OAuth 2.0のResource Serverの作り方
by
Hitachi, Ltd. OSS Solution Center.
マーブル図で怖くないRxJS
by
bitbank, Inc. Tokyo, Japan
脱 Excel設計書
by
rai
JSR 352 “Batch Applications for the Java Platform”
by
Norito Agetsuma
What's hot
PDF
O/Rマッパーによるトラブルを未然に防ぐ
by
kwatch
PPTX
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
by
JustSystems Corporation
PPTX
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
by
Koichi Sakata
PDF
ドメイン駆動設計入門
by
増田 亨
PDF
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
by
日本マイクロソフト株式会社
PPTX
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
by
オラクルエンジニア通信
PPTX
HTTP2 最速実装 〜入門編〜
by
Kaoru Maeda
PDF
FIDO2導入してみたを考えてみた
by
FIDO Alliance
PPTX
AAD B2Cでゆるっと真面目に認証しよう【Interact2019】
by
Tsubasa Yoshino
PPTX
30分で分かる!OSの作り方
by
uchan_nos
PDF
[db tech showcase Tokyo 2016] C32: 世界一速いPostgreSQLを目指せ!インメモリカラムナの実現 by 富士通株式会...
by
Insight Technology, Inc.
PPT
インフラエンジニアのためのcassandra入門
by
Akihiro Kuwano
PDF
.NET 7におけるBlazorの新機能
by
TomomitsuKusaba
PDF
Vue入門
by
Takeo Noda
PDF
Pacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/Spring
by
Takatoshi Matsuo
PPTX
Nmapの真実(続)
by
abend_cve_9999_0001
PDF
分散トレーシング技術について(Open tracingやjaeger)
by
NTT Communications Technology Development
PDF
Active Directory_グループポリシー基礎
by
F DANKI
PDF
論文紹介: Cuckoo filter: practically better than bloom
by
Sho Nakazono
PDF
はじめての品質
by
エンジニア勉強会 エスキュービズム
O/Rマッパーによるトラブルを未然に防ぐ
by
kwatch
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
by
JustSystems Corporation
JJUG CCC 2017 Spring Seasar2からSpringへ移行した俺たちのアプリケーションがマイクロサービスアーキテクチャへ歩み始めた
by
Koichi Sakata
ドメイン駆動設計入門
by
増田 亨
【BS4】時は来たれり。今こそ .NET 6 へ移行する時。
by
日本マイクロソフト株式会社
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
by
オラクルエンジニア通信
HTTP2 最速実装 〜入門編〜
by
Kaoru Maeda
FIDO2導入してみたを考えてみた
by
FIDO Alliance
AAD B2Cでゆるっと真面目に認証しよう【Interact2019】
by
Tsubasa Yoshino
30分で分かる!OSの作り方
by
uchan_nos
[db tech showcase Tokyo 2016] C32: 世界一速いPostgreSQLを目指せ!インメモリカラムナの実現 by 富士通株式会...
by
Insight Technology, Inc.
インフラエンジニアのためのcassandra入門
by
Akihiro Kuwano
.NET 7におけるBlazorの新機能
by
TomomitsuKusaba
Vue入門
by
Takeo Noda
Pacemaker+PostgreSQLレプリケーションで共有ディスクレス高信頼クラスタの構築@OSC 2013 Tokyo/Spring
by
Takatoshi Matsuo
Nmapの真実(続)
by
abend_cve_9999_0001
分散トレーシング技術について(Open tracingやjaeger)
by
NTT Communications Technology Development
Active Directory_グループポリシー基礎
by
F DANKI
論文紹介: Cuckoo filter: practically better than bloom
by
Sho Nakazono
はじめての品質
by
エンジニア勉強会 エスキュービズム
Viewers also liked
PPTX
Java EE8 Report
by
Norito Agetsuma
PPTX
Webデザイナーの私がMicrosoft Azureを使うようになったワケ
by
典子 松本
PDF
「もしかして」「私たち」「「入れ替わってるー! 」」〜Java女子部がRuby on Railsやってみた編〜
by
Aya Ebata
PPTX
JavaOne2015報告会 Java EE アップデート #j1jp
by
Norito Agetsuma
PDF
Java EE 再入門
by
minazou67
PPTX
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
by
Norito Agetsuma
PDF
Welcome back, GlassFish!
by
Yumi Hiraoka
PPTX
Java EE 7技術アップデート & 逆引き JSF 2.2
by
Hirofumi Iwasaki
PDF
Oracle talk 20131213
by
Arshal Ameen
PPT
JPA説明会
by
Ryo Asai
PPTX
Introduction to Wildfly 8 - Marchioni
by
Codemotion
PDF
JSFとJAX-RSで作る Thin Server Architecture #glassfishjp
by
Toshiaki Maki
PDF
Android端末のroot化について
by
Shuichi Takaya
PPT
アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer
by
Kunimasa Noda
PDF
桐島、Rubyやめるってよ
by
Narihiro Nakamura
PDF
JavaOne感想&技術トレンド紹介 - JavaOne2015報告会
by
Yusuke Suzuki
PDF
Javaのプログラムはどうやって動いているの? GC編
by
Yuichi Sakuraba
PDF
Scala dreaded underscore
by
RUDDER
PDF
Unixカーネルの設計 7 プロセスの制御
by
Norito Agetsuma
Java EE8 Report
by
Norito Agetsuma
Webデザイナーの私がMicrosoft Azureを使うようになったワケ
by
典子 松本
「もしかして」「私たち」「「入れ替わってるー! 」」〜Java女子部がRuby on Railsやってみた編〜
by
Aya Ebata
JavaOne2015報告会 Java EE アップデート #j1jp
by
Norito Agetsuma
Java EE 再入門
by
minazou67
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
by
Norito Agetsuma
Welcome back, GlassFish!
by
Yumi Hiraoka
Java EE 7技術アップデート & 逆引き JSF 2.2
by
Hirofumi Iwasaki
Oracle talk 20131213
by
Arshal Ameen
JPA説明会
by
Ryo Asai
Introduction to Wildfly 8 - Marchioni
by
Codemotion
JSFとJAX-RSで作る Thin Server Architecture #glassfishjp
by
Toshiaki Maki
Android端末のroot化について
by
Shuichi Takaya
アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer
by
Kunimasa Noda
桐島、Rubyやめるってよ
by
Narihiro Nakamura
JavaOne感想&技術トレンド紹介 - JavaOne2015報告会
by
Yusuke Suzuki
Javaのプログラムはどうやって動いているの? GC編
by
Yuichi Sakuraba
Scala dreaded underscore
by
RUDDER
Unixカーネルの設計 7 プロセスの制御
by
Norito Agetsuma
More from Norito Agetsuma
PDF
Quarkus入門
by
Norito Agetsuma
PDF
Java EEを補完する仕様 MicroProfile
by
Norito Agetsuma
PDF
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
by
Norito Agetsuma
PDF
Javaトラブルに備えよう #jjug_ccc #ccc_h2
by
Norito Agetsuma
PDF
JJUG 11月ナイトセミナー CDIをはじめよう
by
Norito Agetsuma
PDF
AeroGear & Java EE 7 で簡単プッシュ
by
Norito Agetsuma
PDF
プロになるためのJavaScript入門読書会 レジュメ
by
Norito Agetsuma
PDF
SQLアンチパターン読書会 レジュメ
by
Norito Agetsuma
PDF
Java Batch 仕様 (Public Review時点)
by
Norito Agetsuma
PDF
Lt agetsuma 拡大するcdi
by
Norito Agetsuma
Quarkus入門
by
Norito Agetsuma
Java EEを補完する仕様 MicroProfile
by
Norito Agetsuma
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
by
Norito Agetsuma
Javaトラブルに備えよう #jjug_ccc #ccc_h2
by
Norito Agetsuma
JJUG 11月ナイトセミナー CDIをはじめよう
by
Norito Agetsuma
AeroGear & Java EE 7 で簡単プッシュ
by
Norito Agetsuma
プロになるためのJavaScript入門読書会 レジュメ
by
Norito Agetsuma
SQLアンチパターン読書会 レジュメ
by
Norito Agetsuma
Java Batch 仕様 (Public Review時点)
by
Norito Agetsuma
Lt agetsuma 拡大するcdi
by
Norito Agetsuma
Java EE パフォーマンスTips #glassfish_jp
1.
Java EE パフォーマンスTips 2015/09/16 帰ってきた GlassFish
Users Group Japan 勉強会 上妻 宜人 (あげつま のりと)
2.
上妻 宜人 -
あげつま のりと • SIer勤務 • 技術サポート部隊に所属 • Java / Java EE トラブルシューティング • はてな 見習いプログラミング日記
3.
本日のテーマ
4.
Java EEレイヤ毎の性能Tips Presentation Business Logic Repository • JSF •
JAX-RS • .... • EJB • CDI • JPA/JDBC • 外部API呼出 • ファイル I/O
5.
Java EEパフォーマンスTips • プレゼンテーション層
(JSF) • #1 古いmojarraを使わない (JAVASERVERFACES-2494対策) • ビジネス層 (EJB/CDI) • #2 DIはEJBではなくCDIを使う • #3 @Asynchronous利用時はスレッドプールに注意 • データアクセス層 (JPA) • #4 JPAのexecuteBatch設定を忘れない
6.
#1 古いmojarraを使わない (JAVASERVERFACES-2494対策)
7.
#1 古いmojarraを使わない • JSF参照実装mojarraには、かつて性能バグがあった •
JAVASERVERFACES-2494 (https://java.net/jira/browse/JAVASERVERFACES-2494) • JSFタグ (UIComponent) が増えると遅くなる問題 • 2.1.22, 2.2.1 で修正 • GlassFish4.0 が該当。4.1でFix。
8.
GlassFish4.0 と Payara4.1
で実測 • 大量のJSFタグがポイント • 1000, 3000, 5000 タグで GlassFish4.0 と Payara4.1 比較 <h:body> <h1>JSF Many Component 1000</h1> <h:form> <h:outputText value="#{testBean.name}"/> <h:outputText value="#{testBean.name}"/> <h:outputText value="#{testBean.name}"/> <h:outputText value="#{testBean.name}"/> <h:outputText value="#{testBean.name}"/> ... 以降大量のoutputTextを繰り返す
9.
タグ数が多い場合は注意 • GlassFish4.0: レスポンスタイムが徐々に低下 •
Payara4.1.153 : 5000タグで150ミリ秒 0 1000 2000 3000 4000 5000 1000 2000 3000 4000 5000 レスポンスタイム(ミリ秒) JSFタグ数 GlassFish 4.0 (mojarra2.2.0) Payara 4.1.153 (mojarra2.2.11) マシン情報: MacBook Air corei5 1.7GHz JDK1.8.0_60
10.
mojarraは色々な所で使われている • GlassFish • 4.0は影響あり。
4.1以降で修正。 • Payaraは4.1ベースなので影響なし。 • WildFly • 8.0.0と8.1.0は影響あり。 8.2以降で修正。
11.
Java EEパフォーマンスTips • プレゼンテーション層
(JSF) • #1 古いmojarraを使わない (JAVASERVERFACES-2494対策) • ビジネス層 (EJB/CDI) • #2 DIはEJBではなくCDIを使う • #3 @Asynchronous利用時はスレッドプールに注意 • データアクセス層 (JPA) • #4 JPAのexecuteBatch設定を忘れない
12.
#2 DIはEJBではなくCDIを使う
13.
#2 DIはEJBではなくCDIを使う • Java
EE6 CDI が導入。 • Java EE7 より beans.xml なしでデフォルト有効化。 • Java EE5 まではEJB間でのみDIが利用可。 @Inject private StockService service; @Dependent public class StockService { // ... }
14.
EJBのループ呼び出しによるオーバヘッド • EJBのループ呼び出しは性能上悩みの種だった • 万単位以上のループのみオーバヘッド顕在化 •
見つかった時には試験期間の後半
15.
実際に測っている • Payara4.1.152でBeanをループ呼び出し • EJB
と CDI Bean を呼び出して比較 // EJB @Stateless public class EJBBean { public String echo(String s) { return s; } } // CDI @ApplicationScoped public class CDIBean {...} // Client @Inject EJBBean ejb; for (int i = 0; i < loop; i++) { ejb.echo(String.valueOf(i)); }
16.
CDIはほとんどオーバヘッドがない 271 907 2953 1 8 15 10000
50000 100000 EJB @Stateless CDI @ApplicationScoped ループ呼び出し回数 単位: ミリ秒 マシン情報: MacBook Air corei5 1.7GHz JDK1.8.0_60, Payara4.1.153
17.
@Transactionalもループで呼び出してみた • @Transactinal 宣言的トランザクション
(Java EE7 〜) • ついうっかり、ループで呼び出される状況を想定 @ApplicationScoped @Transactional public class StockService { public void put(Stock s) { // 更新系処理 ... } public void search(Criteria c) { // 参照系処理 ... } }
18.
@Transactionalはループで呼ばないこと • @Transactional の実体はインターセプタ。 •
ループ呼出しコストは高い。 271 907 2953 1 8 151909 8822 32761 10000 50000 100000 EJB @Stateless CDI @ApplicationScoped CDI @ApplicationScoped & @Transactional ループ呼び出し回数 マシン情報: MacBook Air corei5 1.7GHz JDK1.8.0_60, Payara4.1.153 単位: ミリ秒
19.
#3 @Asynchronous利用時は EJBスレッドプールに注意
20.
#3 @Asynchronous利用時はEJBスレッドプールに注意 • @Asynchronousの振り返り •
EJB3.1 (Java EE6) で導入 • シンプルに非同期タスク処理が実装できる @Stateless public class AsyncBean { @Asynchronous public Future<String> async() { return new AsyncResult<>("done”); } }
21.
GlassFishデフォルトは多重度が増えない • 以下の非同期EJBの呼び出しは、16多重で止まる • GlassFish4
EJBスレッドプールのデフォルト上限が16 • Performance Tuning Guideにも言及がなく、ハマる @Inject private AsyncBean async; public void callAsyncEjb() { IntStream.range(0, 100) .forEach(i -> async.async()); }
22.
“EJB Container” のプロパティを追加 •
固有の入力欄はなく、プロパティとして設定 • thread-core-pool-size : 最小プールサイズ • thread-max-pool-size : 最大プールサイズ
23.
Java EEパフォーマンスTips • プレゼンテーション層
(JSF) • #1 古いmojarraを使わない (JAVASERVERFACES-2494対策) • ビジネス層 (EJB/CDI) • #2 DIはEJBではなくCDIを使う • #3 @Asynchronous利用時はスレッドプールに注意 • データアクセス層 (JPA) • #4 JPAのexecuteBatch設定を忘れない
24.
#4. JPAのexecuteBatch設定を忘れない • JDBC利用時はexecuteBatchを皆意識する •
JPAを使い始めると、何故か忘れやすい • JPA内部で自動的に最適化されている淡い期待 • しかし、EclipseLinkもHibernateもバッチ更新デフォルト無効
25.
EclipseLink のバッチ書き込み設定 • persistence.xml
に設定 • eclipselink.jdbc.batch-writing = jdbc (default: none) • eclipselink.jdbc.batch-writing.size = ... (default: 100) <persistence-unit name="PostgresPU"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <jta-data-source>jdbc/postgresDS</jta-data-source> <properties> <property name="eclipselink.jdbc.batch-writing" value="jdbc"/> <property name="eclipselink.jdbc.batch-writing.size" value="100"/> ...
26.
Payara4.1で実際に測ってみる • PostgreSQLに100, 1000,
1万レコードのINSERT • JDBCを加えてO/Rマッパー遅い疑惑も検証 • #1. JDBC executeBatch • #2. JPA batch-writing=jdbc (バッチ有効化) • #3. JPA batch-writing=none (バッチ無効化)
27.
測定結果 • INSERT 100レコード
でも十分な効果がある • JDBCと比較して、JPA(EclipseLink) は1〜2割遅い • 1万行であれば、ORMコストはそれほど大きくない 40 128 122375 169 14891243 9023 58247 100レコード 1000レコード 10000レコード JDBC executeBatch EclipseLink (batch-writing=jdbc) EclipseLink (batch-writing=none) 単位: ミリ秒 マシン情報: MacBook Air corei5 1.7GHz JDK1.8.0_60, Payara4.1.153, PostgreSQL9.3
28.
まとめ
29.
#1 古いmojarraを使わない GlassFish4.1以上 or
Payaraを使う (mojarra2.1.22, 2.2.1 以上)
30.
#2 DIはEJBではなくCDIを使う 過ループ時のEJBのオーバヘッドは大きい @Transactionalループ呼び出しに注意
31.
#3 @Asynchronous利用時は EJBスレッドプールに注意 EJBコンテナの以下プロパティを忘れずに設定 thread-core-pool-size, thread-max-pool-size
32.
#4 JPAのexecuteBatch設定を忘れない EclipseLink/Hibernateデフォルトはバッチ無効 persistence.xml eclipselink.jdbc.batch-writing=jdbc
Download