JMX

Log4j 2内置了对JMX的支持。StatusLogger, ContextSelector,以及所有的LoggerContexts, LoggerConfigs和appeners都使用mbean进行检测,并且可以远程监视和控制。

还包括一个简单的客户端GUI,可用于监视StatusLogger输出,以及使用不同的配置文件远程重新配置Log4j,或直接编辑当前配置。

支持JMX

默认情况下启用JMX支持。当Log4j初始化时,StatusLogger、ContextSelector和所有LoggerContexts、LoggerConfigs和appeners都用mbean进行检测。

要完全禁用JMX并防止创建这些mbean,请指定系统属性log4j2。

在启动Java虚拟机时将disableJmx设置为true。

本地监控与管理

要执行本地监视,您不需要指定任何系统属性。Java JDK中包含的JConsole工具可用于监视应用程序。

在命令行中输入 $JAVA_HOME/bin/jconsole 启动JConsole。有关更多详细信息,请参阅Oracle关于如何使用JConsole的文档。

远程监控与管理

要启用远程系统的监视和管理,请在启动Java虚拟机时设置以下系统属性。

com.sun.management.jmxremote.port = portNum

在上面的属性中,portNum是希望通过它启用JMX RMI连接的端口号。

有关详细信息,请参阅Oracle的远程监控和管理文档。

RMI对垃圾收集的影响

请注意,RMI默认情况下每小时触发一次完整的GC。

关于 sun.rmi.dgc.server.gcIntervalsun.rmi.dgc.client.gcInterval 属性,请参阅Oracle文档。

这两个属性的默认值都是3600000毫秒(1小时)。在Java 6之前,它是一分钟。

两个太阳。rmi参数反映JVM是运行在服务器模式还是客户端模式。如果希望修改GC间隔时间,最好同时指定这两个属性,以确保参数被JVM拾取。

另一种方法可能是使用-XX:+DisableExplicitGC禁用对System.gc()的显式调用,或者(如果您使用的是CMS或G1收集器)添加-XX:+ExplicitGCInvokesConcurrent,以确保完整的gc与应用程序并行并发地完成,而不是强制停止世界收集。

参考资料

https://logging.apache.org/log4j/2.x/manual/jmx.html