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

阿里尔Kabov
2022-12-27 12:28

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

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

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

虽然它总是可以通过添加额外的节点到您的HA集群在这里,我们将关注一个更垂直的尺度。

内存和CPU

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

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

外部化数据库

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

存储

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

RabbitMQ

由于Xray使用RabbitMQ进行队列和任务管理,除了对它进行相应的调优外,熟悉它也很重要。

RabbitMQ生产检查表
RabbitMQ运行时调优

数据库连接

我们可以改变每个x射线微服务可以打开到Postgres DB的最大连接数。
这将在$XRAY_HOME/etc/系统中配置。yaml文件。

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

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

队列的工人

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

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

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

REST API示例:

#默认值:#新内容:8个工人#现有内容:4个工人

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(就像x射线是用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;

调整Artifactory x射线

在Artifactory中,可以配置几个属性来调优Artifactory <> x射线交互。
默认情况下,Artifactory被设置为每60秒检查一次,如果它有新的事件,它应该发送到Xray。除了一些其他参数外,这个参数还可以改变。

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

调优示例:artifactory.xray.index . 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