在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年...