13

Tôi đang cố gắng tạo load test cho một số ứng dụng. Và tôi muốn sử dụng bộ nhớ chỉ cho quy trình đăng ký của tôi. Để làm như vậy tôi đã thêm Process/Working Set, phản công nhanh của tôi thiết lậpKiểm tra tải không hiển thị nhiều hơn 4GB cho Bộ làm việc PerformanceCounter

enter image description here

Vấn đề là Working SetPerformanceCounter đọc các giá trị trong byte và không đếm giá trị hơn 4294967296 đó tương đương với 4 GB

enter image description here

Nhưng ứng dụng của tôi "chạy ở chế độ 64 bit" sử dụng hơn 4 GB bộ nhớ
Rõ ràng từ TaskManager Tôi thấy rằng nó mất khoảng 6GB nhưng giá trị này không xuất hiện trong thử nghiệm tải Graph.

Vậy làm thế nào để tạo ra tùy chỉnh PerformanceCounter hành động giống hệt như Process/Working Set một nhưng sử dụng Kilobytes thay vì byte tôi có thể nhận được giá trị thực. Hoặc bất kỳ giải pháp nào khác cho phép tôi tính toán số lượng ứng dụng của tôi sử dụng bộ nhớ trong thử nghiệm tải.

+0

Tại sao không chỉ lấy đầu ra của giá trị bình thường và chia cho '2 << 10' –

+0

Tôi không đọc giá trị theo chương trình. Tôi chỉ sử dụng bộ đếm trong kiểm tra tải –

+0

Bạn có thể tạo các bộ đếm của riêng mình cung cấp chính xác giá trị bạn muốn. Microsoft có các trang về cách tạo các bộ đếm hiệu suất tùy chỉnh. – AdrianHHH

Trả lời

4

Tôi đã tìm được giải pháp. Cảm ơn tất cả các ý kiến ​​của bạn, tất cả chúng đều rất hữu ích.

Bước đầu tiên là cài đặt mới PerformanceCounterCategory chỉ là điều quan trọng nhất thường là để thiết lập nó như PerformanceCounterCategoryType.MultiInstance ví dụ

var countersToCreate = new CounterCreationDataCollection(); 
var memoryCounterData = new CounterCreationData("Memory Usage", "Memory Usage", PerformanceCounterType.NumberOfItems64); 
countersToCreate.Add(memoryCounterData); 
PerformanceCounterCategory.Create("KB Memory Usage", "KB Memory Usage", PerformanceCounterCategoryType.MultiInstance, countersToCreate); 

Bước tiếp theo là phải có cửa sổ đơn giản dịch vụ hoặc giao diện điều khiển ứng dụng mà nên đọc các giá trị cho mỗi quá trình từ process.WorkingSet64 và đặt chúng vào PerformanceCounter của bạn. Ứng dụng hoặc Dịch vụ này sẽ chạy trong khi bạn đang chạy thử nghiệm tải của mình và tất nhiên ở chế độ x64. ví dụ:

static void Main(string[] args) 
{ 
    while (true) 
    { 
     Thread.Sleep(500); 
     foreach (var process in Process.GetProcesses()) 
     { 
      var memoryUsage = new PerformanceCounter("KB Memory Usage", "Memory Usage", process.ProcessName, false); 
      memoryUsage.RawValue = process.WorkingSet64/1024; 
     } 
    } 
} 
0

Theo tài liệu của PerformanceCounter.RawValue Property:

Nếu loại truy cập là một kích thước 32-bit và bạn cố gắng để thiết lập thuộc tính này cho một giá trị quá lớn để phù hợp, tài sản truncates giá trị đến 32 bit.

Vì vậy, bạn phải sử dụng đúng PerformanceCounterType (các giá trị này, được gắn liền với 64).

+5

Bỏ phiếu xuống mà không để lại bất kỳ bình luận nào chưa bao giờ hữu ích cho bất cứ ai. Kính thưa các bạn, xin hãy tử tế và giải thích cho tôi những gì bạn không thích về gợi ý của tôi. Cảm ơn. –

Các vấn đề liên quan