从云系统执行时,JGIT Push 需要很长时间来添加空提交(无更改),但在 VM 中几乎不需要时间

问题描述 投票:0回答:1

背景: 我在自定义应用程序中使用 JGIT 6.5.202303070854-r,该应用程序作为 Tomcat 内另一个 Java 应用程序中的插件运行。无论如何,它都是一个普通的 Java 实现。 最终结果是像 Push 和 Pull 这样的方法被暴露为 Web 服务

行为: 当这个插件部署在云环境中时(这意味着主机应用程序部署在 kubernetes 架构中),我观察到即使 Pull 执行得相对不错,另一方面 Push 执行速度非常慢,使得 webservice 请求时序out(socket超时异常(读取超时))。

我尝试过的: 作为参考,我自己的本地 Tomcat 实例中的相同推送在 5-6 秒内执行,而在云中我坐了一次 15 分钟,它仍在执行。我观察到,到目前为止,基本上提交及其所有内容都已成功推送正如我检查的那样(尽管我没有对文件计数/内容进行二进制检查) 我所做的所有测试都是使用空提交和 22MB 存储库,其中包含 532 个文件和 5 次提交。 我确实观察到在执行期间出现以下错误: “.git/refs/remotes/origin/.probe-99c3f223-6a2c-4535-8c39-0c34f8f44ff6:不允许操作” 从 JGit-FileStoreAttributeReader-2(线程名称)发出。 然而,这个错误并不是每次都会发生 - 上次服务执行成功,但在 5.8 分钟内没有任何错误。

我目前正在检索 Kubernetes 节点日志,看看是否有任何内容可能表明这一点,但如果有人遇到过这种情况,我将很感激了解为什么会发生这种情况

Push 实现是这样的,如果重要的话,包装在 try/catch 中:

myGitFolder.add().addFilepattern(".").setUpdate(true).call();
 myGitFolder.commit().setAll(true).setMessage(Message).setCommitter(str_CommitterName, str_CommitterEmail).call();

CredentialsProvider credentialsProvider = new UsernamePasswordCredentialsProvider(str_User, str_Password);

Iterable<PushResult> prList = myGitFolder.push().setRemote("origin")
                .setCredentialsProvider(credentialsProvider).call();

期望: 我期望使用上述实现的 Push 在 10 秒内执行并进行空提交。

java kubernetes jgit
1个回答
0
投票

以下是为将来遇到此问题的人提供的更新。 我的案例中表现出的缓慢是由于三个复合方面造成的:

© www.soinside.com 2019 - 2024. All rights reserved.