监控和优化人工性能

随着Artifactory使用量的增加,其资源可能会逐渐耗尽,从而导致性2022世界杯阿根廷预选赛赛程能中断或下降。当使用量增加时,监视系统及其历史数据的重要性也会增加。监视使用模式是优化Artifactory并确保其稳定性的重要第一步。在这里,我们想与您分享一些关于监视和调优Artifactory及其环境的指南和技巧。这里将介绍需要监视(并可能调优)的基本资2022世界杯阿根廷预选赛赛程源,包括:Tomcat、HTTP连接、数据库、Java虚拟机(JVM)和存储。
Tomcat
人工运行Tomcat它使用Apache HTTP客户端处理HTTP请求。Tomcat维护一个线程池,并分配一个线程来处理每个传入请求。当线程池耗尽时,Tomcat将创建更多的线程(不超过规定的最大值)maxThreads属性)处理传入的其他请求。如果请求的数量超过maxThreads值,则请求将排队(直到方法指定的最大值)acceptCount属性)。如果这个参数太高,等待空闲线程的请求可能会遇到延迟,直到有可用的线程来处理它们。如果也达到了acceptCount限制,Tomcat将对任何额外的请求抛出“connection refused”错误,直到所需的资源最终被释放。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端口)。
睡觉的时候;$(日期)HTTP连接:$(netstat -latuen | grepTOMCAT_PORT| wc - 1);回声;完成
您还可以指定要计数的状态。例如,您可以通过运行以下命令来计算ESTABLISHED状态的数量(将TOMCAT_PORT替换为Artifactory的Tomcat端口)
睡觉的时候;$(日期)HTTP连接:$(netstat -latuen | grepTOMCAT_PORT|grep建立| wc - 1);回声;完成
MBean用于HTTP连接从版本4.12开始,Artifactory公开了HTTP连接MBean,以便可以跟踪其使用情况。这个MBean可以在下面的每个存储库中找到:
org.jfrog.artifactory > Artifactory | HTTPConnectionPool > [Repo Name]: Attributes
要了解更多,请阅读我们的博客文章<一个href="//www.si-fil.com/www/blog/mbeans-mbeans-theyre-good-for-your-heart/" target="_blank" rel="noopener noreferrer">人工mbean集成.
第三方工具:还可以使用许多第三方工具来监视HTTP连接和各种其他资源。2022世界杯阿根廷预选赛赛程JFrog的知识库包含一些工具的说明,包括JConsole,JavaMelody,Nagios.对于人工Docker容器,有几个开源工具th一个t可以用来监视HTTP连接、JVM使用情况等。
下面的图表是用另一个工具生成的LogicMonitor.它清楚地表明,Tomcat中可用的最大线程数已经达到,这是一个很好的迹象,表明您应该考虑增加线程数maxThreads属性。server.xml文件。

用于工件的HTTP连接
默认情况下,每个存储库允许的HTTP连接数设置为50。如果您注意到所使用的连接数始终等于或接近此值,则可以通过使用以下参数来增加该值美元ARTIFACTORY_HOME / etc / artifactory.system.properties文件:
Artifactory.http.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] [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 > Storage: Data Source下找到。当然,还有许多其他工具可以用来监视数据库连接。例如,下图显示了由<一个href="https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_Monitoring.html" target="_blank" rel="noopener noreferrer">AWS监控工具RDS数据库…

Netstat也可以在这里用来监视活动的DB连接(用Artifactory的数据库端口替换DB_PORT):
睡觉的时候;$(日期)数据库连接:$(netstat -latuen | grepDB_PORT| wc - 1);回声;完成
您还可以指定要计数的状态。例如,您可以通过运行以下命令(将DB_PORT替换为Artifactory的数据库端口)来计算LISTEN状态的数量:
睡觉的时候;$(日期)数据库连接:$(netstat -latuen | grepDB_PORT|grep听| wc - 1);回声;完成
如果您发现您的数据库连接始终接近最大值,那么您可能需要相应地增加它。如果活动数据库连接数达到最大值,并且请求更多数据库连接,则Artifactory服务器日志(美元ARTIFACTORY_HOME /日志/ artifactory.log)将产生以下例外:
cannotcreatetransactionexception:无法为事务打开JDBC连接;嵌套异常是org.apache.tomcat.jdbc.pool. poolextrestedexception: [art-exec-672866] Timeout:池是空的。无法在120秒内获取连接,none available[size:100;忙:100;空闲状态:0;lastwait: 120000)。
您还可能会看到性能下降,因为等待在空闲队列中获得位置的数据库连接数量增加(pool.max.idle(下一节将对此进行解释)。你可以通过做a来确认<一个href="//www.si-fil.com/www/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),否则很难在图中看到使用模式。

前面讨论的许多工具(例如JConsole、JVisualVM、Javamelody等)也可以用来监视JVM的使用情况。
调优
由于用户数量和repos的大小对内存使用和性能有直接影响,因此在优化Artifactory时,我们建议查看推荐硬件在修改JVM参数时,请参考Artifactory用户指南。要修改JVM内存分配,请请参阅相应的说明Linux, Solaris或Mac,或窗户.
存储
存储是另一个需要监控的重要资源,因为缺乏存储可能会损害性能和稳定性。
监控
磁盘IO速率:较慢的磁盘IO速率可能会导致性能显著下降,但确实存在这种情况您可以使用不同的工具来监视它。在下面的例子中,iostat正在被用来监控IO速率。我们建议在安装/配置任何Artifactory实例之前执行此测试。添加-d标志以仅显示设备信息页面,添加-x标志以显示详细信息(单独的读/写统计);加1连续输出。下面是一个示例输出:
$ iostat -dx设备:rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgq -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(最近最少使用)缓存,用于上传和下载请求。对于I/O操作较高或NFS访问速度较慢的实例,启用Cachefs可以显著提高性能。有关如何配置此功能的更多信息,请参考<一个href="//www.si-fil.com/www/confluence/display/RTF/Configuring+the+Filestore" target="_blank" rel="noopener noreferrer">缓存文件系统二进制提供程序参见《Artifactory用户指南》。
如果您发现磁盘空间不足,您可以将当前文件存储库移动到新的存储解决方案。一种选择是使用受支持的云存储提供商之一(S3,GCS或Azure),这将为您提供大规模可扩展的存储。另一个选择是使用Artifactory 's添加存储Filestore分片特性,您可以将其配置为使用冗余或非冗余设置来实现稳定、可靠和可扩展的文件存储。有关调整Artifactory如何使用磁盘空间的更多提示,请查看用户指南。
一般来说,当涉及到优化Artifactory时,一个尺寸并不适合所有。通过监视您的设置,您可以适当地调整您的系统和设置,以便您的Artifactory实例可以达到最佳性能。我们还建议您执行压力测试以进行调优。你可以使用人工查询语言(AQL)或JFrog CLI对并发的上传和下载进行负载测试;使用CLI的" -threads "选项来测试多线程上传和下载。
