Analizuję różnice między podejściami do wykonywania zrzutów wątków. Poniżej znajduje się kilka z nich badam naWykonywanie zrzutów wątków w produkcji
Definiowanie fasoli JMX, który wyzwala jstack przez Runtime.exec() na kliknięcie deklarowaną operację Bean.
Wątek demona wykonujący "ManagementFactory.getThreadMXBean(). DumpAllThreads (true, true)" wielokrotnie po zdefiniowanym przedziale.
Porównując wyjścia gwint przegubowe pomiędzy dwoma widzę poniższych wad ze stanowiskiem 2
- zrzuty wątku rejestrowane z podejściem 2 nie może być przetwarzany przez open source analizatorów gwint zrzutu jak TDA
- Plik wyjściowy nie zawiera natywnego identyfikatora wątku, który może być przydatny w analizowaniu problemów wysokiego cpu (prawda?)
- Dosyć?
Byłbym wdzięczny, aby uzyskać sugestie/wejść na
Czy są jakieś wady wykonywania jstack przez Runtime.exec() w kodzie produkcyjnym? wszelkie problemy ze zgodnością w różnych systemach operacyjnych - Windows, Linux?
Jakieś inne podejście do wykonywania zrzutów wątków?
Dziękuję.
Edit -
połączonego stosowania z 1 i 2 wydaje się być droga. Możemy mieć dedykowany wątek działający w tle i drukować zrzuty wątków w pliku dziennika w formacie zrozumiałym dla analizatorów zrzutów wątków. Jeśli są jakieś dodatkowe informacje (np. Prawdopodobnie natywny identyfikator wątku), które są rejestrowane tylko przez wyjście jstack, robimy to ręcznie w razie potrzeby.
Czy jest to związane z aplikacją JEE? –
@WaleedMadanat Tak –