GoCD硬件规格

注意: 这一页仍在进行中。请报告问题并提供反馈。 https://github.com/gocd/docs.go.cd/issues/76

GoCD服务器的硬件规范取决于许多因素,这使得预先估计所需的硬件规范变得困难,需要进行一些实验。硬件规格将取决于当前的需求和未来的扩展计划。

代理硬件需求

代理硬件需求基本上由运行的构建决定。运行GoCD代理将引入一个轻微的CPU开销(通常在与构建过程CPU需求比较时,它可以被忽略)。代理将需要一个大约500Mb的额外内存。尽管,您可以在与服务器相同的机器上运行代理,但是建议您使用独立的机器(尽管,它可能是虚拟的)为每个构建代理。如果您选择在同一台机器上安装几个代理,请考虑可能发生的CPU、磁盘、内存或网络瓶颈。

服务器硬件要求

GoCD服务器负责执行许多任务,我们描述了这些任务如何影响规范:

对服务器的Web请求数量

对服务器的Web请求来自不同的来源

  • 来自最终用户的浏览器请求(GoCD中的大多数页面每隔几秒不断轮询服务器以检查页面是否具有更新)
  • 来自程序的API调用
  • 仪表板应用程序和其他桌面应用程序普遍使用的CCTray通知开发人员关于失败的构建通常每隔几秒轮询一次,并且在服务器上的调用相当昂贵

GoCD使用共享线程池来管理来自多个用户的大量Web请求,如果您拥有大量用户,请考虑根据每分钟服务请求的数量和类型来添加更多的内核。

您可以通过打开Web请求日志记录来找出您的服务器处理的请求数量。

连接到GoCD服务器的代理数量,以及它们的建立频率

连接到服务器的每个GoCD代理将每隔几秒轮询一次GoCD服务器,并更新其在服务器上的状态,并检查是否有应该建立的任务。

当代码开始构建时,它将首先执行SCM结帐操作,以更新到必须构建的正确修订版本。如果作业需要下载其他从属作业的工件,代理将从服务器下载工件。在作业运行期间,代理将每隔几秒发送一次控制台日志,在构建结束时,代理可以将工件上传到服务器(如果已配置)。

为了处理代理的数量,工件上传和下载,确保服务器具有 -

  • 足够的磁盘空间来存储工件
  • 足够稳定的IO基线吞吐量,能够同时处理来自多个代理的同时上传和下载
  • 足够的核心能够处理来自代理的Web请求

注意:将GoCD工件托管在网络文件共享上是完全没问题的。但是请确保您的网络文件共享可以提供一致的IO吞吐量。如果网络文件共享使用相同的网络端口,则网络文件共享的高负载也可能导致您的网络请求速度变慢。

如果服务器和代理在地理上位于同一地点,则可以帮助更快地进行工件上载和下载。这将有助于减少代理和服务器之间的延迟

源控制材料的数量

GoCD使用最多10个进程(可配置)来检查更新是否可用于源代码管理材料(SCM)。只有轮询开启的材料才会被轮询。每个材料大约每分钟检查一次以查看是否有更新可用,以便GoCD可以触发构建。

如果您拥有数百个SCM,则根据源代码管理更新的性能,SCM的更新检查可能会排队并对性能产生负面影响。

确保这件事 -

  • 您的SCM服务器可以处理多个SCM检出和更新操作(来自服务器和代理)
  • 有足够的IOPS,IO吞吐量,内存和内核可用,以确保您可以轮询所有的SCM,而不需要排队更新检查,或者消耗GoCD服务器进程所使用的太多资源。

您可以通过在GoCD服务器上打开性能日志记录来了解执行SCM更新检查所花费的时间。

如果您发现材料更新占用了太多的CPU时间,则可以尝试一个或多个这些选项 -

  • 关闭对不经常更新的材料的轮询
  • 减少民意调查之间的时间间隔
  • 通知GoCD服务器的材料更新,而不是轮询它
  • 调查升级SCM软件版本是否解决问题

源控制材料的类型,某些类型执行比其他类型更好

所有SCM需要连接到远程SCM存储库以检查更新是否可用。其中一些在更新检查时比其他更有效。

像git和mercurial这样的SCM要求本地克隆能够检查是否有新的提交以及这些提交的内容,因此它们在IO和磁盘空间使用方面会有额外的开销。

另一方面,像SVN和TFS这样的SCM不需要本地检出来检查更新,所以他们可能没有在gocd服务器上的磁盘IO开销。然而,由于材料更新检查的次数和频率可能会导致网络瓶颈。

每个管道已经运行的次数(管道历史记录)

为了进行审计,每个管道(连同其中的阶段和作业)都被记录在数据库中。为确保GoCD服务器的最佳性能,我们建议您在单独的实例上运行数据库服务器

可能安装的插件的数量和类型

安装在服务器上的每个插件都会消耗内存中的额外内存,并可能会影响服务器的CPU利用率。任务插件将消耗gocd代理进程的内存使用量,并可能影响gocd代理进程的CPU使用率。

这可能需要用户更改堆(-Xmx)和/或元空间(-XX:MaxMetaspaceSize)。

定义

为了本文其余部分的目的,我们希望使用以下定义:

核心

服务器机器可用的物理计算单元的数量。

有关超线程的说明:超线程使得单个物理内核看起来像2个逻辑内核,性能提高了,大多数情况下,性能是单个内核的15%左右。

记忆

JVM内存

运行GoCD服务器进程的JVM的可用内存量(大致为“-Xmx”JVM参数)

##### 内存

服务器可用的内存量。一般而言,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

存储设备每秒input/output操作的数量。T

IO吞吐量

通常表示为Megabytes / Second (MB/s),表示服务器在给定时间内可以读取和/或写入的数据量。 通常,IOPS越高,吞吐量就越高。

results matching ""

    No results matching ""