Access Hub Agent
Đồng bộ từ mã nguồn lúc 15:42, 03/10/2026
Skip to content
Quan hệ với ADR khác
  1. 0004 Windows dùng PDH với tên bộ đếm...Đang xem
  2. 0007 Bộ thu Windows dùng API trực...Thay một phần
ADR 0004Cần xác nhậnThay một phần ADR 0007

ADR 0004. Windows dùng PDH với tên bộ đếm tiếng Anh ​

Ngày quyết định
30/09/2026
Chấp nhận
30/09/2026
Phạm vi
Agent
Người chấp nhận
Chưa ghi
  1. Đề xuất30/09/2026
  2. Cần xác nhậncần xác nhận ở spike S1). Thay thế một phần bởi ADR 0007: CPU và mạng dùng API trực tiếp, PDH chỉ còn cho I/O đĩa và page file chính xác
  3. Chấp nhậnĐang chờ
  • Trạng thái: Đã chấp nhận (cần xác nhận ở spike S1). Thay thế một phần bởi ADR 0007: CPU và mạng dùng API trực tiếp, PDH chỉ còn cho I/O đĩa và page file chính xác
  • Ngày: 2026-09-30

Bối cảnh ​

Windows lưu chỉ số hiệu năng qua Performance Data Helper (PDH). Tên bộ đếm hiển thị được bản địa hóa (ví dụ tiếng Đức, Nhật, Việt), nên đường dẫn viết cứng bằng tiếng Anh sẽ lỗi trên hệ điều hành không phải tiếng Anh. WMI thì chậm và nặng hơn.

Quyết định ​

  • Dùng PDH qua golang.org/x/sys/windows (syscall trực tiếp, không CGO).
  • Luôn thêm bộ đếm bằng PdhAddEnglishCounter, không phụ thuộc ngôn ngữ giao diện.
  • Bộ đếm dạng tốc độ (bytes/sec, % time) cần hai lần lấy mẫu, mẫu đầu bị bỏ, khớp quy ước gauge của giao thức.
  • Với thứ có API trực tiếp, dùng API thay vì PDH: GlobalMemoryStatusEx (RAM), GetDiskFreeSpaceEx (đĩa), GetTickCount64 (uptime), GetExtendedTcpTable (port), Service Control Manager (dịch vụ). Giảm bề mặt phụ thuộc bộ đếm.
  • Quản lý vòng đời handle query: mở một lần, làm mới khi lỗi, đóng khi dừng, kiểm thử rò rỉ handle.
  • Khi bộ đếm hỏng (lỗi PDH_CSTATUS_NO_OBJECT, PDH_INVALID_DATA), bộ thu báo lỗi (agent_collector_errors), không làm dừng agent, thử khôi phục sau vài chu kỳ và ghi gợi ý lodctr /R.

Hệ quả ​

  • Hoạt động trên Windows đa ngôn ngữ (cần kiểm thử thực tế, spike S1).
  • Tài khoản dịch vụ phải thuộc Performance Monitor Users. MSI cấu hình khi cài.
  • Kết quả tải bộ xử lý hơi khác giữa các công cụ, ghi rõ trong catalog và chấp nhận sai số.
  • Không dùng WMI (tránh chậm, tránh tiến trình WmiPrvSE tốn CPU trên hàng nghìn máy).

Phương án đã cân nhắc ​

Phương ánLý do không chọn
WMI (Win32_PerfFormattedData)Chậm, tốn CPU, dễ hỏng repository WMI
Bộ đếm theo tên bản địa hóaLỗi trên hệ điều hành không phải tiếng Anh
gopsutil toàn bộ trên WindowsChấp nhận được ở vài chỉ số, nhưng kiểm soát kém về hai mẫu và handle. Đánh giá ở spike S5 và có thể dùng cho phần không nhạy
Trang này có giúp được bạn không?
Sửa trang này

Nội dung đồng bộ từ kho mã access-hub-agent lúc 15:42, 03/10/2026. Khi tài liệu và mã khác nhau, mã thắng.