Đối với một phân khúc cụ thể của mã Java, tôi muốn để đo:Đo Java thời gian thực hiện, sử dụng bộ nhớ và CPU cho một đoạn mã
- Execution time (hầu hết thời gian thực hiện chủ đề)
- Memory sử dụng
- CPU tải (cụ thể là do đoạn mã)
Tôi là người mới sử dụng Java tương đối và không quen với cách thức này có thể đạt được. Tôi đã được giới thiệu đến JMX, tuy nhiên tôi không chắc chắn làm thế nào mà có thể được sử dụng, và JMX trông hơi 'nặng' cho những gì tôi đang tìm kiếm để làm.
Lý tưởng nhất là tôi muốn một số lớp đo lường có thể được cho biết những gì tôi muốn đo, với tùy chọn gọi phương thức start()
trước phân đoạn mã và sau đó là phương thức stop()
. Số liệu có liên quan sẽ được ghi vào tệp tôi chỉ định.
Ví dụ:
import com.example.metricLogger;
metricLogger logger = new metricLogger();
logger.setLogPath(pathToLogFile);
logger.monitor(executionTime);
logger.monitor(memoryUsage);
logger.monitor(cpuLoad);
logger.start();
/* Code to be measured */
logger.stop();
Có bất kỳ tiêu chuẩn/common/cách thông thường để đạt được điều này trong Java?
Đo lường như vậy là để so sánh hiệu suất một lần và vì vậy tôi không tìm kiếm bất kỳ quy trình giám sát dài hạn trong sản xuất nào.
Tôi rất vui khi được giới thiệu đến các hướng dẫn hoặc ví dụ bên ngoài và không mong đợi câu trả lời đầy đủ tại đây. Điều đó nói rằng, nếu bất cứ điều gì đơn giản như trên có thể đạt được một ví dụ thực tế sẽ đi xuống thực sự tốt.
Kết quả đo lường có thể bao gồm thời gian thu gom rác, thời gian dành cho trình biên dịch JIT. trong hệ điều hành do các quá trình khác, thời gian thực hiện bởi các quá trình khác, hoặc thời gian thực hiện "phân đoạn giám sát" có thể là hai đơn đặt hàng nhỏ hơn thời gian để gọi 'nanoTime()'. Chỉ vì 'nanoTime()' trả về nano giây không có nghĩa là độ phân giải quá cao. – jmg
OP cũng yêu cầu đo mức sử dụng bộ nhớ. Những profilers đó có thể đo lường điều đó không? (Tôi nghi ngờ không) – Raedwald