XRAY:如何调优XRAY以适应高负载?

阿里尔Kabov
2022-07-26 14:01

相关版本:Xray 2.8.8及以上。

Xray带有一组预定义的默认参数和配置。
如果您认为Xray服务器没有得到充分利用,或者希望对Xray进行调优,使其能够处理更高的负载,那么您应该能够通过阅读本文来实现这一点。

虽然可以通过向您的HA集群在这里,我们将关注一个更垂直的尺度。

内存和CPU

x射线的最低系统要求为16GB RAM和8核CPU。
增加这些将允许你将x射线扩展到更高的极限。除了DB服务器之外,监视Xray系统资源也很重要。2022世界杯阿根廷预选赛赛程

外部化数据库

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

存储

当扩展x射线时,不要忘记分配额外的存储空间!由于我们将允许更多的并行索引任务,这将需要更多的磁盘空间。

RabbitMQ

由于Xray使用RabbitMQ进行队列和任务管理,熟悉RabbitMQ非常重要,此外还要相应地进行调优。

RabbitMQ生产清单
RabbitMQ运行时优化

数据库连接

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

默认值:maxOpenConnServer: 30
maxOpenConnPersist: 30
maxOpenConnAnalysis: 30
maxOpenConnIndexer: 30

调优示例:maxOpenConnServer: 100
maxOpenConnPersist: 100
maxOpenConnAnalysis: 100
maxOpenConnIndexer: 100

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

队列的工人

默认情况下,Xray以all开头队列的工人设置为8。
在Artifactory版本7.11及以下,这可以通过x射线UI配置,在Admin→General。
在Artifactory版本7.12及以上,这只能通过REST API
配置的数字表示对应的x射线微服务可以并行处理的并行消息的数量。
例如,“Index”值定义了每个Indexer节点可以处理多少并发包。

在Xray版本2.9.0及以上,您可以通过UI设置工作者值。

对于低于2.9.0的版本,如果直接插入到MongoDB,则可以授予更高的值。
通过MongoDB查询查看当前配置:> db.configuration.find ({config_id:“xrayConfig”}).pretty ()

更新工人设置。> db.configuration。更新({config_id: "xrayConfig"},{$set: {"general_settings. update)index_workers”:NumberInt (40)}})
> db.configuration。更新({config_id: "xrayConfig"},{$set: {"general_settings.bin_mgr_workers": NumberInt(40)}})
> db.configuration。更新({config_id: "xrayConfig"},{$set: {"general_settings. update)persist_workers”:NumberInt (40)}})
> db.configuration。更新({config_id: "xrayConfig"},{$set: {"general_settings. update)alert_workers”:NumberInt (40)}})
> db.configuration。更新({config_id: "xrayConfig"},{$set: {"general_settings. update)analysis_workers”:NumberInt (40)}})
> db.configuration。更新({config_id: "xrayConfig"},{$set: {"general_settings. update)impact_analysis_workers”:NumberInt (40)}})
> db.configuration。更新({config_id: "xrayConfig"},{$set: {"general_settings. update)notification_workers”:NumberInt (40)}})

在上面的示例中,我们将所有队列的工作者数量设置为40。
不要忘记每个worker都是一个独立的Goroutine(就像x射线是用Go写的一样),所以一个高的worker值将受到可用CPU内核的限制。

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

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

调整x射线Artifactory

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

这将会开始美元ARTIFACTORY_HOME / etc / artifactory.system.properties。

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

属性名

使用

默认的

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

更改任何其他参数都不能使Xray更好地适应高负载,但这里将分享这些常识。

下班时间手动抽真空PostgreSQL

x光触发器真空查看Postgres中的“files”表,每周一次。
默认情况下,这将发生在上次x射线启动后的整整一个星期。

在大规模的环境中,操作一个“真空满”可能需要几分钟。在此期间,x射线可能不会像预期的那样运行。
为了避免这种情况,你可以在下班时间手动调用吸尘,这样即使x射线将“吸尘”,如表最近“吸尘”,它也不会花很长时间。

实现这一目标的一种方法是使用pg_cron安排:真空全部文件;
真空root_files;