GoCD性能调优

容量规划

本节提供关于评估GoCD服务器的服务器硬件和内存需求的建议。它还强调了一些配置,这些配置需要在扩展GoCD时进行处理。

最小的服务器需求

可以找到GoCD服务器的最低要求此处

缩放GoCD

随着管道、代理和并发用户数量的增加,GoCD服务器可能需要通过添加更多的内存和内核来扩展。

如果您有问题或有定制的需求,请联系support@thoughtworks.com来帮助GoCD服务器的容量规划。

谨记

不要在GoCD服务器上运行任何其他CPU密集型应用程序。

当GoCD服务器被放大以运行更多的管道、代理和材料时,确保JVM已经分配了适当的堆大小。GoCD服务器的默认值是 -Xms512m (最小) 和 -Xmx1024m (最大). 可以通过设置环境变量 SERVER_MEM (最小) 和 SERVER_MAX_MEM (最大)来增加这些值。

在linux上,这些可以在 /etc/default/go-server. 在Windows上, 复制下面几行代码从 wrapper-properties.conf 并将其更改为所需的值。

wrapper.java.additional.1=-Xms512m
wrapper.java.additional.2=-Xmx1024m

对于linux/unix用户:如果使用了超过100个代理,那么在“go-server”中可能会出现异常。日志go-server.log提醒"Too many open files"。这可能表明需要在安装GoCD服务器的机器上增加文件描述符的数量。在linux上,命令ulimit -n可以用来检查文件描述符的总数。为了增加文件描述符用户和系统的总数,请按照以下步骤:

  1. 编辑文件 /etc/security/limits.conf 添加如下一行代码:soft nofile 1024 * hard nofile 65535
  2. 编辑文件 /etc/pam.d/login, 添加如下一行代码: session required /lib/security/pam_limits.so
  3. 系统文件描述符限制可以通过设置文件 /etc/sysctl.conf 中的 fs.file-max 来设置。例如设置限制为 65535 使用命令 echo "fs.file-max = 65535" >> /etc/sysctl.conf

JVM调优

确保始终使用最新的JVM,因为每个版本都有重大的性能改进。

分配给GoCD服务器的最小和最大JVM堆空间影响其性能。GoCD使用默认值为512m1024m为JVM堆的最小值和最大值。但是,对于生产环境,我们建议将最小值和最大值设置为相同的值。

上面提到的默认堆设置为32位JVM。但是,如果GoCD服务器面临性能问题,我们建议在堆设置和度量性能中增加两倍的值。如果它看到需要超过3 GB的堆内存,我们建议切换到64位JVM。我们的测试表明,在64位JVM上,GoCD服务器的性能要比32位JVM好得多,这提供了堆内存的适当增加。这是需要的,因为64位JVM使用64位地址而不是32位,这样就可以使用更多的内存。

从默认设置开始,逐步增加堆内存,以适应您的应用程序。

存储

为了在工件传输中获得最佳性能,GoCD需要具有良好磁盘I/O吞吐量的存储。我们建议本地存储GoCD数据库和工件。可以通过删除历史工件来回收磁盘空间。

如果使用网络存储,请确保速度和吞吐量都很好。

如果预期GoCD服务器是一个密集的设置,则使用RAID配置提高吞吐量。如果您希望拥有大型工件,那么您可以使用不同的RAID配置用于GoCD数据库和工件。例如,RAID1上的两个驱动器可以用于GoCD数据库(用于冗余),RAID5上的3+硬盘驱动器可以用于工件,以便对数据库和工件的访问进行优化。

提高服务器启动时间

