dla konkretnego segmentu kodu Java, chciałbym zmierzyć:Mierzenie czasu wykonania, użycie pamięci Java i obciążenie procesora dla segmentu kodu
- czas wykonywania (najprawdopodobniej czas realizacji wątek)
- użycie pamięci
- obciążenie procesora (konkretnie przypisane do segmentu kodu)
Jestem względną nowicjuszką w Javie i nie wiem, jak można to osiągnąć. Zostałem skierowany do JMX, jednak nie jestem pewien, w jaki sposób można go użyć, a JMX wygląda trochę "ciężko" na to, co chcę zrobić.
Idealnie chciałbym niektórych klasy pomiarowej, które można powiedzieć, co chciałbym zmierzyć, z możliwością wywołania metody start()
przed segmentem kodu i po stop()
metoda. Istotne dane zostaną zarejestrowane w pliku, który podaję.
Na przykład:
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();
Czy istnieje jakiś standard/common/konwencjonalnym sposobem osiągnięcia tego celu w Java?
Takie pomiary służą do jednorazowych porównań wydajności, dlatego nie szukam żadnych długotrwałych procesów monitorowania w trakcie produkcji.
Jestem bardziej niż szczęśliwy, mogąc być odsyłanym do samouczków lub przykładów zewnętrznych i nie oczekuję pełnej odpowiedzi tutaj. To powiedziawszy, jeśli można osiągnąć coś tak prostego, jak powyższe, realistyczny przykład mógłby się bardzo dobrze skończyć.
Wyniki pomiarów mogą obejmować czas czyszczenia pamięci, czas spędzony w kompilatorze JIT, czas spędzony w systemie operacyjnym z powodu innych procesów czas spędzony przez inne procesy lub czas wykonania "segmentu do monitorowania" może wynosić dwa rzędy o mniej niż czas na wywołanie 'nanoTime()'. Tylko dlatego, że 'nanoTime()' zwraca nano sekund nie oznacza, że rozdzielczość jest tak wysoka. – jmg
OP również poprosił o zmierzenie użycia pamięci. Czy te profilery mogą to zmierzyć? (Podejrzewam, że nie) – Raedwald