如何在 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 是不够的,我还必须将更新问题中的 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 的优点/缺点?