2022-11-03 Java中間件如何在啟動(dòng)時(shí)打出環(huán)境信息

為什么要打出環(huán)境信息

作為一個(gè)中間件,它可能被運(yùn)行在各種意想不到的環(huán)境下。在JVM啟動(dòng)后第一句代碼先將當(dāng)前的環(huán)境信息打出,我們就可以通過(guò)這些日志確保JVM已經(jīng)啟動(dòng)成功(但現(xiàn)在還沒(méi)開始基本的功能初始化),后續(xù)出現(xiàn)初始化的問(wèn)題,我們就可以通過(guò)日志,可以看出一些與環(huán)境有關(guān)的問(wèn)題。

Kafka Connect

Kafka中的Connect模塊就是一個(gè)很好的例子,它在啟動(dòng)的第一步就是打印環(huán)境信息,細(xì)節(jié)見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()));
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容