2009-04-17 10 views
6

Mam proces python (Pylons webapp), która jest stale przy użyciu 10-30% CPU. Poprawię/dostroję rejestrowanie, aby uzyskać wgląd w to, co się dzieje, ale do tego czasu, czy są jakieś narzędzia/techniki, które pozwalają zobaczyć, co robi proces Pythona, ile i jak bardzo wątki mają itd.?Badanie procesu Pythona, aby zobaczyć, co się jedzenia CPU

Aktualizacja:

  • skonfigurowany dostęp do dziennika, który pokazuje, że nie istnieją żadne wnioski dzieje, webapp jest tylko na biegu jałowym
  • sensu podłączyć paste.profile w łańcuchu middleware ponieważ nie istnieją żadne wnioski działalność musi się dziać zarówno w wątków roboczych webapp lub pastowania serwer WWW
  • bieg naklejka jak ten: „python -m cProfile -o plik_wy/usr/bin/naklejka służyć dev.ini” i sprawdzania wyników pokazuje, że większość czasu spędza w "posix.waitpid". Paster biegnie webapp w podproces, aktywność podproces nie jest odbierane przez profilera
  • patrząc; hacking PasteScript „służyć” polecenia, tak aby podprocesów dostanie profilowane

Kolejna zmiana:

Po wielu majsterkowania , przyklejania profilera w różnych miejscach i poznania wnętrza PasteScript, odkryłem, że stałe obciążenie CPU odchodzi jeśli aplikacja jest uruchomiona bez parametru „--reload” (ta flaga mówi pastowania, aby ponownie się, czy zmiany w kodzie, poręczny w rozwoju), co jest dobre w środowisku produkcyjnym.

+1

Jaki system operacyjny? – mavnn

Odpowiedz

7

Profiling może pomóc nauczyć się trochę, co robi. Jeśli sortujesz dane wyjściowe według "czasu", zobaczysz, które funkcje zajmują się czasem procesora, co powinno dać ci kilka dobrych wskazówek.

6

Jak można zauważyć, w trybie --reload, Wklej wymiata co drugi system plików, aby sprawdzić, czy któryś z plików załadowanych uległy zmianie. Jeśli tak, to polecenie Wklej ponownie załaduje proces. Możesz również ręcznie powiedzieć Paste, aby monitorował moduły kodu niezgodne z Pythonem w razie potrzeby.

Możesz zmienić czas przeładowania za pomocą opcji --reload-interval, to zmniejszy użycie procesora, gdy użyjesz opcji --reload, ponieważ będzie ono rzadziej się zmieniać.