WorkBuddy出现OOM需五步优化:一启堆快照(-XX:+HeapDumpOnOutOfMemoryError);二用MAT分析hprof定位泄漏对象;三开GC日志查晋升失败;四限高耗模块内存(如"memoryLimitMB": 384);五调合理堆参数(如8GB内存设-Xms3072m -Xmx4096m)。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您在使用WorkBuddy过程中遭遇响应停滞、进程崩溃或日志中频繁出现“java.lang.OutOfMemoryError: Java heap space”提示,则极可能是堆内存分配耗尽所致。以下是通过堆内存分析快速定位并针对性优化的多种方法:
一、启用JVM堆内存快照自动捕获
WorkBuddy支持在堆内存使用率突破阈值时自动触发hprof快照,为后续离线分析提供原始数据依据。该机制可避免人工干预时机偏差导致关键现场丢失。
1、关闭WorkBuddy所有进程,定位其启动配置文件:Windows系统查找workbuddy.exe.vmoptions或WorkBuddy.bat;macOS/Linux系统查找workbuddy.vmoptions或start.sh中的JAVA_OPTS字段。
2、在配置文件末尾新增以下参数:-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./heapdumps/ -XX:ErrorFile=./logs/hs_err_pid%p.log。
3、确保./heapdumps/目录存在且具备写入权限,若不存在则手动创建。
4、重启WorkBuddy,复现内存溢出场景,系统将在OOM发生瞬间生成java_pidXXXX.hprof文件。
二、使用MAT工具进行堆转储离线分析
Memory Analyzer Tool(MAT)可对hprof文件执行对象支配树、泄漏嫌疑报告及重复字符串检测,精准识别内存占用主因。
1、从Eclipse官网下载独立版MAT工具并解压运行。
2、在MAT中选择File → Open Heap Dump,加载刚生成的java_pidXXXX.hprof文件。
3、点击Leak Suspects Report按钮,自动生成TOP 3泄漏嫌疑项,重点关注org.springframework.context.support.ClassPathXmlApplicationContext或com.tencent.workbuddy.skill.SkillInstance等长生命周期类实例数异常增长。
4、双击高亮条目进入Dominator Tree视图,按Retained Heap降序排列,定位持有最多内存的对象及其强引用链。
三、动态监控堆内对象分布与GC行为
通过JVM内置诊断工具实时观察新生代与老年代对象分配节奏、晋升速率及GC停顿特征,辅助判断是否因对象过早晋升或Survivor区容量不足引发溢出。
1、在WorkBuddy启动参数中追加:-Xlog:gc*,gc+age=debug,gc+heap=debug:file=./logs/gc.log:time,tags,level:filecount=5,filesize=10M(JDK 11+)。
使用 draw.io(.drawio 格式)和 SVG 生成兼容 Microsoft Visio 的架构图。当用户需要以下任一场景时触发: - 用于 Visio 或技术文档的架构/系统/网络图 - 带连接标注的分层控制系统图 - 将 draw.io XML 转换为稳定、可嵌入的 SVG - 修复 Visio 或 draw.io 无法打开的故障排查类图表 - 任何需专业级布局且文本可编辑的图表
2、重启应用后,持续运行10分钟以上,期间执行典型操作(如批量PDF解析、多模型切换)。
3、打开./logs/gc.log,搜索关键词"Promotion failed"或"Allocation Failure",确认是否存在Eden区满但Survivor无法容纳存活对象的情况。
4、若发现大量对象在年龄1–3即晋升,说明-XX:MaxTenuringThreshold设置过低或-XX:SurvivorRatio不匹配,需调整。
四、限制高内存消耗模块的运行时资源上限
WorkBuddy中部分功能模块(如PDF文字提取、Excel多表匹配、OCR预处理)默认无内存边界控制,易因单次任务加载超大文件导致堆瞬时爆满。
1、进入WorkBuddy主界面,右键目标Skills图标(如「PDF文字提取」),选择编辑运行时配置。
2、在弹出JSON编辑框中添加字段:"memoryLimitMB": 384,表示该Skill实例最大堆内驻留内存为384MB。
3、保存后,在「设置」→「AI模型管理」中关闭非当前任务所需模型的预加载开关,仅保留1个主模型。
4、返回「项目索引」→「路径过滤」,勾选启用正则匹配并在忽略路径中添加.*\.pdf$|.*\.xlsx$,防止后台索引器误触大文件。
五、验证堆内存分配合理性并调整初始参数
堆内存配置不合理(如-Xms与-Xmx差异过大、未适配物理内存比例)会导致GC频繁或内存碎片化,加剧溢出风险。
1、检查当前系统可用物理内存:Windows执行wmic memorychip get Capacity,macOS执行sysctl hw.memsize。
2、若物理内存为8GB,将启动参数中堆设为-Xms3072m -Xmx4096m;若为16GB,则设为-Xms6144m -Xmx8192m,确保-Xmx不超过物理内存的50%。
3、同步添加-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m,防止元空间挤占堆外内存空间。
4、删除所有含-XX:+UseCompressedOops的参数(当-Xmx > 32GB时必须禁用),避免压缩指针失效引发地址越界。

















