Tổng quát : Bài viết này sẽ giúp người dùng chẩn đoán bộ điều khiển mạng UniFi chạy dưới tải trọng cao, cũng như mô tả các sửa đổi có thể được thực hiện để có hiệu suất tối ưu.
Giới thiệu : Có một vài điều cần xem xét khi quản lý các cài đặt UniFi lớn với hàng trăm thiết bị và một số trang web được kết nối với một bộ điều khiển mạng UniFi duy nhất. Bộ điều khiển chạy dưới tải cao như vậy có thể gặp một số vấn đề nếu được định cấu hình giống như bộ điều khiển quản lý tải nhẹ hơn nhiều. Có một số triệu chứng có thể được nhận ra, chẩn đoán và làm việc để cải thiện hiệu suất của bộ điều khiển.
Triệu chứng: Sử dụng CPU cao : Một trong những số liệu quan trọng nhất để theo dõi, là việc sử dụng CPU trên bộ điều khiển mạng UniFi của bạn. Việc sử dụng CPU cao là dấu hiệu đầu tiên cho thấy có vấn đề. Thật không may, chỉ cần tăng CPU không nhất thiết phải là câu trả lời. Phân bổ bộ nhớ bổ sung trước khi tăng kích thước hộp của bạn, hãy thử tăng các tùy chọn `XMX` và` XMS` . Theo mặc định, bộ điều khiển mạng UniFi có các cài đặt này thành 1 GB. Chúng có thể được tăng lên bằng cách thực hiện các mục sau trong tệp system.properties (xem Bài viết liên quan bên dưới để biết thêm thông tin về tệp system.properIES).
unifi.xmx = 2048
unifi.xms = 2048
Những thay đổi ở trên sẽ tăng bộ nhớ bộ điều khiển mạng UniFi được phép tiêu thụ từ 1 GB đến 2 GB. Lý do tại sao không có đủ bộ nhớ có thể gây ra việc sử dụng CPU cao, là vì máy ảo Java sẽ tiêu tốn quá nhiều chu kỳ CPU để thu gom rác để ở trong bộ nhớ 1 GB được cấp cho bộ điều khiển. Vì vậy, trước khi chuyển sang một máy có nhiều CPU hơn, bạn nên sử dụng tối đa bộ nhớ khả dụng trên máy đó với các cài đặt ở trên. Sau đó quan sát nếu việc sử dụng CPU giảm. Nếu 2GB là không đủ, quản trị viên có thể muốn tăng giới hạn lên 4-8GB tùy theo tỷ lệ. Trong trường hợp này, đơn giản là bạn sẽ tăng giá trị ở trên theo gia số 1024, tức là 4 GB = 4096. Để kiểm tra xem bộ nhớ của bạn có đủ trên máy chủ bộ điều khiển mạng UniFi hay không, bạn có thể sử dụngjstat -gcutil lệnh để kiểm tra. Để biết thêm thông tin về cách thực hiện việc này, hãy xem tài liệu Oracle sau: jstat – Công cụ giám sát thống kê máy ảo Java. Kích hoạt Trình thu gom rác Java hiệu suất cao. Nếu tăng bộ nhớ không giải quyết được vấn đề, quản trị viên cũng có thể xem xét thêm dòng này vào tệp system.properations (lưu ý điều này chỉ áp dụng cho Bộ điều khiển ngoài Cloud Key): unifi.G1GC.enabled=true. Điều này cho phép bộ lọc rác Java mới có thể giúp tối ưu hóa hiệu suất. Tuy nhiên, nếu sau những thay đổi này, việc sử dụng CPU cao sẽ tiếp tục sau khi tăng bộ nhớ, một máy lớn hơn có nhiều lõi CPU hơn và nhiều bộ nhớ hơn để xử lý khối lượng công việc có thể là cần thiết. Thay đổi Phiên bản / Công cụ Mongo Trong các trường hợp liên tục, quản trị viên có thể xem xét cập nhật phiên bản MongoDB lên 3.2+ với WiredTiger làm công cụ lưu trữ, như một phương tiện để mở rộng tốt hơn Bộ điều khiển mạng UniFi.
Triệu chứng: Nhịp tim bị mất hoặc chậm cung cấp : Bất kể số lượng, tất cả các thiết bị sẽ cố gắng thông báo lại cho bộ điều khiển. Theo mặc định, bộ điều khiển có thể xử lý 200 kết nối đồng thời từ các thiết bị, do đó các thiết bị bị bỏ lỡ không phải là vấn đề trừ khi một bộ điều khiển duy nhất đang quản lý hàng ngàn thiết bị. Nếu nó chỉ quản lý vài trăm thiết bị, điều chỉnh được mô tả trong phần này có thể được thử, nhưng nó có thể không có kết quả mong muốn. Số lượng tin nhắn thông báo đồng thời có thể được xử lý có thể được đặt trong tệp system.properations bằng cách thêm các dòng sau và điều chỉnh các giá trị phù hợp nhất với nhu cầu của bạn. Không quan trọng nơi những dòng này được thêm vào trong tệp.
thông tin.num_thread = 200
notify.max_keep_alive_ request = 100
Giá trị mặc định là 200 và max_keep_alive_requests phải luôn luôn thấp hơn num_thread. Hãy thử điều chỉnh từ đó. Cần tăng sự ổn định của thiết bị và bằng cách đẩy cấu hình ra các thiết bị khác, thậm chí còn ổn định hơn.
Điều chỉnh kết nối cơ sở dữ liệu : Khi chạy cài đặt UniFi lớn, có thể muốn chạy một cụm mongo bên ngoài để có thể mở rộng cơ sở dữ liệu một cách độc lập khỏi ứng dụng UniFi Network Controller. Thảo luận về điều đó có thể được tìm thấy ở đây trên diễn đàn cộng đồng beta của chúng tôi ( cần truy cập? ). Nếu sử dụng CPU cao được nhìn thấy trong quá trình mongo, nó có thể chỉ ra sự cần thiết của một hộp lớn hơn hoặc cần phải tách quy trình mongodb như đã đề cập ở trên. Khi đã xong, có thể điều chỉnh các mục sau để xem liệu nó có mang lại hiệu suất ứng dụng tốt hơn không:
db.mongo.connections_per_host = 100
db.mongo.threads_multiplier = 5
Điều này dẫn đến 500 luồng có thể chờ kết nối mongo. Vì vậy, hãy nhớ rằng nhiều luồng hơn có thể có nghĩa là sử dụng CPU cao hơn vì CPU phải chuyển đổi ngữ cảnh giữa các luồng. Nó có thể cho phép thông lượng DB cao hơn, nhưng chỉ khi quá trình mongo có thể tiêu thụ nhiều CPU hơn để phục vụ các yêu cầu nhanh hơn.
Kết luận : Cách tốt nhất để tăng hiệu suất và cung cấp sự ổn định cho các cài đặt lớn là đảm bảo bạn có giám sát tài nguyên hệ thống của mình. Ngoài ra, các thực hành như giảm tải khối lượng công việc của cơ sở dữ liệu và tăng bộ nhớ có thể cho phép bộ điều khiển mạng UniFi phục vụ nhiều máy khách và thiết bị hơn. Điều này cần được phản ánh trong việc sử dụng tài nguyên và hiệu suất của UI bộ điều khiển mạng UniFi.