Z biegiem czasu moje zużycie pamięci rośnie, a ponowne uruchamianie Django nie jest miłe dla użytkowników.
Nie jestem pewien, jak zająć się profilowaniem użycia pamięci, ale przydatne byłyby kilka wskazówek, jak rozpocząć pomiar.
Mam wrażenie, że jest kilka prostych kroków, które mogą przynieść duże korzyści. Zapewnienie ustawienia „debugowania” na „Fałsz” jest oczywistym problemem.
Czy ktoś może zasugerować innym? Jak dużo ulepszyłoby buforowanie w witrynach o małym ruchu?
W tym przypadku pracuję pod Apache 2.x z mod_python. Słyszałem, że mod_wsgi jest nieco szczuplejszy, ale trudno byłoby go zmienić na tym etapie, chyba że wiem, że korzyści byłyby znaczące.
Edycja: Dzięki za dotychczasowe wskazówki. Jakieś sugestie, jak odkryć, co zużywa pamięć? Czy są jakieś przewodniki po profilowaniu pamięci w języku Python?
Jak wspomniano, jest kilka rzeczy, które utrudnią przejście na mod_wsgi, więc chciałbym mieć pojęcie o korzyściach, których mogę się spodziewać, zanim zacznę orać w tym kierunku.
Edycja: Carl zamieścił tutaj nieco bardziej szczegółową odpowiedź, którą warto przeczytać: Django Deployment: Cutting Apache's Overhead
Edycja: artykuł Grahama Dumpletona jest najlepszym, jaki znalazłem w sprawach związanych z MPM i mod_wsgi. Jestem raczej rozczarowany, że nikt nie mógł podać żadnych informacji na temat debugowania użycia pamięci w samej aplikacji.
Ostateczna edycja : Cóż, omawiałem to z Webfaction, aby sprawdzić, czy mogą pomóc w ponownej kompilacji Apache, a to jest ich słowo w tej sprawie:
„Naprawdę nie sądzę, abyś odniósł wiele korzyści, przełączając się na konfigurację MPM Worker + mod_wsgi. Szacuję, że możesz zaoszczędzić około 20 MB, ale prawdopodobnie niewiele więcej niż to”.
Więc! To prowadzi mnie z powrotem do mojego pierwotnego pytania (o którym nadal nie jestem mądrzejszy). Jak należy zidentyfikować, gdzie leżą problemy? Jest to dobrze znana maksyma, że nie optymalizuje się bez testowania, aby zobaczyć, gdzie trzeba ją zoptymalizować, ale jest bardzo niewiele tutoriali na temat pomiaru wykorzystania pamięci w Pythonie i nie ma ich w ogóle specyficznych dla Django.
Dziękuję wszystkim za pomoc, ale myślę, że to pytanie jest nadal otwarte!
Kolejna ostatnia edycja ;-)
Zapytałem o to na liście użytkowników django i otrzymałem kilka bardzo pomocnych odpowiedzi
Szczerze mówiąc, ostatnia aktualizacja w historii!
To właśnie zostało wydane. To może być najlepsze jak dotąd rozwiązanie: Profilowanie rozmiaru obiektu Django i użycia pamięci za pomocą Pymplera