You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins执行LangChain DirectoryLoader时性能异常缓慢问题排查

Jenkins流水线中Python脚本执行缓慢的排查与解决思路

一、核对执行环境差异

  • 环境变量与依赖版本:手动执行和Jenkins流水线的Python环境可能不一致,比如LangChain或其依赖库版本不同,导致加载逻辑效率差异。在Jenkins流水线里添加printenv和python3 -m pip list命令,和本地手动执行的输出对比,重点看Python路径、LangChain版本。
  • 工作目录正确性:确认Jenkins执行脚本时的当前工作目录是否和手动执行一致。在Python脚本开头加import os; print(os.getcwd()),避免因为./demo/src路径解析错误,导致脚本遍历无关目录浪费时间。

二、检查Jenkins节点资源限制

  • 执行者数量配置:即使虚拟机有12核,如果Jenkins内置节点的「执行者数量」设得太小(默认可能只有2),会限制并发任务的执行。进入Jenkins「系统管理」→「节点管理」→「内置节点」,把执行者数量调大(比如设为8),让Python脚本的多线程/多进程能充分利用CPU资源。
  • 进程优先级调整:Jenkins默认运行进程的优先级可能较低,系统调度时分配的CPU时间少。在/etc/default/jenkins配置文件中添加JENKINS_NICENESS=0(数值越小优先级越高,默认是10),重启Jenkins服务生效。

三、优化LangChain加载逻辑

  • 强制开启多线程加载:手动执行时可能默认启用了多线程,但Jenkins环境中可能因为线程池限制没生效。显式在DirectoryLoader中配置多线程参数:
from langchain.document_loaders import DirectoryLoader

loader = DirectoryLoader(
    './demo/src',
    glob='*.java',
    use_multithreading=True,
    max_concurrency=8  # 根据CPU核心数调整
)
docs = loader.load()
  • 排查文件权限问题:Jenkins运行用户(通常是jenkins用户)对./demo/src下的文件可能存在权限不足,导致读文件时出现隐性重试或延迟。在Jenkins流水线中添加ls -l ./demo/src命令,检查文件所有者和权限,确保jenkins用户有读权限。

四、调试定位具体瓶颈

  • 添加脚本执行日志:在Python脚本中加入时间戳,统计整体加载时间和单个文件加载耗时,定位是个别文件拖慢还是整体加载机制问题:
import time
from langchain.document_loaders import DirectoryLoader

total_start = time.time()
loader = DirectoryLoader('./demo/src', glob='*.java')
docs = loader.load()
total_end = time.time()
print(f"总加载耗时: {total_end - total_start:.2f}秒")

for doc in docs:
    print(f"文件: {doc.metadata['source']}")
  • 用strace分析系统调用:在Jenkins流水线中执行strace -c python3 your_script.py,统计各类系统调用的时间占比,看是否有大量阻塞的IO调用或异常系统操作,进一步定位瓶颈。

内容的提问来源于stack exchange,提问作者user27155137

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:25:07