/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):
- 事件头:
<gcType> GC lasting <耗时> ms.,若data.getGcCause() != null则追加(cause = <原因>)gcType由GarbageCollectionMonitor.getGcType(data)判定(如 full / young)
- 逐个内存池的回收效果:取
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 耗时