GoCD硬件规格
GoCD服务器的硬件规格取决于多个因素,这使得很难提前估算所需的硬件规格,并且需要一些试验。硬件规格将根据当前需求和未来的扩展计划而定。
另请参阅:GoCD系统要求
代理硬件要求
代理硬件要求基本上由运行的构建决定。运行GoCD代理会引入轻微的CPU开销(通常在与构建过程CPU需求比较时可以忽略)。代理需要大约500Mb的额外内存。尽管你可以在与服务器相同的机器上运行代理,但建议为每个构建代理使用单独的机器(尽管它可以是虚拟的)。如果你选择在同一台机器上安装多个代理,请考虑可能出现的CPU、磁盘、内存或网络瓶颈。
服务器硬件要求
GoCD服务器负责执行多项任务,我们描述了这些任务如何影响规格:
- 发往服务器的请求数量
- 连接到GoCD服务器的代理数量,以及它们构建的频率
- 源码控制材料的数量
- 源代码控制材料的类型,某些类型比其他类型表现更好
- 每个管道运行的次数(管道历史)
- 可能安装的插件的数量和类型
发往服务器的请求数量
来自不同来源的请求到达服务器
- 用户端浏览器请求(大多数GoCD页面每隔几秒连续轮询服务器以检查页面是否有更新)
- 来自程序的API调用
- CCTray,广泛用于仪表板应用和其他桌面应用程序,以通知开发者有关失败的构建,通常每隔几秒轮询一次,且这类请求对服务器相对昂贵
GoCD使用共享线程池来管理来自多个用户的许多网络请求,如果你有大量用户,请根据每分钟处理的请求数量和类型考虑增加更多核心。
你可以通过开启网络请求日志来了解服务器正在处理的请求数量。
连接到GoCD服务器的代理数量,以及它们构建的频率
每个连接到服务器的GoCD代理都会每隔几秒轮询GoCD服务器以更新其在服务器上的状态,并检查是否有任何应该构建的任务。
当一个代理开始构建时,它将首先执行SCM检出操作以更新到必须构建的正确版本。如果任务需要从其他依赖任务下载工件,代理将从服务器下载工件。在作业运行期间,代理会每隔几秒发送控制台日志,构建结束时,如果配置要求,代理可能会将工件上传到服务器。
为了应对代理数量、工件上传和下载,确保服务器具有以下条件:
- 足够的磁盘空间来存储工件
- 足够一致的IO基线吞吐量以同时处理来自多个代理的上传和下载
- 足够的核心以处理来自代理的网络请求
注意:完全可以在网络文件共享上托管GoCD工件。但是要确保你的网络文件共享能够提供一致的IO吞吐量。网络文件共享上的高负载也可能导致使用相同网络端口的网络请求变慢。
如果服务器和代理地理上共置,有助于加快工件的上传和下载。这将帮助减少代理和服务器之间的延迟。
源码控制材料的数量
GoCD使用多达10个进程(可配置)来检查源码控制材料(SCM)是否有更新。只有启用了轮询功能的材料才会被轮询。每种材料大约每分钟检查一次是否有更新,以便GoCD可以根据更新触发构建。
如果你有数百个SCM,根据你的源码控制系统性能的不同,SCM的更新检查可能会排队并影响性能。
确保 -
- 你的SCM服务器能够处理多个SCM检出和更新操作的负载(来自服务器和代理)
- 有足够的IOPS、IO吞吐量、内存和核心,以确保你可以轮询所有SCM而不让更新检查排队或消耗过多本应由GoCD服务器进程使用的资源。
你可以通过在GoCD服务器上启用性能日志来了解执行SCM更新检查所需的时间。
如果发现材料更新占用了太多的CPU时间,你可以尝试以下一项或多项目选项 -
- 关闭对不经常更新的材料的轮询
- 减少轮询之间的间隔
- 通知GoCD服务器材料更新,而不是轮询它
- 调查升级SCM软件版本是否能解决该问题
源代码控制材料的类型,某些类型比其他类型表现更好
所有SCM都需要连接到远程SCM存储库以检查是否有可用更新。其中一些SCM在更新检查方面比其他的更高效。
像git和mercurial这样的SCM需要本地克隆才能检查是否有新的提交以及这些提交的内容,因此它们在IO和磁盘空间使用方面会有额外的开销。
另一方面,像SVN和TFS这样的SCM不需要本地签出即可检查更新,因此它们可能不会给gocd服务器带来磁盘IO开销。然而,材料更新检查的数量和频率可能会在网络中造成瓶颈。
每个管道运行的次数(管道历史)
每次管道运行(包括其中的阶段和作业)都会记录在数据库中以供审计。为了确保您的GoCD服务器的最佳性能,我们建议您在单独的实例上运行数据库服务器
可能安装的插件的数量和类型
在服务器上安装的每个插件都会消耗额外的内存,并可能影响服务器的CPU利用率。任务插件将增加gocd代理进程的内存使用,并可能影响gocd代理进程的CPU使用。
这可能需要用户更改堆(-Xmx
) 和/或元空间(-XX:MaxMetaspaceSize
)。
定义
为本文档其余部分的目的,我们希望使用以下定义:
核心
可用给服务器机器的物理计算单元数量。
关于超线程的一个说明: 尽管超线程使一个物理核心看起来像两个逻辑核心,在大多数情况下,性能提升大约相当于单核的15%。
内存
JVM内存
可用于运行GoCD服务器进程的JVM的内存量(大约等于-Xmx
JVM参数)
RAM
可用给服务器机器的内存量。一般来说,RAM的量应至少比JVM内存多2-3GB,以允许操作系统有一些余量。
关于交换区的一个说明: 确保关闭交换区,因为它会在机器内存不足并开始交换时对性能产生负面影响。
缓冲区缓存
从磁盘读取数据非常慢,而从内存读取数据则要快得多。此外,在相对较短的时间段内多次读取磁盘的同一部分的情况很常见。例如,考虑在GoCD服务器上运行git
的频率。通过仅从磁盘读取信息一次,然后将其保留在内存中直到不再需要为止,可以加快除第一次读取外的所有操作。这称为磁盘缓冲,用于此目的的内存称为缓冲区缓存。
一般来说,您应该确保有足够的空闲内存用于缓冲区缓存,以确保最佳性能和减少磁盘IO。
[root@fmtgocdgo01 ~]# free -m
total used free shared buffers cached
Mem: 11912 11633 278 0 20 2128
-/+ buffers/cache: 9484 2427
Swap: 0 0 0
在上面的例子中,第一行表示空闲内存量为“278”MB,这使得系统看起来内存不足。但是第二行(-/+ buffers/cache
) 显示实际上2427
MB是空闲的。这是因为约20+2128兆字节的内存是缓冲区+缓存,如果程序请求更多内存,操作系统可以清除它们。
IOPS
存储设备每秒输入/输出操作的数量。
IO吞吐量
通常表示为兆字节/秒 (MB/s),表示服务器在给定时间内可以读取和/或写入的数据量。通常,更高的IOPS,意味着更高的吞吐量。