国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java Flight Recorder小試牛刀

ChristmasBoy / 985人閱讀

摘要:序本文主要研究一下的使用。執行順序的話,先再,最后。內置了相關,可以用來解析文件,也可以在應用程序自定義事件發布出來可以采用命令啟動,也可以使用的開頭的命令在運行時操作,非常方便

本文主要研究一下Java Flight Recorder的使用。

命令

主要有5個命令,configure、check、start、dump、stop。執行順序的話,先start再dump,最后stop。

JFR.configure
參數 描述 值類型 默認值
globalbuffercount 指定global buffers的數量. 修改 memorysize參數會影響該值. Long 默認值依賴 memorysize 參數.
globalbuffersize 指定global buffers大小, 單位bytes. 修改 memorysize 參數會影響到global buffers. Long 默認值依賴 memorysize 參數.
maxchunksize 指定單個data chunk的最大值, 單位bytes Long 12582912
memorysize 指定總內存大小, 單位bytes Long 10485760
repositorypath 指定recordings在寫入到持久化文件之前的存儲路徑 String 默認為系統臨時目錄,Oracle Solaris以及Linux是/tmp.windows系統的話,取TMP環境變量值
stackdepth 指定stack traces的Stack depth Long 64
thread_buffer_size 指定每個thread的Local buffer size, 單位bytes. 不建議修改此參數,可能會降低性能 Long 8192
threadbufferstodisk 是否允許thread buffers在buffer thread阻塞的時候直接寫到磁盤 Boolean false
samplethreads 是否開啟thread sampling Boolean true
命令實例
jcmd 5793 JFR.configure
5793:
Current configuration:

Repository path: /private/var/folders/9r/v55wkcr91m5_g8h7lhgjzgr00000gn/T/2018_09_27_16_30_53_5793

Stack depth: 64
Global buffer count: 20
Global buffer size: 512.0 kB
Thread buffer size: 8.0 kB
Memory size: 10.0 MB
Max chunk size: 12.0 MB
Sample threads: true
JFR.start
參數 描述 值類型 默認值
delay 指定延時多長時間才開始記錄 Integer類型加s表示秒, m表示分鐘, 或者h表示小時 0s
disk 記錄的時候是否寫數據到磁盤 Boolean true
dumponexit 是否在JVM關閉時寫記錄到磁盤. 如果為true但沒有指定filename, 則文件名為系統生成,包含process ID, recording ID,以及 current time stamp (例如,hotspot-pid-47496-id-1-2018_01_25_19_10_41.jfr),文件路徑為進程啟動路徑 . Boolean false
duration 指定記錄時長 Integer類型加s表示秒, m表示分鐘, 或者h表示小時 0s (forever)
filename 指定停止時記錄數據的文件路徑,如果未指定,則使用進程使用目錄,例如recording.jfr`/home/user/recordings/recording.jfr`c: ecordings ecording.jfr String No default value
maxage 指定記錄數據在磁盤的最大存活時間,當disk參數為true時才有效 Integer類型加s表示秒, m表示分鐘, 或者h表示小時 0s (forever)
maxsize 指定記錄數據在磁盤的最大大小,默認單位bytes,指定mM表示兆,gG表示G,只有當disk參數為true時才有效,該值不能比maxchunksize參數值小. Long 0 (no maximum size)
name 指定記錄文件名,如未指定則默認生成. String 默認為系統生成.
path-to-gc-roots JDK 10引入的,指定在記錄結束前要收集的GC Roots的路徑.該參數有助于排查內存泄露,但是收集比較耗時,當且僅當懷疑有內存泄露時才啟用。如果settings參數設置為profile, 則收集的信息包括潛在內存泄露對象的stack trace. Boolean false
settings 指定記錄的配置文件,如果不是JRE_HOME/lib/jfr目錄下的要指定全路徑,要指定多個的話,用逗號分隔。默認路徑有default.jfc: 該配置開銷低,可以用于持續運行.profile.jfc: 則提供比default更多的數據,但是開銷大一些,對性能有所影響,適合短時間收集信息用 String JRE_HOME/lib/jfr/default.jfc
命令實例
jcmd 5793 JFR.start name=demojfr dumponexit=true
5793:
Started recording 1. No limit specified, using maxsize=250MB as default.

