為什么要打出環(huán)境信息
作為一個(gè)中間件路捧,它可能被運(yùn)行在各種意想不到的環(huán)境下旭旭。在JVM啟動(dòng)后第一句代碼先將當(dāng)前的環(huán)境信息打出民逼,我們就可以通過(guò)這些日志確保JVM已經(jīng)啟動(dòng)成功(但現(xiàn)在還沒(méi)開(kāi)始基本的功能初始化)胖替,后續(xù)出現(xiàn)初始化的問(wèn)題扮惦,我們就可以通過(guò)日志,可以看出一些與環(huán)境有關(guān)的問(wèn)題尿扯。
Kafka Connect
Kafka中的Connect模塊就是一個(gè)很好的例子求晶,它在啟動(dòng)的第一步就是打印環(huán)境信息,細(xì)節(jié)見(jiàn)JIRA鏈接衷笋。
直接貼代碼芳杏,Kafka使用了RuntimeMXBean與OperatingSystemMXBean兩個(gè)類來(lái)獲取環(huán)境信息:
private static final RuntimeMXBean RUNTIME;
private static final OperatingSystemMXBean OS;
static {
RUNTIME = ManagementFactory.getRuntimeMXBean();
OS = ManagementFactory.getOperatingSystemMXBean();
}
用RUNTIME對(duì)象可以拿到啟動(dòng)參數(shù)、虛擬機(jī)相關(guān)信息辟宗、Java版本爵赵,以及Class路徑
protected void addRuntimeInfo() {
List<String> jvmArgs = RUNTIME.getInputArguments();
values.put("jvm.args", Utils.join(jvmArgs, ", "));
String[] jvmSpec = {
RUNTIME.getVmVendor(),
RUNTIME.getVmName(),
RUNTIME.getSystemProperties().get("java.version"),
RUNTIME.getVmVersion()
};
values.put("jvm.spec", Utils.join(jvmSpec, ", "));
values.put("jvm.classpath", RUNTIME.getClassPath());
}
用OS對(duì)象,可以獲取操作系統(tǒng)泊脐、架構(gòu)空幻、版本,以及JVM可用的Processor數(shù)量等信息:
protected void addSystemInfo() {
String[] osInfo = {
OS.getName(),
OS.getArch(),
OS.getVersion(),
};
values.put("os.spec", Utils.join(osInfo, ", "));
values.put("os.vcpus", String.valueOf(OS.getAvailableProcessors()));
}