UniFi - 如何优化高负载情况下的 UniFi 控制器

概览


本文将帮助用户诊断在高负载下运行的 UniFi 控制器,并描述可为优化性能所做的修改。

目录


  1. 介绍
  2. 症状:CPU 占用率高
  3. 症状:心跳丢失或配置缓慢
  4. 数据库连接调整
  5. 结论
  6. 相关文章

 

介绍


回到顶部

一般我们在大型布署场景中,用单个 UniFi 控制器管理大量 UniFi 设备时,如果服务器配置较低,可能在高负载情况下会遇到一些问题。

警告: 在继续下面概述的配置之前,请先备份。操作不当可能会造成系统崩溃。

 

症状:CPU 占用率高


回到顶部

CPU 占用率是我们需要关注的重要指标之一,如果您的 UniFi 控制器上出现了 CPU 占用率过高的情况,这可能是出现问题的迹象。但是,仅仅提升 CPU 性能并不一定能解决问题。

分配额外的内存

在增加内存大小之前,请先尝试增加 `XMX` and `XMS` 选项。默认情况下,UniFi 控制器将这些设置为 1GB。可以通过在 system.properties 文件中输入以下内容来增加它们  (有关 system.properties 文件的更多信息,请参阅底部的相关文章)。

unifi.xmx=2048
unifi.xms=2048
提示: 单位是 MB.

在升级控制器的 CPU 之前,建议先提高一下可用内存,上述操作是是将 UniFi 控制器的内存容量从 1GB 增加到 2GB。然后再观察 CPU 使用率是否下降。

如果 2GB 不够,可以根据网络规模将限制提高到 4 到 8GB。在这种情况下,内存以 1024 为增量递增,即 4GB = 4096。要测试 UniFi 控制器服务器上的内存是否足够,可以使用 jstat -gcutil 命令来检查。有关执行此操作的更多信息,请参阅以下 Oracle 文档:  jstat - Java 虚拟机统计信息监视工具

启用高性能 Java 垃圾收集器

如果增加内存不能解决问题,管理员可能需要考虑将此行添加到 system.properties 文件(注意,这仅适用于Cloud Key 以外的其他控制器):

unifi.G1GC.enabled=true

这使新的 Java 垃圾收集器可以帮助优化性能。但是,如果在这些更改之后,CPU 使用率在内存增加后仍然居高不下,则可能需要使用更多 CPU 内核和更大内存的服务器来处理负载。

升级 Mongo 版本/引擎

如果情况继续存在,管理员可以考虑升级到使用了 WiredTiger 作为存储引擎的 MongoDB3.2+ 版本, 以更好地扩展UniFi 控制器。有关说明,请参阅以下链接:

 

症状:心跳丢失或配置缓慢


回到顶部

无论有多少设备,所有的设备都会尝试向控制器上报信息。默认情况下,控制器可以同时处理来自 200 个设备的连接,因此,除非单个控制器管理数千台设备,否则设备心跳丢失的原因不在于此。如果仅管理几百个设备,则可以尝试本节中介绍的调整,但可能无法达到预期结果。 可以在 system.properties 中进行调整可同时处理的消息数量:

inform.num_thread=200
inform.max_keep_alive_requests=100

默认值是 200,max_keep_alive_requests 应该始终低于 num_thread。我们可以尝试在这里进行一些调整。调整之后可以看到设备稳定性的增加,并通过将配置推送到其他设备的方式,使控制器变得更加稳定。

 

数据库连接调整


回到顶部

在运行大型 UniFi 布署时,可能需要用到外部 mongo 集群,以便能够在 UniFi 控制器应用程序之外扩展独立的数据库。 在我们的全球社区上可以找到有关此问题的讨论。 如果在 mongo 进程中看到 CPU 使用率过高,可能意味着需要更大的内存或需要分离上述的 mongodb 进程。 一旦完成,可以调整以下内容以查看应用程序性能是否提升:

db.mongo.connections_per_host=100
db.mongo.threads_multiplier=5

这会导致 500 个线程等待 mongo 连接。所以请记住,更多的线程可能意味着更高的CPU使用率,因为 CPU 必须在线程之间进行上下文切换。它可能会达到更高的 DB 吞吐量,但前提是 mongo 进程能够消耗更多的 CPU 来更快地提供服务请求。

 

结论


回到顶部

为大型布署提高性能,以及提供稳定性的最佳方法是确保您能够对系统资源进行有效监视。除此之外,降低数据库工作负载和增加内存等做法可让 UniFi 控制器承载起更多客户端和设备。这会在 UniFi 控制器用户界面的资源使用情况和性能页中展示出来。

 

相关文章


回到顶部

UniFi - 如何创建和恢复备份

UniFi - 解释 system.properties 文件

UniFi - 配置多个站点