Use jcmd 5793 JFR.dump name=demojfr filename=FILEPATH to copy recording data to file.
JFR.check
參數 描述 值類型 默認值
name 指定文件名 String No default value
verbose 是否打印event settings Boolean false
命令實例
jcmd 5793 JFR.check
5793:
Recording 1: name=demojfr maxsize=250.0MB (running)
JFR.dump
參數 描述 值類型 默認值
filename(required) 指定dump寫入的路徑,如果未指定,則使用進程啟動的目錄,例如:recording.jfr`/home/user/recordings/recording.jfr`c: ecordings ecording.jfr String No default value
name(required) 指定要dump的記錄 String No default value
path-to-gc-roots JDK 10引入的,指定在記錄結束前要收集的GC Roots的路徑.該參數有助于排查內存泄露,但是收集比較耗時,當且僅當懷疑有內存泄露時才啟用. Boolean false
命令實例
jcmd 5793 JFR.dump name=demojfr filename=/tmp/demo.jfr
5793:
Dumped recording "demojfr", 480.8 kB written to:

/tmp/demo.jfr
JFR.stop
參數 描述 值類型 默認值
filename 指定停止時數據寫入的路徑.如果沒有指定則默認為進程啟動的目錄,例如recording.jfr`/home/user/recordings/recording.jfr`c: ecordings ecording.jfr String No default value
name 指定要stop的記錄的名稱 String No default value
命令實例
jcmd 5793 JFR.stop name=demojfr
5793:
Stopped recording "demojfr".
JMC

JMC打開jfr文件實例截圖如下:

讀取JFR文件
    @Test
    public void testReadJfr() throws IOException {
        Path p = Paths.get(getClass().getClassLoader().getResource("demo.jfr").getPath());
        List events = RecordingFile.readAllEvents(p);
        events.stream()
                .forEach(e -> LOGGER.info("eventType:{},startTime:{},endTime:{},fields:{}",e.getEventType().getName(),e.getStartTime(),e.getEndTime(),e.getFields()));
        List eventNames = events.stream()
                .map(e -> e.getEventType().getName())
                .distinct()
                .collect(Collectors.toList());
        System.out.println(eventNames.toString());
    }

直接使用jdk的api即可以解析jfr文件,讀出RecordedEvent

eventType類型輸出如下:

[jdk.ExceptionStatistics, jdk.NativeMethodSample, jdk.ThreadSleep, jdk.JavaMonitorWait, jdk.CPULoad, jdk.JavaThreadStatistics, jdk.ClassLoadingStatistics, jdk.CompilerStatistics, jdk.ClassLoaderStatistics, jdk.ModuleExport, jdk.CodeCacheStatistics, jdk.CodeSweeperStatistics, jdk.GCConfiguration, jdk.ActiveSetting, jdk.ActiveRecording, jdk.InitialSystemProperty, jdk.InitialEnvironmentVariable, jdk.CPUInformation, jdk.CPUTimeStampCounter, jdk.ThreadAllocationStatistics, jdk.PhysicalMemory, jdk.NativeLibrary, jdk.CompilerConfiguration, jdk.CodeCacheConfiguration, jdk.CodeSweeperConfiguration, jdk.IntFlag, jdk.UnsignedIntFlag, jdk.LongFlag, jdk.UnsignedLongFlag, jdk.DoubleFlag, jdk.BooleanFlag, jdk.StringFlag, jdk.ThreadEnd, jdk.ThreadCPULoad, jdk.NetworkUtilization, jdk.ThreadStart, jdk.ThreadContextSwitchRate, jdk.GCSurvivorConfiguration, jdk.GCTLABConfiguration, jdk.GCHeapConfiguration, jdk.YoungGenerationConfiguration, jdk.SystemProcess, jdk.ThreadDump, jdk.JVMInformation, jdk.OSInformation, jdk.ModuleRequire]
除了系統定義的eventType,還可以自定義event
自定義event

DemoEvent

@Label("Demo Event")
@Description("Helps the programmer getting started")
public class DemoEvent extends Event {
    @Label("Message")
    private String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

發布事件

