2012-05-10 37 views
10

Tôi đang cố gắng để tìm ra nếu có một thư viện mà mang lại cho tôi một cái gì đó gần tương đương của Windows đếm hiệu suất tùy chỉnh (mô tả ở đây http://geekswithblogs.net/.NETonMyMind/archive/2006/08/20/88549.aspx)Quầy ứng dụng trong Linux? (Và OSX?)

Về cơ bản, tôi đang tìm kiếm cái gì đó có thể được sử dụng để theo dõi toàn bộ các quầy trong một ứng dụng, và (lý tưởng) một cái gì đó trình bày thông tin đó thông qua một giao diện được xác định rõ ràng cho các ứng dụng/người dùng khác. Đây là số liệu thống kê ứng dụng; những thứ như bộ nhớ và đĩa có thể được ghi lại theo những cách khác, nhưng tôi đang tìm cách phơi bày thông lượng/giao dịch/"widget" được xử lý trong suốt thời gian tồn tại của ứng dụng của tôi.

Tôi đã nhìn thấy câu hỏi này:

Concept of "Performance Counters" in Linux/Unix

và điều này một

Registry level counters in Linux accessible from Java

nhưng không phải là hoàn toàn những gì tôi đang tìm kiếm. Tôi không muốn viết một tập tin tĩnh (đây là thông tin động sau khi tất cả; tôi sẽ có thể nhận được nó ngay cả khi đĩa là đầy đủ vv), và thay vì sẽ tránh một bộ mã nguồn trong nước nếu có thể. Lý tưởng nhất, ít nhất là trên Linux, dữ liệu này (tôi nghĩ) được hiển thị thông qua/proc theo cách nào đó, mặc dù nó không rõ ràng với tôi nếu điều đó có thể được thực hiện từ userland (điều này ít quan trọng hơn, miễn là nó xuất hiện trong một số Cách để khách hàng.)

Nhưng trở lại điểm mấu chốt của câu hỏi: có thư viện bên thứ ba tích hợp hoặc phù hợp cung cấp cho tôi các bộ đếm toàn cầu (thread-safe, performant) tùy chỉnh cho các chỉ số ứng dụng mà tôi có thể sử dụng trên Linux và hệ điều hành khác * NIXy? (Và có thể được giao tiếp từ C/C++?)

+2

Được tìm kiếm giống nhau, tôi đã không tìm thấy bất kỳ cho đến nay. Cách dễ nhất đối với tôi là phơi bày các quầy ứng dụng trong một phân đoạn bộ nhớ dùng chung. Với cấu trúc tiêu chuẩn của các bộ đếm như vậy, thật dễ dàng trên linux để đi qua chúng bên ngoài bằng cách tìm trong/dev/shm /. Phơi bày chúng thông qua/proc có lẽ sẽ đẹp hơn - miễn là ứng dụng không phải làm syscalls để cập nhật chúng. – user964970

+1

Bộ đếm hiệu suất của Windows không phải là chức năng hạt nhân. Chúng được thực hiện như một API với một thư viện ứng dụng được chia sẻ (.dll) cung cấp quyền truy cập vào các bộ đếm. Các quầy, lần lượt, thường được thực hiện như các đối tượng bộ nhớ chia sẻ được ứng dụng tiếp xúc. Bằng cách này, chúng hầu như không tốn chi phí để cập nhật, và có một cách ứng dụng cụ thể để giải thích chúng. Không nên có bất kỳ nhu cầu cho/proc hội nhập. Có lẽ trình xem Argus có thể được sử dụng cho các ứng dụng không phải Java (http://sourceforge.net/projects/argusjmx) trong Linux, mặc dù tiền tệ của đặc tả JMX không rõ ràng. – Pekka

Trả lời

0

Ngoài @user964970 nhận xét/giải pháp, tôi đề nghị làm cho hệ điều hành trở nên bất khả tri.

Sử dụng API không phụ thuộc vào hệ điều hành, như ACE hoặc BOOST, để tạo thư viện của riêng bạn, cung cấp bộ đếm được bảo vệ bằng tên-semaphore, được đặt bên trong phân đoạn bộ nhớ được chia sẻ.

này cần được thư viện của bạn API:

long * createCounter(const char * name); // Create a counter 
             // Will create a named semaphore and a named 
             // shared memory segment, holding the counter  
             // value. Will return pointer to counter 
long * getCounter(const char * name); // Get existing counter pointer 
             // in the calling process' address space 
long incCounter(const char * name); // increment existing counter 
Các vấn đề liên quan