Java Day Tokyo 2017 ダウンロード資料

Similar documents
Oracle パブリック・クラウド・サービス無料トライアル 申込手順書

How to Use the PowerPoint Template

PowerPoint Presentation

[HO-2] NetBeansとGlassFishではじめるJava EE7ハンズオン

Oracle Data Pumpのパラレル機能

Exam : 1z1-809-JPN Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO Get Latest & Valid 1z1-809-JPN Exam's Question and Answers 1 from Ac

開発・運用時のガイド JDK8への移行に伴う留意点 [UNIX]

Null

Javaセキュアコーディングセミナー2013東京第1回 演習の解説

2 1 Web Java Android Java 1.2 6) Java Java 7) 6) Java Java (Swing, JavaFX) (JDBC) 7) OS 1.3 Java Java

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版  

Java言語 第1回

K227 Java 2

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

Java (9) 1 Lesson Java System.out.println() 1 Java API 1 Java Java 1

Exam : 1z0-809 日本語 (JPN) Title : Java SE 8 Programmer II Vendor : Oracle Version : DEMO 1 / 8 Get Latest & Valid 1z0-809-JPN Exam's Question and Answe

Javaの作成の前に

intra-mart Accel Platform — イベントナビゲータ 開発ガイド   初版   None

解答上の注意 1 解答は 解答 紙の問題番号に対応した解答欄にマークしなさい 2 選択肢は 問ごとに 意されています 問 1の選択肢は 問 2で使 しません 3 選択肢は量が多いため 探しやすさの観点よりグループ分けされています グループ分けに合わせて解答欄が区切られていますが 横 1 列で問題 1

intra-mart Accel Platform — IM-Repository拡張プログラミングガイド   初版  

IBM の Java 活用ガイド_rev2


メディプロ1 Javaプログラミング補足資料.ppt

intra-mart Accel Platform — 外部ソフトウェア接続モジュール 仕様書   第3版  

. IDE JIVE[1][] Eclipse Java ( 1) Java Platform Debugger Architecture [5] 3. Eclipse GUI JIVE 3.1 Eclipse ( ) 1 JIVE Java [3] IDE c 016 Information Pr

PowerPoint Presentation

JavaプログラミングⅠ

OpenRulesモジュール

JavaプログラミングⅠ

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

新・明解Java入門

OpenRulesモジュール

HTTP 404 への対処

Java知識テスト問題

ダンプ取得機能強化サポートオプション Enterprise Edition

WebLogic Server 12c is Java SE 7 Java EE 6 Readiness

CLUSTERPRO MC ProcessSaver 1.2 for Windows 導入ガイド 第 4 版 2014 年 3 月 日本電気株式会社

,,,,., C Java,,.,,.,., ,,.,, i

How to Use the PowerPoint Template

JavaプログラミングⅠ

— OpenRulesモジュール 2017 Summer リリースノート   第2版  

