/spark gcmonitor

基本信息

属性 值
命令名 gcmonitor
别名 gcmonitoring
来源 GcMonitoringModule(GcMonitoringModule.java:142)
参数 无
Tab 补全 无
类型 开关式(toggle)

gcmonitor 是一个开关:第一次执行开启监控并广播「GC monitor enabled.」,再次执行则关闭并广播「GC monitor disabled.」(GcMonitoringModule.java:143-151)。

功能

与 /spark gc 的累计统计不同,本命令监听的是每一次 GC 事件。内部 ReportingGcMonitor extends GarbageCollectionMonitor 并注册为 Listener,在 onGc(GarbageCollectionNotificationInfo data) 中被回调。

每条事件输出一段(GcMonitoringModule.ReportingGcMonitor.onGc):

  1. 事件头:<gcType> GC lasting <耗时> ms.,若 data.getGcCause() != null 则追加 (cause = <原因>)
    • gcType 由 GarbageCollectionMonitor.getGcType(data) 判定(如 full / young)
  2. 逐个内存池的回收效果:取 getMemoryUsageBeforeGc() 与 getMemoryUsageAfterGc() 的差值 before.getUsed() - after.getUsed()
    • before == null(该池无回收前快照)→ 跳过
    • diff == 0(无变化)→ 跳过
    • 否则列出该池回收释放的字节数

消息发送走 platform.getPlugin().executeAsync(...),即投递到 spark 的 spark-forge-async-worker 调度线程,不阻塞主线程。

数值

数值名 定义 来源
单次 GC 耗时 data.getGcInfo().getDuration() GarbageCollectionNotificationInfo
各池释放量 before.getUsed() - after.getUsed() getMemoryUsageBeforeGc() / getMemoryUsageAfterGc()

本命令不产生文件、不做网络上传,全部内容以聊天文本广播。

交互

触发 行为
首次执行 开启监控,广播「GC monitor enabled.」
再次执行 关闭监控,广播「GC monitor disabled.」
监控期间发生 GC 每次 GC 广播一条事件报告
服务端停止 平台 disable() 遍历所有 CommandModule.close(),监控随之关闭

相关条目

  • /spark gc - 累计 GC 统计(两者互补,建议同时开)
  • /spark tickmonitor - 另一个开关式监控器,针对 tick 耗时