Posiadam długo działający serwer twisted.Profilowanie długo działającego serwera Pythona
W dużym teście systemowym, w jednym konkretnym punkcie kilka minut po teście, kiedy niektórzy klienci wchodzą w konkretny stan i zdarza się określone zdarzenie zewnętrzne, następnie ten serwer zajmuje kilka minut 100% procesora i wykonuje swoją pracę bardzo powoli. Chciałbym wiedzieć, co robi.
Jak uzyskać profil dla określonego przedziału czasu na serwerze z długim czasem działania?
Mogę łatwo wysyłać komunikaty o uruchomieniu i zatrzymaniu serwera przez HTTP, jeśli istnieje sposób na włączenie lub wstrzyknięcie profilera w czasie wykonywania?
Zależnie od wyboru, chciałbym profilować stack-based/call-graph, ale nawet próbkowanie liści może dać wgląd.
Czy możesz zrobić te rzeczy w procesie Pythona, który działa, bez zatrzymywania go? –
Pewnie. Musi być na to przygotowany. W Pythonie po prostu wywołaj 'sys.settrace (bla)', a funkcja 'bla()' zostanie wywołana dla praktycznie wszystkiego, co się dzieje (wywoływanie funkcji, wykonywanie linii itp.). Debugery i profilery zazwyczaj polegają na tym mechanizmie. Ale jest dość proste, aby coś na tym zbudować, a następnie przygotować się do włączenia go po otrzymaniu specjalnej wiadomości HTTP. – Alfe