先确认所指的 Dolphin
DolphinDB场景
快速定位占用来源
getConfig("maxMemSize")(单位字节)license().maxMemoryPerNode(单位GB)getMemLimitOfQueryResult();必要时用 setMemLimitOfQueryResult(newLimit) 调整(谨慎)。getSessionMemoryStat();必要时 closeSessions(sessionIds) 结束异常会话。pnodeRun(objs())、pnodeRun(objs(true)) 查非共享/共享变量;用 undef 或 undef("name", SHARED) 释放。getRecentJobs()、getConsoleJobs();对异常长任务 cancelJob/cancelConsoleJob。flushOLAPCache()、flushTSDBCache()、invalidateLevelIndexCache() 释放。dmesg -T | grep -i "out of memory\|kill process",若命中说明节点被系统杀死,需要下调内存上限或扩容。select * 容易把全分区数据拉到客户端内存,建议改为 select top 1000 * 或先 t=select ... 再取子集。立即可执行的缓解动作
undef("v") 或 v=NULL;释放共享表:undef("sharedTbl", SHARED)。clearAllCache()、flushOLAPCache()、flushTSDBCache()、invalidateLevelIndexCache()。closeSessions(...)、cancelJob(...)。select *,只查需要的列,并尽量在 WHERE 中使用分区列前置过滤;必要时临时下调 setMemLimitOfQueryResult()。maxPubQueueDepthPerSite),避免瞬时堆积。配置与架构层面的优化
maxMemSize:通常设为物理内存的80%–90%;若许可证上限更低,则以许可证为准(如社区版常见上限为4GB)。DolphinScheduler场景
command_type=9):
DELETE FROM t_ds_process_instance WHERE end_time IS NULL AND command_type = 9;DELETE FROM t_ds_process_instance WHERE DATE_FORMAT(start_time, "%Y-%m-%d") = '2021-06-23' AND state = 1;DELETE FROM t_ds_process_definition WHERE DATE_FORMAT(create_time, "%Y-%m-%d") = '2021-06-23';通用 Linux 层面的排查与临时缓解
top/htop 按内存排序(键入 M),识别占用最高的进程;用 free -h 查看整体内存与缓存;vmstat 1 观察内存与换页;dmesg -T | grep -i "oom\|kill" 检查是否被 OOM Killer 终止。1/2/3 到 /proc/sys/vm/drop_caches 可分别清理 pagecache、dentries/inodes、或三者全部;此操作会影响系统缓存命中率,生产慎用。