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<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对象,可以获取操作系统、架构、版本,以及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()));
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容