3 Java 3.1 Hello World! Hello World public class HelloWorld { public static void main(string[] args) { System.out.println("Hello World");

目的 泡立ち法を例に Comparableインターフェイスの実装 抽象クラスの利用 型パラメタの利用 比較 入替 の回数を計測

[3-F] コンテナとJavaとOracle JETによるアプリ開発ハッカソン

Android Layout SDK プログラミング マニュアル

オブジェクト指向プログラミング・同演習 5月21日演習課題

問 次の Fortran プログラムの説明及びプログラムを読んで、設問に答えよ。

Client Client public void sendobject(object message) String String Web Container String RemoteEndpoint String Endpoint throwsioexception, EncodeExcept


miChecker導入手順書

— OpenRulesモジュール 2017 Summer リリースノート   初版  

第 2 章インタフェース定義言語 (IDL) IDL とは 言語や OS に依存しないインタフェース定義を行うためのインタフェース定義言語です CORBA アプリケーションを作成する場合は インタフェースを定義した IDL ファイルを作成する必要があります ここでは IDL の文法や IDL ファイ

JavaプログラミングⅠ

class IntCell { private int value ; int getvalue() {return value; private IntCell next; IntCell next() {return next; IntCell(int value) {this.value =

V-Client for Mac ユーザーズガイド


2

基本情報STEP UP演習Java対策

Prog2_9th

Transcription:

JDK9 の JMC & JFR のプレビュー Java SE Advanced 日本オラクル株式会社 Java Global Business Unit マスター プリンシパル セールスコンサルタント 宇野浩司 Java Day Tokyo 2017 2017 年 5 月 17 日

Safe Harbor Statement The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle s products remains at the sole discretion of Oracle. 2

本日の内容 JFR と JMC のおさらい JDK9 の Java Flight Recorder Java Mission Control 6.0 3

JFR と JMC のおさらい JDK9 の Java Flight Recorder Java Mission Control 6.0 4

JMC と JFR Java Mission Control と Java Flight Recorder ライセンス - Java SE Advanced ( 有償 ) に含まれている WebLogic Suite と WebLogic Enterprise にも含まれている 機能自身は ダウンロードしたバイナリにすでに含まれている (2013 年 9 月 7u40 から, 初期設定では機能的に Off になっている ) http://www.oracle.com/technetwork/java/javase/downloads/index.html 開発時は無償 http://www.oracle.com/technetwork/java/javase/terms/license/index.html 5

Java SE Advanced サポート窓口 延 サポート 社内 Java 利 管理ツール プロファイラー (JMC & JFR) 6

機能の概要 JFR (Java Flight Recorder) Oracle の Java SE 実 環境に内蔵されているプロファイラ Java 実 環境内にすでに収集されているデータを効率よく記録する仕組み JMC (Java Mission Control) クライアントアプリケーション JFR が記録したデータの視覚化 JMX コンソール ( リアルタイム監視 )... 7

JFR と JMC の構成 Java API アプリケーション Java イベント JFR JMX API JFR Java API 記録をコントロール start/stop/dump java -XX:StartFlightRecording= JDK/bin/jcmd <pid> <cmd> JVM JVM イベント JFR エンジン 記録されたデータ myrecording.jfr JMC クライアント java -XX:+UnlockCommercialFeatures -XX:+FlightRecorder JDK/bin/jmc または Eclipse プラグイン 8

イベントとして入手できる主な情報 Java アプリケーション 例外, スレッド, ファイル I/O, ネットワーク I/O など Java VM メモリの割当て, クラスのロード, JIT, GC, メソッドのサンプリングなど オペレーティングシステム メモリや CPU の利 情報など アプリケーションから JVM 内部および OS まで幅広く情報を記録 9

分析ログ 障害対応確認害対応障害分析プロファイラの継続利 による障害の対応 ( 例 ) プロファイラを利 しない場合の対応障一次分析 一次対応 再現待ち 取得 障害発生時に確認されたログを利 した一次対応 確認プロファイラを正常時から継続利 した場合の対応解決までの時間を短縮! 障害発生時にさまざまな情報が正常な状態から取得済み 課題 : 負荷が高い, 記録 のツールをリモートから常時接続 10

JFR によるプロファイリングの特徴 アプリケーションの変更は不要 JavaVM の設定を有効にするのみ 低負荷 ( 初期設定は 1 2% のオーバヘッド ) - 運 時にも利 できる 診断情報生成や記録のためにアプリケーションへのコードの追加や変更はしない HotSpot VM がすでに生成および収集しているデータを活 すべての振る舞いを記録しない 条件と一致した場合にイベントとして記録 イベント発生条件 ( しきい値や期間 ) の変更は可能 アプリケーション ローカルに記録 記録時にリモートに他のツールを接続し続ける必要なし 記録 のファイルの圧縮やサイズ制限可能 compress(gzip), maxage, maxsize 11

フライトレコーダ内部のイベント記録の流れ Java API イベント JVM イベント Event Event 溢れたら スレッド単位のバッファ初期値 :5KB Global Buffer グローバルのバッファ初期値 :452KB 溢れたら捨てる ( オプション ) ディクスに保存 ディスク ディスク Chunk 単位に分割して保存 Chunk Size 初期値 :12MB サイズ制限を越えたら古いデータから捨てる 12

JMC & JFR デモ JDK8, JMC 5.5 13

JFR と JMC のおさらい JDK9 の Java Flight Recorder Java Mission Control 6.0 14

JDK9 の JFR 新機能の概要 パフォーマンスの継続的な改善 異常終了時のディクスへのデータの出 クラッシュや OOM (Out Of Memory) 時など API のサポート イベントの追加 整理されたコマンドラインオプション 15

サポートされる API 以前の試験的な API とは非互換 oracle.jrockit.* から jdk.jfr.* に移動 モジュール jdk.jfr 小さなプロファイルで動作 JMX なしでも API からコントロール可能 機能 カスタムイベントの追加 Flight Recorder のコントロール 記録の解析 JMX - FlightRecorderMXBean com.oracle.jrockit から jdk.management.jfr へ jdk.jfr とは別モジュール 16

カスタムイベント の API import jdk.jfr.event; import jdk.jfr.label; public classhello { パッケージ名 アノテーション型 メタデータにアノテーションを利, ユーザ定義も可能 @Label("Hello World") static class HelloWorldEvent extends Event { @Label("Message") String message; 親クラス public static void main(string... args) { HelloWorldEvent event= new HelloWorldEvent(); event.message= "Hello World event message!"; event.commit(); イベントの記録 17

フライト記録を構文解析 ( 例 ) public class ParserExample { public static void main(string[] args) throws IOException{ longmaxnanos= Long.MIN_VALUE; RecordedEvent maxevent= null; for(recordedevent event : RecordingFile.readAllEvents(Paths.get(args[0]))) { if(event.geteventtype().getname().equals("se.hirt.jfr4junit.testevent")) { long nanos= event.getduration(); if(nanos> maxnanos) { maxnanos= nanos; maxevent= event; System.out.printf("Longest running test was: %s for %ds n", maxevent.getvalue("displayname"), maxnanos/ 1_000_000); System.out.println("Event was: n"+ maxevent); 18

JFR のコントロールとフライト記録の構文解析 ( 例 ) public class RecordAndConsume { public static void main(string[] args) throwsioexception{ Path path= Paths.get(args[0]); try(recording recording= new Recording()) { recording.setname("fibonacci Recording"); recording.start(); recording.enable(fibonaccievent.class); for(intn= 0; n< 50; n++) { FibonacciEvent event= new FibonacciEvent(); event.number= n; event.begin(); event.value= Fibonacci.fibonacciIterative(n); event.commit(); recording.stop(); recording.dump(path); 記録の開始 イベントの記録 ファイルへのダンプ for(recordedevent event: RecordingFile.readAllEvents(path)) { intnumber= event.getvalue("number"); longvalue= event.getvalue("value"); System.out.printf("fibonacci(%d) = %d (time: %dns) n", number, value, event.getduration()); 19

新しく追加されるイベント より詳細はセーフポイントの情報 より詳細なコードキャッシュの情報 PLAB (promotion local allocation buffers) イベント 詳細なインライン情報のためのコンパイラ イベント よりよい視覚化のためのG1 特有情報のイベント モジュール イベント ネイティブライブラリ イベントなど 20

コマンドラインから利 する場合の変更点 ハードディスクに保存しない場合 (In-memory example) JDK 8 -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true, dumponexit=true, dumponexitpath=/home/hirt/myrecording.jfr JDK 9 -XX:+UnlockCommercialFeatures -XX:StartFlightRecording=dumponexit=true, filename=/home/hirt/myrecording.jfr 21

コマンドラインから利 する場合の変更点 ハードディスクに保存する場合 (Disk Repository Example) JDK 8 -XX:+UnlockCommercialFeatures -XX:+FlightRecorder -XX:FlightRecorderOptions=defaultrecording=true, dumponexit=true, dumponexitpath=/home/hirt/myrecording.jfr,disk=true, maxsize=500m,maxage=20m JDK 9 -XX:+UnlockCommercialFeatures -XX:StartFlightRecording=dumponexit=true, filename=/home/hirt/myrecording.jfr, maxsize=500m,maxage=20m 22

JCMD JCMD を使 する場合は今までと同じ 例 ) > jcmd 4711 VM.unlock_commercial_features > jcmd 4711 JFR.start duration=2m,filename=/home/hirt/myrecording.jfr 29 23

JFR と JMC のおさらい JDK9 の Java Flight Recorder Java Mission Control 6.0 24

Java Mission Control 6 新機能の概要 メジャー バージョンアップ JDK9 にのみ提供 JDK 7/8 および JDK 9 JFR ファイルフォーマットのサポート JDK 7/8 および JDK 9 への接続をサポート フライト記録の自動分析 新しいユーザインタフェース 25

フライト記録の自動分析 定義されたルールに基づきデータを分析 Java API を利 した拡張もサポート 結果の一覧表示 潜在的な問題点の指摘 個々のページへのリンク 26

フライト記録の自動分析 - コンポーネント JMC 以外でも利 可能な POJO コンポーネント パーサ ルール エンジン ルール エンジンは JMC 以外でも利 Oracle 内部の PoC クラウドサービス JFR のアップロード JSON 形式の戻り値 Oracle 内部の分析 Web アプリケーション (API テスト, rules テストなど ) Oracle Enterprise Manager の記録の自動分析で使 27

フライト記録の自動分析 - Java API を利 した拡張 API が提供する機能 フィルタ アグリゲータ 簡単にルールの開発が可能 サポートの対象ではないが JMC6 のドキュメントには明記 標準的な Java サービス ローダ機構を使 ボイラープレートを生成する PDE プラグイン ( 試験的 ) 多くの支持があれば将来正式にサポート対象に 28

ルール インタフェース - IRule public interface IRule { RunnableFuture<Result> evaluate(iitemcollection items, IPreferenceValueProvider valueprovider); Collection<TypedPreference<?>> getconfigurationattributes(); getid(); getname(); gettopic(); 29

ルール実装の例 public class EnvironmentVariableRule implements IRule { private static final TypedPreference<String> PREFERENCE_ENVIRONMENT_VARIABLE_NAME = new TypedPreference<>( "environmentvariable", "Environment Variable", "The name of the environment variable to check for a floating point score", UnitLookup.PLAIN_TEXT.getPersister(), "JFR_RULE_TEST"); @Override public Collection<TypedPreference<?>> getconfigurationattributes() { return Arrays.<TypedPreference<?>> aslist(preference_environment_variable_name); @Override public String getid() { return "se.hirt.envrule.environmentvariablerule"; @Override public String getname() { return "Configurable Rule Demo"; @Override public String gettopic() { return JfrRuleTopics.ENVIRONMENT_VARIABLES_TOPIC;... 30

Rule の例 ( 続き )... @Override public Result evaluate(iitemcollection items, IPreferenceValueProvider valueprovider) { String variablename = valueprovider.getpreferencevalue(preference_environment_variable_name); String environmentvariablevalue = getenvironmentvariable(variablename, items); if(environmentvariablevalue == null) { return new Result(this, 100, "Could not find the environment variable named "+ variablename); doublescore = 0; try{ score = Double.parseDouble(environmentVariableValue); catch(numberformatexception e) { return new Result(this, 100, "Could not parse the environment variable named "+ variablename); return new Result(this, score, "The score in " + variablename+ " was "+ score); private String getenvironmentvariable(string variablename, IItemCollection items) { IItemCollection envitems= items.apply(itemfilters.and(jfrfilters.environment_variable, ItemFilters.equals(JfrAttributes.ENVIRONMENT_KEY, variablename))); return envitems.getaggregate(jfraggregators.first(jfrattributes.environment_value)); 31

Rules の実 public class RateFile { public static void main(string[] args) throwsioexception, CouldNotLoadRecordingException { IItemCollection events = JfrLoaderToolkit.loadEvents(new File(args[0])); for(irule rule: RuleRegistry.getRules()) { Result result = rule.evaluate(events, IPreferenceValueProvider.DEFAULT_VALUES); if(result.getscore() > 50) { System.out.printf("(%.0f) [%s]: %s n", result.getscore(), result.getrule().getid(),result.getshortdescription()); 32

新しいユーザインタフェース ナビゲーション アウトライン ビューのサポート タブの中のタブはなくなった レンジナビゲータの統合 先進的なフィルタ boolean 操作 (or, and) でフィルタの構築が可能 記録自体とは独 33

新しいユーザインタフェース ( 続き ) 分離されたスタックトレースの表示 すべてのスレッドに対して共通 構成を変更して旧ツリー 式の表 にも対応 Eclipse 内で利 する場合は JDK8 以降の JVM が必要 UI は ストリーム 他の JDK8 の言語仕様や JDK8 で追加された API を使 34

新しいユーザインタフェース ( 続き ) GUI ビルダの廃止 もし要望が多ければ復活させるかもしれない ページのカスタム構成 カスタムイベントのページの追加 構成可能な既存ページ 35

JMC UI Demo JMC 6 / JDK 9 36

まとめ JDK 9 で JFR API をサポート レコーダのコントロール カスタムイベントの生成 記録の解析 JMC 6 の新しい JFR 対応部分 記録の自動分析 カスタムルールを追加できるプラグイン 新しい UI JDK 7, 8 および 9 の記録フォーマットへの対応 37

参考情報 本会場の展示ブース Java Platform, Standard Edition トラブルシューティング ガイド, リリース 8 (2015 年 3 月 ) https://docs.oracle.com/javase/jp/8/docs/technotes/guides/troubleshoot/ 38

Q&A 39

40