從es原始碼發現JvmStats資訊採集

2021-09-19 22:13:08 字數 2459 閱讀 1433

在es的jvm監控當中,通過jmx能夠採集的指標包括jvm堆空間、jvm非堆空間、jvm新生區倖存區老年區空間、jvm的gc耗時、執行緒數。獲取這些指標的核心方法都是通過jmx提供的介面進行實現。

在es的原始碼當中jvmstats的類,內部有具體的**實現,有興趣的可以看看。

public class jvmstats implements streamable, serializable, toxcontent  catch (throwable e) 

jvminfo info = jvminfo.jvminfo();

boolean enablelastgc = booleans.parseboolean(system.getproperty("monitor.jvm.enable_last_gc"), defaultenablelastgc);

if (enablelastgc) catch (throwable ex)

}jvmstats.enablelastgc = enablelastgc;

}public static jvmstats jvmstats()

// 統計各代記憶體使用情況

pools.add(new memorypool(name,

usage.getused() < 0 ? 0 : usage.getused(),

usage.getmax() < 0 ? 0 : usage.getmax(),

peakusage.getused() < 0 ? 0 : peakusage.getused(),

peakusage.getmax() < 0 ? 0 : peakusage.getmax()

));} catch (outofmemoryerror err) catch (throwable ex)

}stats.mem.pools = pools.toarray(new memorypool[pools.size()]);

// 獲取執行緒數量

stats.threads = new threads();

stats.threads.count = threadmxbean.getthreadcount();

stats.threads.peakcount = threadmxbean.getpeakthreadcount();

// 獲取jvm的gc資訊

listgcmxbeans = managementfactory.getgarbagecollectormxbeans();

stats.gc = new garbagecollectors();

stats.gc.collectors = new garbagecollector[gcmxbeans.size()];

for (int i = 0; i < stats.gc.collectors.length; i++)

for (map.entryentry : usageaftergc.entryset())

stats.gc.collectors[i].lastgc = new garbagecollector.lastgc(starttime, endtime, memorymax, previousmemoryused, memoryused, duration);

}} catch (exception e) }}

return stats;

}}

public class gcnames .

*/public static string getbymemorypoolname(string poolname, string defaultname)

if ("survivor space".equals(poolname) || "ps survivor space".equals(poolname) || "par survivor space".equals(poolname) || "g1 survivor space".equals(poolname))

if ("tenured gen".equals(poolname) || "ps old gen".equals(poolname) || "cms old gen".equals(poolname) || "g1 old gen".equals(poolname))

return defaultname;

}public static string getbygcname(string gcname, string defaultname)

if ("marksweepcompact".equals(gcname) || "ps marksweep".equals(gcname) || "concurrentmarksweep".equals(gcname) || "g1 old generation".equals(gcname))

return defaultname;

}}

nginx原始碼分析 從原始碼看nginx框架總結

nginx原始碼總結 1 中沒有特別繞特別彆扭的編碼實現,從變數的定義呼叫函式的實現封裝,都非常恰當,比如從函式命名或者變數命名就可以看出來定義的大體意義,函式的基本功能,再好的架構實現在編碼習慣差的人實現也會黯然失色,如果透徹理解 的實現,領悟架構的設計初衷,覺得每塊 就想經過耐心雕琢一樣,不僅僅...

從原始碼編譯InfluxDB

作業系統 centos7.3.1611 x64 go語言版本 1.8.3 linux amd64 influxdb版本 1.1.0 go語言安裝參考 首先安裝git yum install git y 設定gopath 獲取依賴庫 或者使用 http proxy 127.0.0.1 1080 go ...

從原始碼編譯OPENWRT

openwrt官方站點 鏈結 要編譯openwrt首先要搞清楚它複雜的版本命名規則,可以看官方文件 鏈結 從文件中,我們可以了解到目前的最新穩定版是attitude adjustment,svn版本號為36088,發布於2013年中,而上乙個穩定版是backfire 10.03.1,發布於2011年...