x射线:如何调整x射线重负载?

阿里尔Kabov
2023-01-22 11:09

相关版本:x光3。X及以上。

x射线带有一组预定义的默认参数和配置。

如果您认为Xray服务器未得到充分利用,或者希望对Xray进行调优,使其能够处理更高的负载,那么通过阅读本文应该能够实现这一目标。

虽然始终可以通过向您的HA集群,这里我们将关注更垂直的规模。

内存和CPU

最低系统要求x光检查24gb RAM和一个6-core CPU.x光做如果有一个最大内存设置,它将使用主机服务器的全部资源。2022世界杯阿根廷预选赛赛程

增加硬件将允许您将x射线扩展到更高的限制。除了监视DB服务器之外,还必须监视Xray系统资源。2022世界杯阿根廷预选赛赛程

外部化数据库

如果您还没有这样做,我们的建议是将Xray使用的数据库外部化到专用服务器。这将确保更健康的增长,并在出现问题时更容易进行故障排除。

存储

当扩展Xray时,不要忘记分配额外的存储空间!由于我们将允许更多的并行索引任务,这将需要更多的磁盘空间。确保使用具有高IOPS的SSD,因为在索引和数据库同步期间,Xray将频繁地读写磁盘。

RabbitMQ

由于Xray使用RabbitMQ进行队列和任务管理,因此熟悉它也很重要,此外还要相应地调整它。

RabbitMQ生产清单
RabbitMQ运行时调优

数据库连接

我们可以修改每个Xray微服务可以打开到Postgres DB的最大连接数。
这将在$XRAY_HOME/etc/system中配置。yaml文件。

调优示例:服务器:
数据库:
#默认值:60
maxOpenConnections: 90
分析:
数据库:
# Defualt: 30
maxOpenConnections: 60
索引器:
数据库:
#默认值:30
maxOpenConnections: 60
坚持:
数据库:
#默认值:30
maxOpenConnections: 60

重要的是:不要忘记增加Postgres DB可以接受的连接数。
根据经验,我们需要从数据库中获得一些基于以下方面的连接:
连接总数=(节点数)* (maxOpenConnServer + maxOpenConnPersist + maxOpenConnAnalysis + maxOpenConnIndexer) + 50;

队列的工人

Queue Worker参数定义了相应的x射线微服务可以处理多少并行消息。例如,“Index”工作者计数定义了每个Indexer节点同时可以处理多少个包。

默认情况下,x射线以队列的工人新内容设置为8,现有内容设置为4。
在x射线2。X版本为2.9.0到2.16,可以通过UI设置worker的值。在3。使用的是X版本Artifactory的统一UI。

在Artifactory 7.11及以下版本中,这是可配置的通过x射线用户界面,在Admin→General。
在Artifactory 7.12及以上版本中,这只能通过REST API。

REST API示例:

#默认值:# New Content: 8 workers # Existing Content: 4 workers

curl -X PUT -H"Content-type: application/json" -u admin http://localhost:8082/xray/api/v1/configuration/workersCount——data '{
"指数":{
“new_content”:16日
“existing_content”:8
},
"坚持":{
“new_content”:16日
“existing_content”:8
},
"分析":{
“new_content”:16日
“existing_content”:8
},
“警告”:{
“new_content”:16日
“existing_content”:8
},
" impact_analysis ": {
“new_content”:8
},
"通知":{
“new_content”:16
}
} '


         

不要忘记,每个worker都是一个单独的Goroutine(因为Xray是用Go语言编写的),所以高worker值将受到可用CPU内核的限制。

重要的是:通过增加“bin_mgr_workers”,我们允许Xray打开更多的并发连接到Artifactory,从而产生更多的并发下载。
这里的高值也会影响Artifactory实例,因此监视Artifactory也很重要。(考虑调优Artifactory)

*根据不同的规模,您可能需要修改RabbitMQ虚拟主机的限制。
为此,在RabbitMQ主机上运行以下命令(将允许无限数量的连接):Rabbitmqctl set_vhost_limits -p / '{"max-connections": -1}'

在非工作时间手动清空PostgreSQL

x光触发器真空查看Postgres中的“files”表,每周一次。
默认情况下,这将发生在最后一次x射线开始后1周。

在大规模环境中,“真空满”的操作可能需要几分钟。在此期间,x射线的表现可能不像预期的那样。
为了避免这种情况,您可以在非工作时间手动调用吸尘,因此即使x射线将“吸尘”,因为桌子最近被“吸尘”,它应该不会花很长时间。

实现这一目标的一个选择是使用pg_cron要安排这些:真空满文件;
清空完整root_files;

调整人工x射线

在Artifactory中,有几个属性可以被配置来调整Artifactory <> Xray交互。
默认情况下,Artifactory设置为每60秒检查一次是否有应该发送给Xray的新事件。除了一些其他参数之外,这是可以更改的。

这将被设置美元ARTIFACTORY_HOME / etc / artifactory.system.properties。

调优示例:artifactory.xray.indexer.intervalSecs = 30

更改下面记录的任何其他参数并不会使Xray更好地适应重负载,这里记录了它们,以便您可以针对特定的用例检查它们。

属性名

使用

默认的

artifactory.xray.indexer.intervalSecs

事件提交间隔

60

artifactory.xray.client.block.cache.expiration.intervalSecs

扫描状态的人工制品缓存

300

artifactory.xray.client.block.unscanned.cache.expiration.intervalSecs

缓存没有扫描状态的工件

120

artifactory.xray.client.block.cache.size

10000

artifactory.xray.client.heartbeat.intervalSecs

每次x射线服务器状态检查的间隔时间

5

artifactory.xray.client.max.connections

50

artifactory.xray.client.builds.socket.timeout.millis

构建客户端—任何与扫描构建操作相关的内容

600000

artifactory.xray.client.normal.socket.timeout.millis

普通客户端-其他的

5000