Mam problem z Apache2 (na Ubuntu srv) na którym postawiłem aplikację Django. Problem polega na tym, że użycie pamięci rośnie przy każdym odświeżeniu strony (o 0,4%) i nigdy nie spada (apache2.jpg). W konsekwencji pamięć się całkowicie zapełnia i serwer się wykrzacza. Nie mam doświadczenia z takimi wdrożeniami więc nie wiem gdzie szukać problemu. Aplikacja Django na pewno nie jest optymalna - np. jeden z widoków generuje obrazek przy każdym odświeżeniu ale czy to może być przyczyna ciągłego przyrostu pamięci?
@soma115: ale, że modpython? Ktoś z tego realnie korzysta? ( ͡°͜ʖ͡°)
Użyj nginx + gunicorn jak człowiek, lub nginx + uwsgi.
A co do problemu: możliwości tak wiele jak komputerów na świecie. Może to być bug w konkretnej wersji Pythona, w konkretnej wersji Apache, w konkretnej wersji modpython, lub w niekorzystnym połączeniu którychś z wymienionych…
@Ilythiiri: No dobra - wychodzi na to, że chyba nie jest wina Apache bo jak odpalam to na środowisku developerskim to zachowuje się podobnie (odtworzyłem warunki). No to już trochę inna bajka - python/django rośna przy każdym odświeżeniu. Będę szukał w tym kierunku. Dzięki za pomoc w zdaniu sobie z tego sprawy.
@soma115: Automatyczne zarządzanie pamięcią (w językach takich jak Java, C# czy Python) polega na tym ,że obiekty które utraciły referencję (tzw. nie prowadzi do nich żadna zmienna, ani nie są częścią zmiennej do której prowadzi inna zmienna) są mówiąc krótko wyjebywane z pamięci.
Jeśli w Pythonie masz "wyciek pamięci" (memory leak) to prawdopodobnie trzymasz referencje do obiektów cały czas. Np. w globalnej tablicy albo wewnątrz innego obiektu trzymasz referencję do
@Ilythiiri: Ok, poduczę się w tym temacie, dzięki. Czy znasz jeszcze inną możliwą przyczynę ciągłego wzrostu ilości pamięci? Pytam bo w moim projekcie właściwie nie ma obiektów (tworzonych przezemnie).
@soma115: Apka jest napisana pod pythona2 czy 3? Jeżeli 2 to tam każdorazowy zaalokowany integer nigdy nie zostaje usunięty. Tylko przy każdej zmianie wartości zmiennej owy int jest deklarowany na nowo. W pythonie3 ten "ficzer" został poprawiony.
#rosja #wojna #ukraina Ale trzeba przyznać to, że nawet jak Rosją przegra ta wojnę, w co szczerze wątpię, to i tak prawdę mówiąc walczyła przeciwko całemu Arsenalowi NATO, a nie tylko jednemu krajowi ukrainie, co potwierdza tezę o tym, że jednak jest jedną z silniejszych armii świata..
Nie mam doświadczenia z takimi wdrożeniami więc nie wiem gdzie szukać problemu. Aplikacja Django na pewno nie jest optymalna - np. jeden z widoków generuje obrazek przy każdym odświeżeniu ale czy to może być przyczyna ciągłego przyrostu pamięci?
Konfiguracja Apache jest konserwatywna:
StartServers 2
MinSpareThreads 1
MaxSpareThreads 2
ThreadLimit 32
ThreadsPerChild 16
MaxRequestWorkers 16
MaxConnectionsPerChild 4
Zmiana mpm nie zmienia sytuacji.
Ma ktoś pomysł co sprawdzić? Gdzie szukać problemu?
#apache #apache2 #django #djangoframework #python
źródło: comment_cvXDLb2OEYd3jc5ctAhgtBFP266oj7RS.jpg
PobierzKomentarz usunięty przez autora
Użyj nginx + gunicorn jak człowiek, lub nginx + uwsgi.
A co do problemu: możliwości tak wiele jak komputerów na świecie. Może to być bug w konkretnej wersji Pythona, w konkretnej wersji Apache, w konkretnej wersji modpython, lub w niekorzystnym połączeniu którychś z wymienionych…
Nie wiem co pokazać żeby przeanalizować...
Było użyć nginxa… ( ͡° ͜ʖ ͡°) On mi żre 12M RAM przy ponad 100 domenach i wszystkie lecą po wsgi, kilka z nich (<5) po uwsgi.
Jeśli w Pythonie masz "wyciek pamięci" (memory leak) to prawdopodobnie trzymasz referencje do obiektów cały czas. Np. w globalnej tablicy albo wewnątrz innego obiektu trzymasz referencję do