如何为高负载调优Artifactory ?
相关版本:Artifactory 7及以上。
可以获得以前版本的调优指南在这里.
Artifactory提供了一组预定义的默认配置和参数。默认的Artifactory应该能够很好地处理最多200个并发连接。
如果您认为Artifactory服务器没有得到充分利用,或者为了允许它在给定时刻处理更多的进程,可以调优Artifactory以支持更高的负载。
虽然可以通过向您的HA集群在这里,我们将关注一个更垂直的尺度。
推荐:Artifactory在您的组织中越重要,就越需要一个监视系统来监视Artifactory。
你可以在这里进一步阅读监控和优化Artifactory性能.
JVM内存
默认情况下,Artifactory附带一个预定义的JVM内存限制。
要修改JVM内存分配,请参考产品配置的一部分安装指南.请遵循我们的硬件建议.
在增加JVM内存分配时,请确保至少将总RAM的30%留给操作系统和其他服务。
数据库连接
的值可以改变Artifactory节点可以打开到DB的最大连接数YAML Artifactory系统.
默认值:artifactory:
数据库:
maxOpenConnections: 100
...
访问:
数据库:
maxOpenConnections: 100
...
元数据:
数据库:
maxOpenConnections: 100
调优示例:artifactory:
数据库:
maxOpenConnections: 300
...
访问:
数据库:
maxOpenConnections: 300
...
元数据:
数据库:
maxOpenConnections: 300
重要的是:Artifactory也使用Artifactory的maxOpenConnections参数会话管理机制。
这意味着一旦使用了上面的示例,Artifactory节点将打开多达1200个DB连接。
因此,我们需要确保DB能够容纳所有Artifactory节点可以打开的连接总数。
作为经验法则,我们将需要从数据库的连接数量基于:连接总数=(节点数)* ((artifactory.database.)maxOpenConnections * 2) + access.database.maxOpenConnections + metadata.database.maxOpenConnections) + 50;
*额外的50个连接是为了在所有DB连接池耗尽的情况下提供额外的喘息空间。
Tomcat HTTP连接/线程
Artifactory运行在Apache Tomcat之上,后者管理传入的HTTP连接池。
这将设置Artifactory可以服务的并发HTTP连接的数量。
方法可以覆盖默认的线程池限制YAML Artifactory系统.
默认值:artifactory:
tomcat:
连接器:
maxThreads: 200
...
访问:
tomcat:
连接器:
maxThreads: 50
调优示例:artifactory:
tomcat:
连接器:
maxThreads: 600
...
访问:
tomcat:
连接器:
maxThreads: 150
重要的是:修改Access时maxThreads,则需要更新JFROG_HOME美元/ artifactory / var / etc / artifactory / artifactory.system.properties文件:artifactory.access.client.max.connections = <值>
这将修改Artifactory用于与Access进行内部交互的内部HTTP连接池。
Artifactory异步线程池
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 = 128artifactory.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
绕过路由器
Artifactory 7系统架构为我们提供了一种灵活的方式来修改将由Artifactory服务处理的请求流。
通过绕过对Artifactory的API请求的Router服务,您可以从改进的性能中获益。
这可以通过使用反向代理如NGINX或Apache HTTPD.
通过使用反向代理重定向请求JFROG_URL美元/artifactory直接向/ artifactory ARTIFACTORY_NODE: 8081美元,您将绕过Router服务。
在高负载下,这有助于更好地提前分发请求。
Filestore配置
Artifactory支持不同的后端存储配置来存储Artifactory filestore.
对于配置的存储不是本地的场景,可以使用大的Cache-FS提供者为每个节点本地挂载。
缓存的文件将很快得到服务,因此拥有一个大型的Cache FS提供程序将会提高性能。
有些文件存储提供程序允许调优和修改参数。例如:
最终:“numberOfThreads”。
Eventual-Cluster:“maxWorkers”。
远程:“maxConnections”。
更多信息请访问管理Artifactory文件存储的最佳实践白皮书。
