Mam kilka procesów, które pochłaniają dużo czasu procesora systemowego (ustalonego na podstawie vmstat). Czy istnieje prosty sposób, aby dowiedzieć się, jakie są wywołania systemowe?
Wiem, że jest strace, ale czy istnieje szybszy i łatwiejszy sposób? Czy istnieje coś w rodzaju „góry” dla wywołań systemowych?
linux
performance
monitoring
central-processing-unit
strace
bajafresh4life
źródło
źródło
Odpowiedzi:
Myślę, że strace z
-c
flagą są prawdopodobnie najbliższe, jakie znam. Jeśli-c
flaga nie była używana , spróbuj tego:Gdzie 12345 jest identyfikatorem procesu (PID) danego procesu. Pamiętaj, że obrysowywanie procesu powoduje dodatkowe obciążenie, więc podczas śledzenia proces będzie działał wolniej.
Po uruchomieniu tego, niezależnie od tego, jak długo chcesz zbierać dane, naciśnij,
Ctrl-C
aby zatrzymać gromadzenie danych i wygenerować wyniki. Wyprodukuje coś takiego:Jak widać, jest to podział wszystkich wywołań systemowych wykonanych przez aplikację, posortowanych według całkowitego czasu, w tym średniego czasu na połączenie i liczby połączeń dla każdego połączenia systemowego. Jeśli chcesz posortować je inaczej, zajrzyj na stronę man strace, ponieważ jest kilka opcji.
źródło
Może wypróbuj jeden z profilerów próbkujących, taki jak oprofile lub dla nowszych jąder, perf. Jeśli masz szczęście, „perf top” może powiedzieć ci dokładnie, czego chcesz. Zobacz tutaj kilka przykładów
źródło
Oto typ przełączników strace, których zwykle używam.
strace -ffttT -p pid -o /tmp/strace.out
Przykładem może być:
Różnica czasu widoczna jest po prawej stronie wywołania systemowego, pokazując ile czasu zajęło przejście z jednego wywołania systemowego do drugiego.
Złapie różnicę czasu między wywołaniami systemowymi. Tak więc, gdy zobaczysz, że wywołanie systemowe ma kilka sekund przerwy w stosunku do następnego wywołania systemowego, wtedy robi hałas.
Inną metodą jest poradzenie sobie z gcore. Jednak wymaga to trochę doświadczenia w poruszaniu się po gdb.
Ale jeśli wątek jest wątkiem jądra, nie można go śledzić ani zrzucać. W takim przypadku musimy użyć czegoś bardziej złożonego. W jądrze RHEL5 używamy oprofile. W RHEL6 używamy perf. Wolę perf niż oprofile. Dane Perf mogą być gromadzone w formacie wykresu pokazującym wywołanie systemowe, w którym wykorzystywany jest maksymalny procent procesora.
Widzę to z testową wydajnością.
Pokazuje funkcję jądra, w której spędza się 38% czasu procesora. Teraz możemy sprawdzić funkcję i zobaczyć, co robi i co ma robić.
Z kilkoma przykładami nie jest to takie trudne.
źródło