如何对Artifactory进行重载调优?

阿里尔Kabov
2023-01-22十一10

相关版本:人工7号及以上。
可以获得以前版本的调优指南在这里

Artifactory附带了一组预定义的默认配置和参数。默认Artifactory应该可以很好地处理多达200个并发连接。
如果您认为Artifactory服务器未得到充分利用,或者为了让它在给定时刻处理更多进程,可以对Artifactory进行调优以支持更高的负载。
虽然始终可以通过向您的HA集群,这里我们将关注更垂直的规模。

推荐:Artifactory在您的组织中变得越重要,拥有一个监视Artifactory的系统就越重要。
你可以在监控和优化人工性能

JVM内存

默认情况下,Artifactory附带一个预定义的JVM内存限制。
要修改JVM内存分配,请参考产品配置的一部分安装指南。建议遵循我们的硬件建议
在增加JVM内存分配时,请确保至少将总RAM的30%留给操作系统和其他服务。

数据库连接

我们可以修改Artifactory节点可以向DB打开的最大连接数人工系统YAML

默认值:artifactory:
数据库:
maxOpenConnections: 100

访问:
数据库:
maxOpenConnections: 100

元数据:
数据库:
maxOpenConnections: 100

调优示例:artifactory:
数据库:
maxOpenConnections: 300

访问:
数据库:
maxOpenConnections: 300

元数据:
数据库:
maxOpenConnections: 300

重要的是:Artifactory maxOpenConnections参数也被Artifactory使用会话管理机制。
这意味着一旦使用了上面的示例,Artifactory节点将打开多达1200个DB连接。
因此,我们需要确保DB能够容纳所有Artifactory节点可以打开的连接总数。
根据经验,我们需要从数据库中获得一些基于以下方面的连接:连接总数=(节点数)* ((artifactory.database.)* 2) + access.database.maxOpenConnections + metadata.database.maxOpenConnections) + 50;*额外的50个连接是为了在所有DB连接池耗尽的情况下提供额外的喘息空间。

Tomcat HTTP连接/线程

Artifactory运行在Apache Tomcat之上,后者管理传入的HTTP连接池。
这设置了Artifactory可以服务的并发HTTP连接的数量。
方法可以覆盖默认线程池限制人工系统YAML

默认值:artifactory:
tomcat:
连接器:
maxThreads: 200

访问:
tomcat:
连接器:
maxThreads: 50

调优示例:artifactory:
tomcat:
连接器:
maxThreads: 600

访问:
tomcat:
连接器:
maxThreads: 150

重要的是:修改接入时maxThreads,则需要更新JFROG_HOME美元/ artifactory / var / etc / artifactory / artifactory.system.properties文件:artifactory.access.client.max.connections =
这是为了修改Artifactory用来与Access进行内部交互的内部HTTP连接池。

人工异步线程池

Artifactory中最重要的线程池之一是“异步”线程池。这个定义了可以并行运行的进程的数量。
除了配置并行进程的总数之外,我们还可以修改可以排队的进程的最大数量。
这是在JFROG_HOME美元/ artifactory / var / etc / artifactory / artifactory.system.properties。
默认值:
(这意味着机器的CPU核数乘以4)artifactory.async.corePoolSize = (4 * Runtime.getRuntime().availableProcessors())
artifactory.async.poolMaxQueueSize = 10000

调优示例:
(不应超过机器CPU核数的8倍)artifactory.async.corePoolSize = 128
artifactory.async.poolMaxQueueSize = 100000

垃圾收集

默认情况下,Artifactory垃圾收集被配置为每4小时运行一次。
GC是一项非常消耗资源的操作,如果您看到GC的运行周期与性能降低之间存在关联,我们建议您更改Artifactory GC(与JVM GC无关)在非高峰时间运行。

HTTP客户端

Artifactory为每个远程存储库的传出HTTP请求管理一个单独的连接池。
该连接池默认限制为50个并发连接,每个唯一路由最多限制为50个并发连接。

这是在JFROG_HOME美元/ artifactory / var / etc / artifactory / artifactory.system.properties。
默认值:Artifactory.http.client.max.total.connections = 50
Artifactory.http.client.max.connections.per.route = 50

调优示例:Artifactory.http.client.max.total.connections = 150
Artifactory.http.client.max.connections.per.route = 120

绕过路由器

工艺品7系统架构为我们提供了一种灵活的方式来修改由Artifactory服务处理请求的流程。
通过对Artifactory的API请求绕过Router服务,您可以从性能改进中获益。
这可以使用反向代理NGINXApache HTTPD
通过使用反向代理来重定向请求JFROG_URL美元/artifactory直接向/ artifactory ARTIFACTORY_NODE: 8081美元,你将绕过Router服务。
在高负载下,这有助于更好地提前分配请求。

Filestore配置

Artifactory支持不同的后端存储配置来存储Artifactory filestore
对于配置的存储不是本地的场景,可以使用大的Cache-FS提供者为每个节点本地挂载。
缓存的文件将很快得到服务,因此拥有一个大的缓存FS提供程序将提高性能。

一些文件存储提供程序允许调优和修改参数。例如:
最终:“numberOfThreads”。
Eventual-Cluster:“maxWorkers”。
远程:“maxConnections”。

更多信息请访问管理手工文件存储的最佳实践白皮书。