2009-09-08 25 views
8

Ứng dụng của chúng tôi có ~ 10 chủ đề thực hiện các tác vụ riêng biệt (không có nhóm luồng). Chúng tôi không gặp phải bế tắc, nhưng luôn cố gắng giảm độ trễ để phản hồi yêu cầu, vì vậy chúng tôi quan tâm đến việc xác định khóa nào là bị tranh cãi nhất. jconsole cho thấy tần suất các luồng bị chặn, và nó không phải là rất thường xuyên, nhưng chúng ta vẫn muốn biết những khóa nào là bị khóa nhất.Xác định khóa nào được tranh luận nhiều nhất?

Chúng tôi đang chạy bằng Sun JVM, vì vậy JLA của IBM không hữu ích và chúng tôi không chạy trên Solaris nên chúng tôi không thể sử dụng dTrace.

CHỈNH SỬA: Tôi muốn thực hiện quan sát này trong sản xuất, nơi một trình hồ sơ sẽ làm chậm ứng dụng một cách không thể chấp nhận được. Đây là một hệ thống giao dịch, nếu chúng ta chậm, chúng ta mất tiền, vì vậy chúng tôi không chạy profilers trong sản xuất. Nó cũng là khá khó để mô phỏng nhiều trao đổi, chúng tôi nói chuyện trong một bài kiểm tra hiệu suất.

+0

dTrace là hệ thống duy nhất mà cá nhân tôi biết về điều đó thực hiện những gì bạn muốn mà không cần công cụ lược tả. – aperkins

+0

Suy nghĩ thêm về điều này, tôi cảm thấy thiết bị đo đạc là cách tiếp cận tốt nhất. Bạn có thể đăng nhập yêu cầu khóa cá nhân hoặc giữ các bộ đếm toàn cầu. –

Trả lời

7

Nhận hồ sơ tốt như YourKit. Nó có thể cho bạn biết bao nhiêu thời gian được chi tiêu chờ đợi và ngăn chặn trên các phương pháp cụ thể và màn hình đối tượng chứa trong đó. Ví dụ:

alt text http://i25.tinypic.com/j8ocbm.jpg


Liên quan đến bình luận của bạn về số liệu sản xuất, bạn đang khá hạn chế đến những gì bạn có thể thu thập. Hầu hết các thông tin bạn sẽ nhận được là từ ThreadMXBean có thể cung cấp cho bạn siêu dữ liệu về tất cả các chuỗi đang chạy. Nó sẽ không cung cấp cho bạn thông tin về sự tranh chấp của một màn hình đối tượng cụ thể mặc dù.

Tôi không muốn lên tháp ngà ở đây nhưng tôi thực sự cảm thấy rằng đặt cược tốt nhất của bạn là cố gắng tái tạo môi trường sản xuất của bạn càng gần càng tốt. Chi tiêu một số thời gian nhận được rằng thiết lập bây giờ sẽ trả cổ tức nhiều lần trong tương lai.

Ngay cả khi chạy hồ sơ với môi trường mô phỏng nhưng không đủ tốt có thể sẽ cung cấp cho bạn thông tin tốt.

+0

JProfiler có chức năng tương tự. Nhưng tôi muốn làm điều này quan sát trong sản xuất, nơi một hồ sơ sẽ làm chậm các ứng dụng không thể chấp nhận. Đây là một hệ thống giao dịch, nếu chúng ta chậm, chúng ta mất tiền, vì vậy chúng tôi không chạy profilers trong sản xuất. Nó cũng là khá khó để mô phỏng nhiều trao đổi, chúng tôi nói chuyện trong một môi trường thử nghiệm hiệu suất. –

+0

@Ted, tôi sẽ chỉnh sửa câu hỏi của bạn để thêm thông tin đó vì nó làm thay đổi đáng kể những gì bạn có thể và không thể làm. – Kevin

+0

Cảm ơn Kevin, đã chỉnh sửa. Chúng tôi có một môi trường thử nghiệm hiệu suất rất hữu ích trong quá khứ, nhưng tôi nghĩ hầu hết các cửa hàng tài chính tần suất cao đã quyết định dành quá nhiều thời gian để mô phỏng thế giới thực không hiệu quả. Tôi sẽ tìm kiếm một giao dịch mà chúng tôi có thể chạy một hồ sơ trong sản xuất mà không có quá nhiều thiệt hại. –

4

Đối với vấn đề tương tự trong cơ sở dữ liệu, chúng tôi đăng nhập một dòng ngay trước khi yêu cầu và ngay sau khi có khóa. Chúng tôi cũng đăng nhập một sau khi phát hành. Sau đó, chúng tôi xử lý dữ liệu này để tạo loại thống kê bạn đang tìm kiếm.

EDIT: Trên đầu trang của một hệ thống được phát triển, AspectJ có thể là một tùy chọn tốt để tạo nhật ký.

5

Ted, tôi thông cảm với tình huống của bạn, nhưng khi hiệu suất là quan trọng, tôi khuyên bạn nên cắn viên đạn và mô phỏng.

Nó không khó như bạn sợ: thay vì cố gắng tạo luồng thông điệp từ các trao đổi của bạn, tại sao không ghi lại luồng vào và phát lại nó trên mô phỏng?

Không có thứ gì như thế này, bạn sẽ luôn gặp phải sự cố Heisenberg: ảnh hưởng đến hệ thống bạn đang đo.

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