XRAY:如何调优XRAY以适应高负载?
相关版本:Xray 2.8.8及以上。
Xray带有一组预定义的默认参数和配置。
如果您认为Xray服务器没有得到充分利用,或者希望对Xray进行调优,使其能够处理更高的负载,那么您应该能够通过阅读本文来实现这一点。
虽然可以通过向您的HA集群在这里,我们将关注一个更垂直的尺度。
内存和CPU
x射线的最低系统要求为16GB RAM和8核CPU。
增加这些将允许你将x射线扩展到更高的极限。除了DB服务器之外,监视Xray系统资源也很重要。2022世界杯阿根廷预选赛赛程
外部化数据库
如果您还没有这样做,我们的建议是将Xray使用的数据库外部化到专用服务器。这将确保更健康的增长,并在出现问题时更容易排除故障。
存储
当扩展x射线时,不要忘记分配额外的存储空间!由于我们将允许更多的并行索引任务,这将需要更多的磁盘空间。
RabbitMQ
由于Xray使用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
事件提交间隔 |
60 |
|
获得扫描状态的工件缓存 |
300 |
|
没有扫描状态的工件缓存 |
120 |
|
每次x射线服务器状态检查之间的间隔 |
5 |
|
50 |
||
构建客户端—任何与扫描构建操作相关的内容 |
600000 |
|
普通客户端-其他一切 |
5000 |
更改任何其他参数都不能使Xray更好地适应高负载,但这里将分享这些常识。
下班时间手动抽真空PostgreSQL
x光触发器真空查看Postgres中的“files”表,每周一次。
默认情况下,这将发生在上次x射线启动后的整整一个星期。
在大规模的环境中,操作一个“真空满”可能需要几分钟。在此期间,x射线可能不会像预期的那样运行。
为了避免这种情况,你可以在下班时间手动调用吸尘,这样即使x射线将“吸尘”,如表最近“吸尘”,它也不会花很长时间。
实现这一目标的一种方法是使用pg_cron安排:真空全部文件;
真空root_files;
