2022-11-03 Java中间件如何在启动时打出环境信息

为什么要打出环境信息

作为一个中间件,它可能被运行在各种意想不到的环境下。在JVM启动后第一句代码先将当前的环境信息打出,我们就可以通过这些日志确保JVM已经启动成功(但现在还没开始基本的功能初始化),后续出现初始化的问题,我们就可以通过日志,可以看出一些与环境有关的问题。

Kafka Connect

Kafka中的Connect模块就是一个很好的例子,它在启动的第一步就是打印环境信息,细节见JIRA链接。
直接贴代码,Kafka使用了RuntimeMXBean与OperatingSystemMXBean两个类来获取环境信息:

    private static final RuntimeMXBean RUNTIME;
    private static final OperatingSystemMXBean OS;

    static {
        RUNTIME = ManagementFactory.getRuntimeMXBean();
        OS = ManagementFactory.getOperatingSystemMXBean();
    }

用RUNTIME对象可以拿到启动参数、虚拟机相关信息、Java版本,以及Class路径

    protected void addRuntimeInfo() {
        List 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对象,可以获取操作系统、架构、版本,以及JVM可用的Processor数量等信息:

    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()));
    }

你可能感兴趣的:(2022-11-03 Java中间件如何在启动时打出环境信息)