Windows 10下TFS 2015编译Fortran解决方案时出现‘Json limit exceeded’错误
Json limit exceeded错误 这种随机触发的Json limit exceeded错误在TFS 2015非交互构建Fortran项目时确实很棘手,结合我处理这类问题的经验,几个最可能的原因和排查方向如下:
TFS构建代理的JSON日志大小限制
TFS 2015的构建代理默认对构建过程中生成的JSON格式日志有大小阈值限制。当Fortran编译器输出大量诊断信息(比如冗余警告、详细编译追踪日志)时,非交互模式下代理会把这些输出序列化到JSON日志中,一旦超过阈值就会触发错误。而手动构建时,这些输出直接打印到控制台,不会被代理捕获序列化,所以不会出现问题。你可以找到构建代理的配置文件(通常在%AGENT_HOME%\agent\worker\config.json路径下),修改其中的maxJsonLogLength参数,把默认值(一般是102400)调大,比如改成5242880(5MB)试试。Fortran编译器的输出缓冲行为差异
非交互模式下,像Intel Fortran这类编译器的输出缓冲机制可能和手动构建时不同,会一次性输出大量日志数据,瞬间超过TFS代理的JSON处理上限。你可以尝试在编译命令里添加参数来调整输出:比如用-nosource或-warn nosource减少不必要的源码级输出,或者添加-qno-buffer(Intel Fortran适用)强制关闭输出缓冲,让日志实时输出,避免一次性生成过大的JSON块。构建日志详细度设置过高
如果你的XML构建定义把日志详细度设为“详细”或“诊断”级别,非交互模式下代理会收集编译过程中所有细节信息,这些信息被序列化为JSON时很容易超出限制。建议暂时把日志详细度调低到“正常”级别,只记录必要的构建状态和错误信息,减少JSON数据量。构建代理的资源瓶颈
非交互构建时,代理进程需要同时处理编译任务和日志序列化,若代理机器内存不足,在处理大体积Fortran项目的输出时,可能出现JSON序列化失败触发错误。你可以监控编译过程中代理机器的内存使用情况,看看是否有明显的内存峰值,尝试关闭其他占用资源的程序,或者给机器增加内存。并行构建的日志冲突
如果你的XML构建定义设置了并行编译多个Fortran解决方案,多个编译器同时输出日志会导致代理的JSON处理队列积压,瞬间超过限制。可以先禁用并行构建,改成串行编译测试,如果错误消失,再逐步调整并行度,或者给每个编译步骤单独设置日志输出限制。
内容的提问来源于stack exchange,提问作者Kinsly

