监控和优化工厂性能

JFrog Artifactory

随着Artifactory使用量的增加,它的资源可能会逐渐耗尽,从而导致2022世界杯阿根廷预选赛赛程性能中断或下降。当使用量增加时,监视系统及其历史数据的重要性也会增加。监视使用模式是优化Artifactory并确保其稳定性的关键第一步。在这里,我们想与您分享一些关于监视和调优Artifactory及其环境的指导方针和技巧。下面将介绍需要监视(可能还需要调优)的基2022世界杯阿根廷预选赛赛程本资源,包括:Tomcat、HTTP连接、数据库、Java虚拟机(JVM)和存储。

Tomcat

Artifactory在Tomcat它使用Apache HTTP客户端处理HTTP请求。Tomcat维护一个线程池,并分配一个线程来处理每个传入的请求。当线程池耗尽时,Tomcat将创建更多线程(最多可达maxThreads属性)处理进来的额外请求。如果请求的数量超过maxThreads值,则请求将排队(直到由acceptCount属性)。如果该参数过高,等待空闲线程的请求可能会出现延迟,直到线程可用来处理它们。如果也达到acceptCount限制,Tomcat将为任何其他请求抛出“连接拒绝”错误,直到最终释放所需的资源。2022世界杯阿根廷预选赛赛程反过来,任何不能获得线程的新请求、上传、下载、更新等都将失败。为了避免这些性能损失和错误,可以增加Tomcat的这些属性的值server.xml文件。的默认值maxThreads是200,而acceptCount设置为100。样例server.xml下面的文件显示了这些属性的增加值。

<连接器端口= " 8081 "acceptCount = " 200 "压缩=“关闭”connectionLinger = " 1 "connectionTimeout = " 60000 "maxThreads = " 600 "acceptorThreadCount = " 2 "enableLookups = " false "/>

监控

Netstat:如果您没有设置任何监控工具,您可以通过运行以下命令轻松监控HTTP连接的使用情况netstat命令(将TOMCAT_PORT替换为Artifactory的tomcat端口)。

睡觉时5;$(日期)HTTP连接:$(netstat -latuen | grepTOMCAT_PORT| wc -l)";回声;完成

您还可以指定要统计哪个州。例如,您可以通过运行以下命令来计算ESTABLISHED状态的数量(将TOMCAT_PORT替换为您的Artifactory的Tomcat端口)

睡觉时5;$(日期)HTTP连接:$(netstat -latuen | grepTOMCAT_PORT|grep建立| wc -l)";回声;完成

用于HTTP连接的MBean:从4.12版本开始,Artifactory公开了HTTP连接MBean,以便可以跟踪其使用情况。这个MBean可以在下面的每个存储库中找到:

org.jfrog.artifactory > Artifactory | HTTPConnectionPool > [Repo Name]:属性

要了解更多,请阅读我们的博客文章<一个href="//m.si-fil.com/blog/mbeans-mbeans-theyre-good-for-your-heart/" target="_blank" rel="noopener noreferrer">Artifactory MBeans集成.

第三方工具:还可以使用许多第三方工具来监视HTTP连接和各种其他资源。2022世界杯阿根廷预选赛赛程JFrog的知识库包含其中一些工具的说明,包括JConsoleJavaMelody,Nagios.对于Artifactory Docker容器,有几个开源工具th一个t可以用来监视HTTP连接、JVM使用情况等等。

下面的图表是用另一个工具生成的LogicMonitor.它清楚地显示Tomcat中可用线程的最大数量已经达到,这表明您应该考虑增加线程的数量maxThreads属性server.xml文件。

监视线程- JFrog Artifactory

Artifactory的HTTP连接

默认情况下,每个存储库允许的HTTP连接数量设置为50。方法中的以下参数可以增加使用的连接数,如果注意到使用的连接数始终等于或接近此值美元ARTIFACTORY_HOME / etc / artifactory.system.properties文件:

client.max.total.connections = {value}

如果使用S3, HTTP连接

