程序运行卡住排查

背景

在写spring ai的时候添加了一些依赖后程序在这卡住了,没有任何报错

bash 复制代码
2026-03-27 10:00:12.502 [main] DEBUG ai.djl.huggingface.tokenizers.jni.LibUtils - Using cache dir: /Users/xuejinhu/.djl.ai/tokenizers/0.21.0-0.32.0-cpu-osx-aarch64
2026-03-27 10:00:12.502 [main] DEBUG ai.djl.huggingface.tokenizers.jni.LibUtils - Loading huggingface library from: /Users/xuejinhu/.djl.ai/tokenizers/0.21.0-0.32.0-cpu-osx-aarch64
2026-03-27 10:00:12.503 [main] DEBUG ai.djl.huggingface.tokenizers.jni.LibUtils - Loading native library: /Users/xuejinhu/.djl.ai/tokenizers/0.21.0-0.32.0-cpu-osx-aarch64/libtokenizers.dylib
2026-03-27 10:00:13.577 [main] INFO  o.s.ai.transformers.ResourceCacheService - The class path resource [onnx-output-folder/model.onnx] resource with URI schema [file] is excluded from caching
2026-03-27 10:00:14.015 [main] INFO  o.s.ai.transformers.TransformersEmbeddingModel - Model input names: input_ids, attention_mask
2026-03-27 10:00:14.015 [main] INFO  o.s.ai.transformers.TransformersEmbeddingModel - Model output names: token_embeddings, sentence_embedding

排查

  • 第一步:是问AI得到 jcmd 73805 Thread.print 看了线程栈,main 线程停在
    io.qdrant.client.grpc.QdrantGrpcClient$Builder.checkVersionsCompatibility()

  • 第二步:从运行改为debug,搜索代码找到QdrantGrpcClient,发现这里报错了,是qdrant版本不对

    java 复制代码
    private void checkVersionsCompatibility(String clientVersion) {
       try {
         String serverVersion =
             QdrantGrpc.newBlockingStub(this.channel)
                 .healthCheck(QdrantOuterClass.HealthCheckRequest.getDefaultInstance())
                 .getVersion();
         if (!VersionsCompatibilityChecker.isCompatible(clientVersion, serverVersion)) {
           String logMessage =
               "Qdrant client version "
                   + clientVersion
                   + " is incompatible with server version "
                   + serverVersion
                   + ". Major versions should match and minor version difference must not exceed 1. "
                   + "Set checkCompatibility=false to skip version check.";
           logger.warn(logMessage);
         }
       } catch (Exception e) {
         logger.warn(
             "Failed to obtain server version. Unable to check client-server compatibility. Set checkCompatibility=false to skip version check.");
       }
     }
  • 第三步:修改版本成功运行

复盘

1.程序卡住用debug模式能看到WARN,在运行模式下可能看不到报错日志

2.利用jcmd命令找到线程栈,明确卡在哪里,一开始问AI一直以为是TransformersEmbeddingModel的问题,看了才发现是VectorStore的问题

相关推荐
一叶飘零_sweeeet2 分钟前
深度剖析:Java 并发三大量难题 —— 死锁、活锁、饥饿全解
java·死锁·活锁·饥饿
IT乐手8 分钟前
java 对比分析对象是否有变化
android·java
云烟成雨TD12 分钟前
Spring AI Alibaba 1.x 系列【18】Hook 接口和四大抽象类
java·人工智能·spring
Hachi被抢先注册了19 分钟前
Docker学习记录
java·云原生·eureka
devilnumber1 小时前
Spring Boot 2 vs Spring Boot 3:50 条核心区别 + 升级优势 + 避坑指南
java·spring boot·springboot升级
武超杰1 小时前
Spring Cloud Alibaba Nacos 进阶:配置隔离、集群、持久化与开机自启
java·开发语言
Venhoul1 小时前
@Scheduled(cron = “1 0 0 * * ?“用法介绍
java
Rabitebla1 小时前
C++类和对象(中):默认函数 + 运算符重载 + 日期类实现完整笔记
java·开发语言·javascript
Bat U1 小时前
JavaEE|多线程(一)
java·服务器·开发语言
逻辑驱动的ken1 小时前
Java高频面试考点场景题05
java·开发语言·深度学习·求职招聘·春招