在服务器启动后的几秒钟内,通过延迟材料轮询和管道调度,可以提高一个非常大的GoCD服务器实例的启动时间。这将使服务器能够预热并缓存一些数据,然后就会被用于对需要调度的材料更新和管道进行轮询的线程进行轰炸。以下是启用这种延迟的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文档的脚本中添加这些参数:

  • For linux : /usr/share/go-server/server.sh
  • For Windows: [go_server_installion_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

选择本地进程go.jar当jconsole GUI打开时。这显示当前的堆内存使用情况、线程、cpu使用情况等。如果需要,可以将VM摘要和overview页面的屏幕截图发送给GoCD支持团队。

请注意,在linux中,jconsole必须作为'go'用户启动。在Windows中,以管理员的身份开始这个过程就足够了。

有关jconsole的更多信息可以在这里找到.

CPU和内存分析

Yourkit java profiler是一个推荐的工具,用于分析GO服务器的CPU和内存。

开始使用yourkit,下载最新版本的java剖析器从http://www.yourkit.com/download/index.jsp yourkit。 解压缩到[yourkit_profiler_directory]下面的步骤将使GoCD服务器能够接收到yourkit profiler代理,并使我们能够获取内存和cpu快照。

For Linux

  1. libyjpagent.so文件创建一个symlink到/usr/lib/yourkit文件夹。当GoCD服务器启动时,它会查看该文件夹,以查看是否需要启用概要分析。如果您想更改yourkit代理的默认路径,您可以在/usr/share/go-server/server.sh处编辑server.sh

    $ sudo ln -s [yourkit_profiler_directory]/bin/linux-x86-32/libyjpagent.so /usr/lib/yourkit/libyjpagent.so
    

    For 64-bit JVM, the command is:

    $ sudo ln -s [yourkit_profiler_directory]/bin/linux-x86-64/libyjpagent.so /usr/lib/yourkit/libyjpagent.so
    
  2. 在此之后重新启动服务器,您的工具箱代理应该被服务器VM接收。让服务器启动,代理注册。

For Windows

  1. 默认情况下,GoCD服务器将查找您的工具profiler代理yjpagent。在 C:\yjpagent.dll位置的dll。因此,将文件yjpagent.dll(它是yourkit profiler代理)从[yourkit_profiler_directory]\bin\win32复制到C:\yjpagent.dll。如果使用64位JVM,则从[yourkit_profiler_directory}\bin\win64复制该文件。
  2. 要改变上面提到的默认位置:定义环境变量YOURKIT_PATH,值等于yjpagent.dll的位置。
  3. 如果将GoCD服务器作为服务运行,则需要执行额外的步骤。在GoCD服务器安装的配置文件夹中, 编辑 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。

  1. 开始分析,运行:

    $ 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
    
  2. 让服务器运行一段时间,直到您开始看到性能问题。30分钟的快照可以提供足够的数据。

  3. 捕捉快照-运行:

    $ 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
    
  4. 停止剖析,运行:

    $ 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
    
  5. 完成分析之后,运行以下命令,以便在下一个GoCD服务器重启时,代理不会被加载到JVM中。

    如果是linux,运行以下命令:

    $ sudo rm /usr/lib/yourkit/libyjpagent.so
    

如果是windows,删除文件 C:\yjpagent.dll。 如果您使用的是 YOURKIT_PATH变量,则删除环境变量。

这些快照将保存在您配置的快照文件夹中。它们可以被发送到GoCD支持,这样可以检查它们以帮助找到性能的根本原因。

联系GoCD支持

如果GoCD服务器继续表现不佳,请将以下数据发送给我们。

  1. 数据库文件 cruise.h2.db。停止服务器并备份数据库。地点:

    Linux: /var/lib/db/h2db/cruise.h2.db

    Windows: [go_installation_dir]\db\h2db\cruise.h2.db

  2. 日志文件 go-server.log。地点:

    Linux: /var/log/go-server/go-server.log

    Windows: [go_installation_dir]\go-server.log

  3. GoCD配置文件 cruise-config.xml。地点:

    Linux: /etc/go/cruise-config.xml

    Windows: [go_installation_dir]\config\cruise-config.xml

  4. 如果您的工具包和jconsole快照如前面提到的那样,它的有用之处也可以发送。

results matching ""

    No results matching ""