如果您正在使用S3对象存储来管理您的文件存储,您应该知道Artifactory的S3二进制提供程序是使用Jets3t库实现的,该库默认将允许的最大并发连接数设置为100。在需要许多到S3对象存储的连接的文件存储的密集活动下,您可能会发现请求卡住等待来自JetS3t连接池的连接。为避免这种情况,您应该添加httpclient.max-connections属性中的S3二进制提供程序ARTIFACTORY_HOME / etc /美元binarystore.xml文件。下面的代码片段是一个示例Cleversafe模板取自Artifactory用户指南,该指南展示了如何设置httpclient.max-connections属性:

<配置版本=“v1”>s3 <链模板= " " / ><标识> XXXXXXXXX > < /身份<凭证> XXXXXXXX < /证书>[My CleverSafe Server] . txt [My CleverSafe Server [My CleverSafe Bucket<属性名= " httpclient。最大连接“价值= " 300 " / >假< / httpsOnly < httpsOnly > ><属性名= " s3service。disable-dns-buckets " value = " true " > < /属性>< /提供者>< / config >

要了解更多关于优化Tomcat的信息,Netflix在他们的博客中提供了有价值的见解,为高吞吐量、快速故障系统调优Tomcat

反向代理的HTTP连接

如果您在Artifactory前使用反向代理,您可能会注意到HTTP连接数量达到最大值,从而阻止这些连接到达Artifactory。在这些情况下,您应该考虑为反向代理分配更多的连接。有关如何做到这一点的详细说明,请阅读您正在使用的反向代理服务器的文档。你可以读到调优NGINX的性能在NGINX博客。对于Apache,可以参考Apache性能调优在Apache文档中。同样,您可以参考这个Apache文档Apache HTTPD反向代理。

数据库

数据库连接的数量是优化Artifactory时应该监视的另一个重要资源。管理员必须能够确认有足够的可用数据库连接,否则,用户可能会遇到正在等待空闲连接的挂起请求。允许的数据库连接数应该根据当前使用情况进行调优,但请记住,这个值不应该超过数据库本身配置的最大数据库连接数。

监控

Artifactory还为DB连接公开了MBean,以便您可以使用任何MBean监视它们JMX-compliant工具。如果你正在使用JConsole,那么这个MBean可以在:org.jfrog.artifactory > Artifactory >存储:数据源。当然,还有许多其他工具可以用来监视数据库连接。例如,下图显示了数据库使用高峰记录<一个href="https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Monitoring.html" target="_blank" rel="noopener noreferrer">AWS监控工具的RDS数据库..

监控数据库连接- JFrog Artifactory

Netstat也可以用来监视活动的DB连接(用Artifactory的数据库端口替换DB_PORT):

睡觉时5;$(date)数据库连接:$(netstat -latuen | grepDB_PORT| wc -l)";回声;完成

您还可以指定要统计的州。例如,您可以通过运行以下命令来计算LISTEN状态的数量(将DB_PORT替换为您的Artifactory的数据库端口):

睡觉时5;$(date)数据库连接:$(netstat -latuen | grepDB_PORT|grep听| wc -l)";回声;完成

如果您发现数据库连接始终接近最大值,则可能需要相应地增加它。如果活动数据库连接的数量达到最大值,并且请求更多的数据库连接,则Artifactory服务器日志(美元ARTIFACTORY_HOME /日志/ artifactory.log)将产生以下异常:

无法为事务打开JDBC连接;嵌套异常是org.apache.tomcat.jdbc.pool. poolexhaust - stedexception: [art-exec-672866]超时:池是空的。无法在120秒内获取连接,没有可用连接[大小:100;忙:100;空闲状态:0;lastwait: 120000)。

由于等待在空闲队列中获得位置的数据库连接数量增加,您还可能看到性能下降(pool.max.idle,这将在下一节中解释)。你可以通过做<一个href="//m.si-fil.com/knowledge-base/how-to-analyze-thread-dumps-using-a-java-thread-dump-analyzer/" target="_blank" rel="noopener noreferrer">线程转储并查找被停放的线程的数量:org.apache.tomcat.jdbc.pool.ConnectionPool.returnConnection。

调优

在Artifactory:中的以下参数可以配置Artifactory的数据库连接美元ARTIFACTORY_HOME / etc / db.properties文件:

  • pool.max.active:允许的最大并发数据库连接数(默认为100)
  • pool.max.idle: Artifactory将持有的最大空闲数据库连接数(默认为10)

在数据库中:增加数据库中的连接数也同样重要,您应该参考正在使用的数据库的文档。除了监视和修改数据库连接之外,在数据库性能方面还需要进行其他设置。对于一些调优示例,请参阅我们的MySQL文档包括对my.cnf文件的建议,以便您可以调优MySQL以获得最佳性能。对于PostgreSQL,您可以在PostgreSQL维基在哪里还可以学到如何增加yourmax_connections设置。

JVM内存

在优化Artifactory时,还需要考虑内存。如果分配给Artifactory的内存不足,就会出现许多问题,比如缓慢的UI、缓慢的响应,在最坏的情况下,一个完全没有响应的Artifactory。为了避免遇到内存消耗问题,您可以修改Artifactory JVM设置。

监控

请注意,在监视JVM使用情况的历史数据时,一定要使初始堆大小(Xms)小于最大堆大小(Xmx),否则很难在图中看到使用模式。

监控JVM使用情况- JFrog Artifactory

前面讨论过的许多工具(例如JConsole、JVisualVM、Javamelody等)也可以用来监视JVM的使用情况。

调优

由于用户数量和回购的大小对内存使用和性能有直接影响,在优化Artifactory时,我们建议检查推荐硬件在修改JVM参数时,请参考Artifactory用户指南中的指导原则。要修改JVM内存分配,请参见相应的说明Linux、Solaris或Mac,或窗户

存储

存储是另一个需要监控的重要资源,因为缺乏存储可能会对性能和稳定性造成不利影响。

监控

磁盘IO率:较慢的磁盘IO速率可能会导致性能显著下降,但确实存在这种情况您可以使用不同的工具来监控这一点。在下面的例子中,iostat是用来监测输入输入频率的。我们建议在安装/配置任何Artifactory实例之前执行此测试。添加-d标志只显示设备信息页面,-x显示详细信息(单独的读/写统计);加1表示连续输出。下面是一个输出示例:

$ iostat -dx设备:rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %utilXVDB 0.00 0.00 649.00 0.00 55808.00 0.00 171.98 8.13 12.44 12.44 0.00 1.54 100.00

磁盘空间:Artifactory公开了一个MBean,允许您监视存储,该存储可以在org.jfrog.artifactory > Artifactory > Storage下找到。对于企业安装,JFrog任务控制提供了一个中央仪表板,从中您可以监视所有全局Artifactory实例在一个地方的存储(以及更多)。您可以阅读更多使用任务控制跟踪存储使用任务控制在这篇博文

调优

您是否发现您现有的文件存储(例如S3, NFS等)很慢,如果您也有一个更快更小的本地文件存储(例如固态驱动器),那么Artifactory的cache-fs能帮上忙。Cachefs的工作原理类似于文件系统,但也有一个二进制LRU(最近最少使用)缓存用于上传和下载请求。启用Cachefs可以显著提高高IOPS (I/O Operations)或NFS访问慢的实例的性能。有关如何配置的更多信息,请参阅<一个href="//m.si-fil.com/www/confluence/display/RTF/Configuring+the+Filestore" target="_blank" rel="noopener noreferrer">缓存文件系统二进制提供程序在Artifactory用户指南中。

如果您发现磁盘空间不足,您可以将当前文件存储移动到新的存储解决方案。一种选择是使用受支持的云存储提供商之一(S3GCSAzure),这将为您提供大规模可扩展的存储。另一种选择是使用Artifactory的存储添加Filestore分片您可以配置该特性以使用冗余或非冗余设置来实现稳定、可靠和可伸缩的文件存储。有关如何调整Artifactory使用磁盘空间的更多技巧,请参阅用户指南。

一般来说,在优化Artifactory时,一种方法并不适合所有人。通过监视您的设置,您可以适当地调整您的系统和设置,以便您的Artifactory实例能够达到最佳性能。我们还建议您执行压力测试进行调优。您可以使用人工查询语言(AQL)JFrog CLI加载测试并发上传和下载;使用CLI的“-threads”选项来测试多线程上传和下载。