Mam aplikację Java (opartą na Internecie), która czasami wykazuje bardzo wysokie wykorzystanie procesora (prawie 90%) przez kilka godzin. Komenda Linux TOP
pokazuje to. Po ponownym uruchomieniu aplikacji problem znika.Wysokie wykorzystanie procesora w aplikacji java - dlaczego?
więc zbadać:
biorę zrzutu wątku, aby znaleźć to, co robią wątki. Kilka wątków znajduje się w stanie 'RUNNABLE'
, niektóre w kilku innych stanach. Wykonując powtarzające się zrzuty wątków, widzę pewne wątki, które są zawsze obecne w stanie 'RUNNABLE'
. Wydaje się, że są winowajcami.
Ale nie jestem w stanie stwierdzić z całą pewnością, który wątek przerywa procesor lub wszedł w nieskończoną pętlę (powodując w ten sposób wysoki pobór mocy procesora).
Logi niekoniecznie pomagają, ponieważ kolidujący kod może się nie rejestrować.
Jak zbadać - Jaka część aplikacji lub jakiego wątku powoduje wysokie wykorzystanie procesora? - Jakieś inne pomysły?
Czy już próbować profilera? – andreapier
Twoje zrzuty nici powinny również pokazywać, gdzie w kodzie są te wątki Runnable podczas zrzutu. Musisz zajrzeć tam w swoim kodzie. Wątki IIRC "działające" mogą czekać na I/O i nie zajmują CPU, ale jest wcześnie i nadal karmię swoją kawę. –
andreapier> Chociaż może nie być możliwe użycie Profiler w środowisku Prod, ale czy Profiler powie, który wątek wyłapuje procesor? – Jasper