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.gcInterval
和 sun.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