如何在 64 位 JVM 上运行 TeamCity

Posted

技术标签:

【中文标题】如何在 64 位 JVM 上运行 TeamCity【英文标题】:How to run TeamCity on 64-bit JVM 【发布时间】:2013-11-20 20:11:40 【问题描述】:

我刚刚发现 TeamCity 出于某种原因在 Windows 上的 32 位 JVM 上运行。

我看到在签出大型(不是那么大)Git 存储库时记录了内存错误,并且已经达到 JVM 的最大堆大小。我对 Java 或 JVM 或 TomCat 一无所知。

如何在现代 64 位 JVM 上运行 TeamCity?我觉得这会很痛苦,否则它将是默认设置。

我们是一个小团队,如果某些东西没有 Apple 级别的“它就可以工作”,那么我们就跳过它。

我们可以忍受这个项目不在 CI 服务器上,但很高兴知道所涉及的内容并权衡投资。

任何建议表示赞赏。

编辑

好的,所以 Markus 指出了这个 sn-p(我已经读过),但我看不到任何解释该做什么的信息。

使用 64 位 Java 运行 TeamCity Server TeamCity 可以在两者下运行 32 位和 64 位 JVM。除非您需要,否则建议使用 32 位 JVM 为 TeamCity 进程分配超过 1.3Gb 的内存。

如果您选择使用 x64 JVM,请注意内存使用量是 从 32 位 JVM 切换到 64 位 JVM 时几乎翻了一番,所以请 确保您指定的内存至少是 32 位 JVM 的两倍,请参阅 为 TeamCity Server 设置内存设置。

如果您将 TeamCity 作为服务运行并切换到 x64 位,您还将 需要使用 x64 Tomcat 可执行文件,查看更多。

我错过了什么吗?

编辑 2

啊,好吧,埋在上面的一些段落中,链接是这样的:

"如果您作为 Windows 服务运行并希望将 JRE 升级到 64 位 版本,您需要将 \jre 替换为适当的 JRE”

所以我想我需要将一些文件复制到 /jre 文件夹中?

【问题讨论】:

confluence.jetbrains.com/display/TCD7/… 【参考方案1】:

我的工作方式(TeamCity 8,Windows server 2008 r2):

在目标机器上安装 64 位 JRE,现在有两种方法可以做到这一点

A -> 如果您使用的是 Teamcity 捆绑的 JRE,请将 JRE 文件夹([TC 服务器文件夹]\JRE)替换为新安装的 JRE x64 中的 JRE 文件夹 - 您必须关闭 TC 服务器服务(以及所有可能也使用此 JRE 的 java.exe*32 服务)

B -> 更改 TeamCity 内部属性,指向新安装的 JRE x64(see documentation for TC version 8,TC version 9 can be found here):

java.home=C\:\\<JRE x64 install folder>\\jre
java.ext.dirs=C\:\\<JRE x64 install folder>\\jre\\lib\\ext\;C\:\\Windows\\Sun\\Java\\lib\\ext 
java.library.path=C\:\\<JRE x64 install folder>\\jre\\bin\;C\:\\Windows\\Sun\\Java\\bin\;C\:\\Windows\\system32\;C\:\\Windows\;C\:\\local\\Oracle\\clients\\112_64\\bin\;C\:\\local\\Oracle… 

B 点的替代方法是更改​​环境变量 JAVA_HOME,它更简单,但之后需要重新启动 Windows 服务器

如果您现在运行 TC Server 服务,它应该作为 64 位 Java 进程运行(通过任务管理器中的 PID 检查):

如果服务器没有启动并抛出错误,请不要惊慌:

 Error: SQL error when doing: Connecting to MSSQL: I/O Error: SSO Failed: Native SSPI library not loaded. Check the java.library.path system property 

下载 JTDS - 1.3.1 (http://sourceforge.net/projects/jtds/files/jtds/1.3.1/) 并安装

从 [JTDS-1.3.1 安装文件夹]/x64/SSO 文件夹中取出 ntlmauth.dll 文件并替换 [TC 服务器文件夹]\bin 中的文件

TC 服务器现在应该可以作为 64 位 Java 进程正常运行

您现在可以在服务器上增加内存分配(因为这是升级的重点),如下所述:https://confluence.jetbrains.com/display/TCD8/Installing+and+Configuring+the+TeamCity+Server#InstallingandConfiguringtheTeamCityServer-SettingUpMemorysettingsforTeamCityServer

【讨论】:

在 TeamCity 8.1.5 上,我确实想使用本地 64 位 JRE。仅设置环境变量 JAVA_HOME 是不够的,我还必须将 /jre 重命名为 jre.old 以便服务器使用 64 位 JRE。 感谢@Vilmir,此解决方法也适用于 TeamCity 2017.2.2。【参考方案2】:

更新问题中的 sn-p 在原始问题中有一个链接,指向 TeamCity 在线文档中的 instructions on Java update for TeamCity server。

基本上,说明因使用的 TeamCity 发行版和启动服务器的方式而异。

如果您的意图是增加 TeamCity 服务器的内存,请务必通读同一文档页面上的 corresponding section。

还有一点需要注意:最近的 TeamCity 版本在单独的进程中执行 Git 提取,提取期间与 Git 相关的内存问题可能需要对 corresponding options 进行微调。

【讨论】:

自我注意:安装 8.1 后必须检查,因为它覆盖了 JRE。需要安装 Java 1.7 64 位,然后将 Program Files/jre7 文件夹复制到一个空的 TeamCity\jre 文件夹中。 这是一个有用的注释。我登陆这里是因为我的 MSSQL 连接在 TeamCity 升级后失败,结果证明这是由于升级将 JRE 恢复为 32 位版本。 @LukePuplett,没有别的了吗?只需使用安装程序安装 Java 64 位,然后覆盖 TeamCity\jre 文件夹的内容?这似乎太容易成为现实......【参考方案3】:

“所以我想我需要将一些文件复制到 /jre 文件夹中?”

没有。您安装一个 64 位 JRE,并更新相关设置以指向 64 位安装的 JRE。

不要将一个 JRE 安装中的内容复制到另一个安装中。你会弄坏东西的!

【讨论】:

嗨斯蒂芬,它确实包括复制文件。我不是 Java 人,但我感觉 Windows 上的 TeamCity 不像普通的 Windows Java 应用程序那样做。重命名旧的 TeamCity/jre 文件夹并用新安装的 JRE 文件夹中的副本替换它是可行的,并且是 JetBrains 推荐的过程。 最简单的解决方案是确保设置了 JAVA_HOME 环境变量。然后使用 TeamCity 的嵌入式 JRE 关闭 TeamCity 和任何其他 Java 进程;你可能不得不去任务管理器来杀死这些进程。然后将 TeamCity 中的“jre”文件夹重命名为“jre_dist”并重新启动 TeamCity。如果您想使用不同的内存值,请添加环境变量 TEAMCITY_SERVER_MEM_OPTS 并设置您想要的内存设置,如果添加此环境变量时 TeamCity 正在运行,请重新启动 TeamCity。代理更复杂,也是一个不同的问题。

以上是关于如何在 64 位 JVM 上运行 TeamCity的主要内容,如果未能解决你的问题,请参考以下文章

在 64 位 Linux 服务器上运行 64 位 JVM 的优点/缺点?

在 32 位操作系统上运行 64 位 jvm

安装的jvm是64位或32位[重复]

当同时安装 32 位和 64 位 JVM 时,如何使用 32 位 JVM 强制运行 Jar 文件?

关于 64 位和 32 位 JVM

64 位 JVM 限制为 300GB 内存?