/spark activity
基本信息
| 属性 | 值 |
|---|---|
| 命令名 | activity |
| 别名 | activitylog、log |
| 来源 | ActivityLogModule(ActivityLogModule.java:105) |
| 参数 | --page <page no> |
| Tab 补全 | TabCompleter.completeForOpts(arguments, "--page") |
查询 spark 自身的历史活动记录(谁在什么时候跑了什么诊断)。这是排查「这条性能报告是谁生成的」以及回顾历史卡顿事件的入口。
功能
- 取
platform.getActivityLog().getLog()并先剔除过期条目:log.removeIf(Activity::shouldExpire) - 若清理后为空,回复「There are no entries present in the log.」并返回
- 页码
int page = Math.max(1, arguments.intFlag("page"))—— 页码下限被强制为 1,传 0 或负数会回到第 1 页 - 用
Pagination<Activity>渲染,标题为「Recent spark activity」(金色)
分页提示的翻页命令由 lambda 动态生成:"/" + platform.getPlugin().getCommandName() + " activity --page " + value。由于服务端命令名是 spark、客户端是 sparkc,翻页提示会自动使用当前平台的命令名,无需硬编码。
记录什么
活动日志由以下操作写入(均通过 platform.getActivityLog().addToLog(...)):
| 来源操作 | 记录类型 | 内容 |
|---|---|---|
| profiler stop/upload 上传成功 | Activity.urlActivity |
「Profiler」+ 查看器 URL |
| profiler --save-to-file | Activity.fileActivity |
「Profiler」+ 本地文件路径 |
| heapdump | Activity.fileActivity |
「Heap dump」+ 文件路径 |
| heapsummary | 同上 | 摘要文件路径 |
fileActivity / urlActivity 的首参均为 sender(命令发送者),因此日志能追溯到发起人而非仅是服务器。
数值
| 数值名 | 值 | 来源 |
|---|---|---|
| 条目过期时间 | 60 天 | Activity.java:80 —— (System.currentTimeMillis() - this.time) > TimeUnit.DAYS.toMillis(60) |
| 页码下限 | 1 | Math.max(1, arguments.intFlag("page")) |
| 活动日志文件名 | activity.json |
SparkPlatform 构造:plugin.getPluginDirectory().resolve("activity.json") |
过期判定用的是每条记录自己的时间戳与当前时间的差,因此日志文件中的历史条目在读取时逐条过滤,而不是整体按文件修改时间清理。
交互
| 触发 | 行为 |
|---|---|
| 日志为空(或全部超过 60 天) | 回复「There are no entries present in the log.」 |
不带 --page |
显示第 1 页(intFlag 未命中时返回 -1,被 Math.max(1, -1) 归一为 1) |
--page 0 或负数 |
同样显示第 1 页 |
| 服务端停止 | SparkPlatform.disable() 遍历 CommandModule.close();日志文件在构造时已 load(),随平台生命周期持久化 |
相关条目
- 配置目录文件 -
activity.json的落盘位置与格式 - /spark profiler - 产生多数活动记录的命令
- /spark heapdump - 产生堆快照记录的命令