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,132 views
Java EE パフォーマンスTips #glassfish_jp
2015-09-16 帰ってきたGlassFish Users Group Japan勉強会のスライドです。
Technology
◦
Read more
12
Save
Share
Embed
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
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
by
NTT DATA Technology & Innovation
PDF
ReactとSeleniumの幸せな関係
by
Akira Kuratani
PDF
Jbatch実践入門 #jdt2015
by
Norito Agetsuma
PDF
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
by
Yahoo!デベロッパーネットワーク
PPTX
Spring と TDD
by
Takeshi Ogawa
PDF
今日からできる!簡単 .NET 高速化 Tips
by
Takaaki Suzuki
PDF
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
by
Kent Ohashi
PDF
Spring Boot × Vue.jsでSPAを作る
by
Go Miyasaka
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
by
NTT DATA Technology & Innovation
ReactとSeleniumの幸せな関係
by
Akira Kuratani
Jbatch実践入門 #jdt2015
by
Norito Agetsuma
Micrometer/Prometheusによる大規模システムモニタリング #jsug #sf_26
by
Yahoo!デベロッパーネットワーク
Spring と TDD
by
Takeshi Ogawa
今日からできる!簡単 .NET 高速化 Tips
by
Takaaki Suzuki
JavaからScala、そしてClojureへ: 実務で活きる関数型プログラミング
by
Kent Ohashi
Spring Boot × Vue.jsでSPAを作る
by
Go Miyasaka
What's hot
PPTX
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
by
NTT DATA Technology & Innovation
PPTX
Introduction to spring boot
by
Santosh Kumar Kar
PDF
Spring Boot
by
koppenolski
PDF
ドメイン駆動設計入門
by
Takuya Kitamura
PDF
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
by
onozaty
PDF
Javaトラブルに備えよう #jjug_ccc #ccc_h2
by
Norito Agetsuma
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
PDF
DockerとPodmanの比較
by
Akihiro Suda
PPTX
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
by
オラクルエンジニア通信
PDF
なぜ人は必死でjQueryを捨てようとしているのか
by
Yoichi Toyota
PDF
Practical migration from JSP to Thymeleaf
by
Toshiki Iga
PDF
メルカリ・ソウゾウでは どうGoを活用しているのか?
by
Takuya Ueda
PDF
できる!並列・並行プログラミング
by
Preferred Networks
PDF
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
by
Yoshiro Tokumasu
PDF
ドメイン駆動設計 失敗したことと成功したこと
by
BIGLOBE Inc.
PDF
Formation Spring Avancé gratuite par Ippon 2014
by
Ippon
PDF
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
by
Teppei Sato
PPTX
冬のLock free祭り safe
by
Kumazaki Hiroki
PDF
nginx入門
by
Takashi Takizawa
PDF
例外設計における大罪
by
Takuto Wada
JVMに裏から手を出す!JVMTIに触れてみよう(オープンソースカンファレンス2020 Online/Hiroshima 講演資料)
by
NTT DATA Technology & Innovation
Introduction to spring boot
by
Santosh Kumar Kar
Spring Boot
by
koppenolski
ドメイン駆動設計入門
by
Takuya Kitamura
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
by
onozaty
Javaトラブルに備えよう #jjug_ccc #ccc_h2
by
Norito Agetsuma
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
DockerとPodmanの比較
by
Akihiro Suda
【改訂版あり】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!
by
オラクルエンジニア通信
なぜ人は必死でjQueryを捨てようとしているのか
by
Yoichi Toyota
Practical migration from JSP to Thymeleaf
by
Toshiki Iga
メルカリ・ソウゾウでは どうGoを活用しているのか?
by
Takuya Ueda
できる!並列・並行プログラミング
by
Preferred Networks
JDK 16 で導入された JEP 396 にご注意!! (JJUG CCC 2021 Spring)
by
Yoshiro Tokumasu
ドメイン駆動設計 失敗したことと成功したこと
by
BIGLOBE Inc.
Formation Spring Avancé gratuite par Ippon 2014
by
Ippon
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
by
Teppei Sato
冬のLock free祭り safe
by
Kumazaki Hiroki
nginx入門
by
Takashi Takizawa
例外設計における大罪
by
Takuto Wada
Viewers also liked
PPTX
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
by
Norito Agetsuma
PDF
Java EE 再入門
by
minazou67
PPTX
Java EE 7技術アップデート & 逆引き JSF 2.2
by
Hirofumi Iwasaki
PDF
Unixカーネルの設計 7 プロセスの制御
by
Norito Agetsuma
PPTX
JavaOne2015報告会 Java EE アップデート #j1jp
by
Norito Agetsuma
PDF
Scala dreaded underscore
by
RUDDER
PPTX
Java EE8 Report
by
Norito Agetsuma
PPTX
Introduction to Wildfly 8 - Marchioni
by
Codemotion
PDF
JSFとJAX-RSで作る Thin Server Architecture #glassfishjp
by
Toshiaki Maki
PDF
桐島、Rubyやめるってよ
by
Narihiro Nakamura
PPTX
Webデザイナーの私がMicrosoft Azureを使うようになったワケ
by
典子 松本
PPT
アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer
by
Kunimasa Noda
PDF
Android端末のroot化について
by
Shuichi Takaya
PPT
JPA説明会
by
Ryo Asai
PDF
JavaOne感想&技術トレンド紹介 - JavaOne2015報告会
by
Yusuke Suzuki
PDF
「もしかして」「私たち」「「入れ替わってるー! 」」〜Java女子部がRuby on Railsやってみた編〜
by
Aya Ebata
PDF
Oracle talk 20131213
by
Arshal Ameen
PDF
Welcome back, GlassFish!
by
Yumi Hiraoka
PDF
Javaのプログラムはどうやって動いているの? GC編
by
Yuichi Sakuraba
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
by
Norito Agetsuma
Java EE 再入門
by
minazou67
Java EE 7技術アップデート & 逆引き JSF 2.2
by
Hirofumi Iwasaki
Unixカーネルの設計 7 プロセスの制御
by
Norito Agetsuma
JavaOne2015報告会 Java EE アップデート #j1jp
by
Norito Agetsuma
Scala dreaded underscore
by
RUDDER
Java EE8 Report
by
Norito Agetsuma
Introduction to Wildfly 8 - Marchioni
by
Codemotion
JSFとJAX-RSで作る Thin Server Architecture #glassfishjp
by
Toshiaki Maki
桐島、Rubyやめるってよ
by
Narihiro Nakamura
Webデザイナーの私がMicrosoft Azureを使うようになったワケ
by
典子 松本
アプリ開発・端末毎の解像度の違いを吸収する方法 Android Bazaar and Conference 2011 Summer
by
Kunimasa Noda
Android端末のroot化について
by
Shuichi Takaya
JPA説明会
by
Ryo Asai
JavaOne感想&技術トレンド紹介 - JavaOne2015報告会
by
Yusuke Suzuki
「もしかして」「私たち」「「入れ替わってるー! 」」〜Java女子部がRuby on Railsやってみた編〜
by
Aya Ebata
Oracle talk 20131213
by
Arshal Ameen
Welcome back, GlassFish!
by
Yumi Hiraoka
Javaのプログラムはどうやって動いているの? GC編
by
Yuichi Sakuraba
More from Norito Agetsuma
PDF
Quarkus入門
by
Norito Agetsuma
PDF
JSR 352 “Batch Applications for the Java Platform”
by
Norito Agetsuma
PDF
Java EEを補完する仕様 MicroProfile
by
Norito Agetsuma
PDF
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
by
Norito Agetsuma
PDF
JJUG 11月ナイトセミナー CDIをはじめよう
by
Norito Agetsuma
PDF
Java Batch 仕様 (Public Review時点)
by
Norito Agetsuma
PDF
SQLアンチパターン読書会 レジュメ
by
Norito Agetsuma
PDF
Lt agetsuma 拡大するcdi
by
Norito Agetsuma
PDF
AeroGear & Java EE 7 で簡単プッシュ
by
Norito Agetsuma
PDF
プロになるためのJavaScript入門読書会 レジュメ
by
Norito Agetsuma
Quarkus入門
by
Norito Agetsuma
JSR 352 “Batch Applications for the Java Platform”
by
Norito Agetsuma
Java EEを補完する仕様 MicroProfile
by
Norito Agetsuma
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
by
Norito Agetsuma
JJUG 11月ナイトセミナー CDIをはじめよう
by
Norito Agetsuma
Java Batch 仕様 (Public Review時点)
by
Norito Agetsuma
SQLアンチパターン読書会 レジュメ
by
Norito Agetsuma
Lt agetsuma 拡大するcdi
by
Norito Agetsuma
AeroGear & Java EE 7 で簡単プッシュ
by
Norito Agetsuma
プロになるためのJavaScript入門読書会 レジュメ
by
Norito Agetsuma
Recently uploaded
PDF
論文紹介:"MM-Tracker: Motion Mamba for UAV-platform Multiple Object Tracking", "M...
by
Toru Tamaki
PDF
論文紹介:"Reflexion: language agents with verbal reinforcement learning", "MA-LMM...
by
Toru Tamaki
PDF
論文紹介:Simultaneous Detection and Interaction Reasoning for Object-Centric Acti...
by
Toru Tamaki
PDF
How We Operated Ticket-Driven Development in JIRA.pdf
by
akipii ogaoga
PDF
歴史好きのスクラム話 JBUG名古屋#5 AI時代のデータドリブンなプロジェクト管理
by
Tatsuya Naiki
PDF
手軽に広範囲でプライバシーを守りながら人数カウントできる ~ LoRaWAN AI人流カウンター PF52 日本語カタログ
by
CRI Japan, Inc.
PDF
LoRaWAN小売業DXソリューション ~天候データと人流カウンターを利用して売り上げアップに貢献!
by
CRI Japan, Inc.
論文紹介:"MM-Tracker: Motion Mamba for UAV-platform Multiple Object Tracking", "M...
by
Toru Tamaki
論文紹介:"Reflexion: language agents with verbal reinforcement learning", "MA-LMM...
by
Toru Tamaki
論文紹介:Simultaneous Detection and Interaction Reasoning for Object-Centric Acti...
by
Toru Tamaki
How We Operated Ticket-Driven Development in JIRA.pdf
by
akipii ogaoga
歴史好きのスクラム話 JBUG名古屋#5 AI時代のデータドリブンなプロジェクト管理
by
Tatsuya Naiki
手軽に広範囲でプライバシーを守りながら人数カウントできる ~ LoRaWAN AI人流カウンター PF52 日本語カタログ
by
CRI Japan, Inc.
LoRaWAN小売業DXソリューション ~天候データと人流カウンターを利用して売り上げアップに貢献!
by
CRI Japan, Inc.
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