GoCD性能调优
容量规划
本节提供了评估GoCD服务器的服务器硬件和内存需求的建议。它还强调了一些在扩展GoCD时需要注意的配置。
最低服务器要求
GoCD服务器的最低要求可以在以下位置找到在这里
扩展 GoCD
随着您设置中的管道、代理和并发用户的数量增加,可能需要通过添加更多内存和内核来升级GoCD服务器。
注意事项
Server
不要在与GoCD服务器相同的机器上运行任何其他CPU密集型应用程序。
当GoCD服务器被扩展以运行更大数量的管道、代理和材料时,请确保JVM已分配了适当的堆大小。GoCD服务器的默认值为-Xms512m
(最小)和-Xmx1024m
(最大)。为了利用更多的堆空间,请将JVM选项-Xmx
设置为更高的值(例如,使用8 GB堆,请设置该标志-Xmx8g
)。此标志可以在文件中设置wrapper-properties.conf
以添加上述系统属性。有关文件位置,请参阅安装文档。wrapper-properties.conf
参考资料:
# We recommend that you begin with the index `100` and increment the index for each system property.
# use minimum JVM heap of 4gb
wrapper.java.additional.100=-Xms4g
# use maximum JVM heap of 8gb
wrapper.java.additional.101=-Xmx8g
对于运行大型设置的Linux/Unix用户,可能会在go-server.log
中看到提及“打开的文件过多”的异常。这可能表明需要增加安装了GoCD服务器的机器上的文件描述符数量。在Linux上可以使用命令ulimit -n
查看文件描述符的总数。要增加用户和系统的文件描述符总数,请按照以下步骤操作:
- 编辑
/etc/security/limits.conf
并添加以下行:soft nofile 1024 * hard nofile 65535
- 编辑
/etc/pam.d/login
,添加以下行:session required /lib/security/pam_limits.so
- 系统文件描述符限制可以通过在文件中设置
fs.file-max
来增加/etc/sysctl.conf
。要将限制设置为65535
使用echo "fs.file-max = 65535" >> /etc/sysctl.conf
代理
当GoCD代理运行带有详细输出、许多工件等的管道时,您可能会在日志文件中遇到java.lang.OutOfMemoryError: Java heap space
。这是增加内存限制的标志。为此,请调整上述set.AGENT_STARTUP_ARGS
。wrapper-properties.conf
.
###### System properties for GoCD agent ######
# Set a memory limit of 1GB for the agent process. We recommend that you do not use more than half your system memory.
set.AGENT_STARTUP_ARGS=-Xms128m -Xmx1024m
调优你的 JVM
确保始终使用最新的JVM,因为每次发布都有重大的性能改进。
分配给GoCD服务器的最小和最大JVM堆空间会对其性能产生影响。GoCD分别使用默认值512m
和1024m
作为最小和最大JVM堆大小。但是,在生产环境中,我们建议将最小值和最大值设置为相同的值。
上述默认堆设置适用于32位JVM。但是如果GoCD服务器面临性能问题,我们建议将堆设置中的值加倍并测量性能。如果发现需要超过3 GB的堆内存,我们建议切换到64位JVM。我们的测试显示,只要适当增加了堆内存,GoCD服务器在64位JVM上的表现要比在32位JVM上好得多。这是因为64位JVM使用64位地址而不是32位,允许其使用更多内存。
从默认设置开始,并逐步增加堆内存以适应您的应用程序。
存储
为了在工件传输中获得最佳性能,GoCD需要具有良好的磁盘I/O吞吐量的存储。我们建议使用本地存储用于GoCD数据库和工件。通过删除历史工件可以回收磁盘空间。
如果更喜欢使用网络存储,请确保速度和吞吐量良好。
如果预计GoCD服务器将是高强度设置,请使用RAID配置以提高吞吐量。如果您预计会有大型工件,则可以使用不同的RAID配置用于GoCD数据库和工件。例如,可以使用2个驱动器在RAID1上用于GoCD数据库(为了冗余),在RAID5上使用3个或更多硬盘用于工件,以便优化对数据库和工件的访问。
提高服务器启动时间
通过延迟物料轮询和管道调度几秒钟后服务器启动时间,可以改善非常大的GoCD Server实例的启动时间。这将使服务器有时间预热并缓存一些数据,然后再受到轮询物料更新和需要调度的管道的线程轰炸。以下是启用此类延迟的JVM属性:
-
cruise.material.update.delay
- 此值以毫秒为单位指定,默认值为10,000。这意味着服务器启动10秒后才会开始物料轮询。 -
cruise.produce.build.cause.delay
- 同样,此值也以毫秒为单位指定,默认为10,000,这意味着管道调度将在服务器启动10秒后进行。
上述两个值不会影响物料轮询或管道调度的频率。
排查问题
启用 GC 日志记录
检查应用程序的内存使用情况、堆大小(初始和随时间变化)以及GC指标的一种简单方法是启用GC日志记录。可以在启动应用程序时使用以下JVM参数启用GC日志记录(注意:指定为文件的日志文件每次VM启动时都会重置。)
-verbose:gc -Xloggc:file -XX:+PrintGCTimeStamps
在GoCD服务器的情况下,这些参数需要添加到启动Go jar的脚本中:
- 对于Linux:
/usr/share/go-server/server.sh
- 对于Windows:
[go_server_installation_dir]/server.cmd
在大多数情况下,GoCD安装在C:\Program Files\Go Server
使用 JConsole
JConsole 是一个图形化的监控工具,用于监控 Java 虚拟机 (JVM),它是 JDK 安装的一部分。它可以用来在几乎没有开销的情况下监控进程的当前状态。如果 GoCD 服务器性能较慢,可以立即使用 jconsole 分析一些指标。
由于 jconsole 是一个图形工具,请确保在运行以下命令时可以访问显示设备。也就是说,使用ssh -X
或者 VNC 如果 GoCD 在 Linux 上。如果 GoCD 服务器在 Windows 上,则使用远程桌面。
$ jconsole
当 jconsole GUI 打开时选择本地进程go.jar
这将显示当前堆内存使用情况、线程、CPU 使用率等。如果需要,可以截取 VM 摘要和概述页面的屏幕截图并发送给 GoCD 支持团队。
请注意,在 Linux 的情况下,必须以 ‘go’ 用户身份启动 jconsole。在 Windows 上,以管理员身份启动该进程就足够了。
关于 jconsole 的更多信息可以在以下链接找到在这里.
CPU 和内存分析
Yourkit Java 分析器是推荐用于分析 GO Server CPU 和内存的工具。
要开始使用 Yourkit,请从以下地址下载最新版本的 Yourkit Java 分析器https://www.yourkit.com/download/index.jsp。解压到 [yourkit_profiler_directory]。以下步骤将使 GoCD 服务器能够拾取 yourkit 分析代理并启用我们捕获内存和 CPU 快照。
对于 Linux
-
为
libyjpagent.so
文件创建符号链接到/usr/lib/yourkit
文件夹。当 GoCD 服务器启动时,它会查看此文件夹以确定是否需要启用分析功能。如果你想更改 yourkit agent 的默认路径,可以编辑server.sh
在/usr/share/go-server/server.sh
$ sudo ln -s [yourkit_profiler_directory]/bin/linux-x86-32/libyjpagent.so /usr/lib/yourkit/libyjpagent.so
对于 64 位 JVM,命令是:
$ sudo ln -s [yourkit_profiler_directory]/bin/linux-x86-64/libyjpagent.so /usr/lib/yourkit/libyjpagent.so
-
完成此操作后重新启动服务器,您的 server VM 应该会加载 the yourkit agent。让服务器启动并注册 agents。
对于 Windows
-
默认情况下,GoCD 服务器会在以下位置查找 yourkit 分析代理 yjpagent.dll
C:\yjpagent.dll
。因此,请从yjpagent.dll
(这是 yourkit 分析代理)复制文件到[yourkit_profiler_directory]\bin\win32
为C:\yjpagent.dll
。如果使用的是 64 位 JVM,请从[yourkit_profiler_directory}\bin\win64
复制文件。 -
若要更改上述默认位置:定义环境变量
YOURKIT_PATH
并将其值设置为yjpagent.dll
. -
的位置。如果你将 GoCD 服务器作为服务运行,需要执行额外的步骤。在 GoCD 服务器安装的 config 文件夹中,编辑wrapper-properties.conf文件,并添加一个附加属性,其值如下
"-agentpath: [Path to yjpagent.dll]=port=6133,builtinprobes=none"
例如,如果有 16 个已定义的属性,则将此第 17 个属性按以下方式添加
wrapper.java.additional.17="-agentpath:C:\yjpagent.dll=port=6133,builtinprobes=none"
使用以下步骤对应用程序进行分析并捕获快照。这里提到的hostname
是 GoCD 服务器的主机名。在大多数情况下,它将是 'localhost'。的值port
为 6133,因为 GoCD 会在端口 6133 上启动 yjpagent。
-
要开始分析,请运行:
$ java -jar [yourkit_profiler_directory]/lib/yjp-controller-api-redist.jar hostname port start-cpu-sampling
$ java -jar [yourkit_profiler_directory]/lib/yjp-controller-api-redist.jar hostname port start-monitor-profiling
如果还需要内存分配分析,请运行:
$ java -jar [yourkit_profiler_directory]/lib/yjp-controller-api-redist.jar hostname port start-alloc-recording-adaptive
-
让服务器运行一段时间,直到开始出现性能问题。30 分钟的快照应为我们提供足够的数据。
-
捕获快照 - 运行:
$ java -jar [yourkit_profiler_directory]/lib/yjp-controller-api-redist.jar hostname port capture-performance-snapshot
捕获内存快照
$ java -jar [yourkit_profiler_directory]/lib/yjp-controller-api-redist.jar hostname port capture-memory-snapshot
-
停止分析,请运行:
$ java -jar [yourkit_profiler_directory]/lib/yjp-controller-api-redist.jar hostname port stop-cpu-profiling`
$ java -jar [yourkit_profiler_directory]/lib/yjp-controller-api-redist.jar hostname port stop-monitor-profiling
如果启用了内存分析,请使用以下命令停止:
$ java -jar [yourkit_profiler_directory]/lib/yjp-controller-api-redist.jar hostname port stop-alloc-recording
-
完成分析后,请运行以下命令,以便在下次 GoCD 服务器重启时不会加载代理到 JVM 中。
在 Linux 的情况下,请运行以下命令:
$ sudo rm /usr/lib/yourkit/libyjpagent.so
在 Windows 的情况下,请删除文件C:\yjpagent.dll
。如果你使用了变量YOURKIT_PATH
,则移除该环境变量。
这些快照将保存在 yourkit 配置的快照文件夹中。这些快照可以帮助分析性能问题的根本原因。