        DemoEvent event = new DemoEvent();
        event.setMessage("hello, world!");
        event.commit();
之后使用api解析jfr文件,可以看到自定義的event,其name為com.example.jfr.DemoEvent
可以使用如下參數啟動-XX:StartFlightRecording=duration=120s,filename=/tmp/event.jfr,settings=default,name=DemoEventRecording
相關模塊

JDK11關于jfr的模塊有兩個,分別是jdk.jfr.jmod以及jdk.management.jfr.jmod,其具體內容如下:

?  jmods ../bin/jmod describe jdk.jfr.jmod
jdk.jfr@11
exports jdk.jfr
exports jdk.jfr.consumer
requires java.base mandated
qualified exports jdk.jfr.internal.management to jdk.management.jfr
contains jdk.jfr.events
contains jdk.jfr.internal
contains jdk.jfr.internal.cmd
contains jdk.jfr.internal.consumer
contains jdk.jfr.internal.dcmd
contains jdk.jfr.internal.handlers
contains jdk.jfr.internal.instrument
contains jdk.jfr.internal.jfc
contains jdk.jfr.internal.settings
contains jdk.jfr.internal.test
contains jdk.jfr.internal.types
platform macos-amd64

?  jmods ../bin/jmod describe jdk.management.jfr.jmod
jdk.management.jfr@11
exports jdk.management.jfr
requires java.base mandated
requires java.management transitive
requires jdk.jfr
requires jdk.management
provides sun.management.spi.PlatformMBeanProvider with jdk.management.jfr.internal.FlightRecorderMXBeanProvider
contains jdk.management.jfr.internal
platform macos-amd64
小結

Java Flight Recorder是一款優秀的java應用診斷工具,以前是商業版的特性,現在在java11當中開源出來,它導出的jfr文件可以用Java Mission Control來分析。

JDK11內置了相關API,可以用來解析jfr文件,也可以在應用程序自定義事件發布出來

JFR可以采用JVM命令啟動,也可以使用jcmd的JFR.開頭的命令在運行時操作,非常方便

doc

Using Java Flight Recorder

Java Flight Recorder Cheat Sheet

2 Diagnostic Command Reference

Clarifying some confusion around Java Flight Recordings

Java Flight Recorder:The Secret Arrow in Your Quiver

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/77295.html

相關文章

  • Java11的新特性

    摘要:從版本開始,不再單獨發布或者版本了,有需要的可以自己通過去定制官方解讀官方細項解讀穩步推進系列六的小試牛刀一文讀懂的為何如此高效棄用引擎 Java語言特性系列 Java5的新特性 Java6的新特性 Java7的新特性 Java8的新特性 Java9的新特性 Java10的新特性 Java11的新特性 Java12的新特性 Java13的新特性 序 本文主要講述一下Java11的新...

    April 評論0 收藏0
  • JDK11新特性解讀

    摘要:千呼萬喚,于正式發布版本即,也就是官方推薦可以廣泛使用的版本,其中發布了包括等個新特性,讓我們一睹為快。一新特性一覽二發布計劃日期階段說明對進入階段的變化會應用越來越嚴格的審查。我們需要支持以保持競爭力并與最新標準保持同步。 千呼萬喚,JDK11于2018-09-25正式發布GA版本(GA即General Availability,也就是官方推薦可以廣泛使用的版本),其中發布了包括ZG...

    piglei 評論0 收藏0
  • 5分鐘學會Java9-Java11的七大新特性

    摘要:來來來,花分鐘看看的七大新特性,還有代碼樣例。本地是指方法內的變量聲明。從開始,這個正式進入標準庫包。同步請求會阻止當前線程。可喜的是,如果嘗試改變不可變集合,會通過發出警告是在中引入的,增加了三個新方法。 現在Java有多元化的發展趨勢,既有JS又有C++還有C#的影子,不學習那是不行滴。來來來,花5分鐘看看Java9-Java11的七大新特性,還有代碼樣例。Java11 發布了,然...

    xuhong 評論0 收藏0
  • 一篇文章了解新發布的Java JDK 11

    摘要:到年將提供修復和安全更新。中期版本將每六個月發布一次。將擴展類文件格式以支持新的常量池形式。將提供一個低開銷的數據收集框架,用于對應用程序和進行故障排除。項目負責人表示,維護成本和低使用率并不能證明其保留是合理的。將是第一個獲得支持的平臺。 Java JDK 11刪除了CORBA,Java EE和JavaFX支持,但添加了十幾個主要新功能。 Java Development Kit(J...

    Ethan815 評論0 收藏0
  • 重磅發布:阿里 OpenJDK終于開源啦! 將長期支持版本 Dragonwell

    摘要:前幾天的北京阿里云峰會,阿里巴巴正式宣布對外開源長期支持版本。此次,阿里巴巴發布的預覽版本對應的版本。同時對于阿里云,會針對的兩個版本和隨阿里云鏡像發布,免費提供給阿里云客戶使用。年月,發布,根據阿里大數據場景的定制版發布。 前幾天的北京阿里云峰會,阿里巴巴正式宣布對外開源 OpenJDK 長期支持版本 Alibaba Dragonwell。作為 Java 全球管理組織 Java Co...

    andot 評論0 收藏0

發表評論

0條評論

ChristmasBoy

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<