Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Witam,
w końcu miarka się przebrała i postanowiłem rozwiązać ten problem..
Od dłuższego czasu mam problem z przepełnieniem RAMu na kupionym serwerze VPS (niestety dostawca jakoś też nie potrafi sobie z tym poradzić więc postanowiłem sam zabrać się za konfiguracje.. niestety wiedzy trochę mi brakuje i szukam jej u bardziej doświadczonych osób.. :) )
[b]Dane wejściowe[/b]
Serwer dysponuje 1GB pamięci RAM (Debian 6 Minimal). Służy wyłącznie do utrzymywania stron WWW - jest ich w sumie 5 ( z czego dwie stanowią 90% ruchu, który jest na poziomie 200 userów dziennie.. czyli liczba znikoma..).
[b]
Problem[/b]
Około co 2-3 dni muszę z panelu VM robić restart serwera po to aby RAM został wyczyszczony.. (bo przez te dwa dni RAM całkowicie się zapycha i nawet przez ssh nie można się połączyć do serwera..)..
Czmy może być to spowodowane ? Dodam jeszcze, że na serwerze jest postawiona strona oparta o silnik WordPress oraz strona oparta o dość popularny skrypt katalogu stron (SEOKatalog).
Zrobiłem właśnie update systemu i może to rozwiąże problem (chodź troche to wydaje się łudzące..). Myślałem może o zainstalowaniu jakiegoś skryptu, który np. przy zapełnieniu ~90% RAMu automatycznie czyściłby pamięć, ale powiem szczerze, że nie wiem jak takowy skrypt miałby wyglądać, i czy w ogóle jest to dobre rozwiązanie tego problemu..
Podrzucam jeszcze link do wyników dla zapytania htop.. (po 10 minutach od restartu serwera..) :: [url=http://oi44.tinypic.com/5nky7l.jpg][i]ZRZUT[/i][/url]
Pozdrawiam i czekam na Waszą pomoc :)
Michał
Offline
Tymczasowo stwórz swap'a i zobacz jak to będzie działać. Czy masz możliwość dołożenia pamięci?
//
Nie znam się na serwerowych sprawach, ale równie dobrze możesz zarzucić skrypt, który maszynę będzie raz dziennie w godzinach nocnych restartował.
Ostatnio edytowany przez PavloAkaLogan (2013-05-26 13:06:23)
Offline
Ogólnie to ja na linuksach to się słabo znam.. (i stąd m.in. ten wątek..). RAMu pewnie mógłbym "dołożyć" (czyli zwiększyć pakiet dopłacając kasy, ale myślę, że to nie jest dobre rozwiązanie tego problemu..).
Co to znaczy tymczasowo stworzyć swap ? (wiem, że normalnie to się tworzy np. przy instalacji jako powierzchnie do stronnicowania..). Ogólnie nie wiem czy miałbym taką możliwość bo jest to serwer utworzony podajrze na OpenVZ..)
Z tym restartowaniem to być może będę musiał to tak rozwiązać.. chodź wydaje m się, że to również nie rozwiązuje poprawnie problemu .. wcześniej mając te same strony na hostingu współdzielonym nie było żadnych problemów.. Czy mogę do tego wykorzystać crontab ?
Offline
Wywal apache w cholere. Tutaj jest opis jak ustawić nginx żeby działał z wordpress: http://michal.durys.pl/2013/03/serwer-na-debianie-nginx-php-i-bazy-danych/
Offline
@mati75 - tak, ale są dwa pytania..
1) Czy to rozwiąże mój problem?
2) Wordpress ok, ale co z innymi stronami?
Offline
Co jest w logach? Czy jesteś w stanie stwierdzić co dokładnie pożera całą pamięć? Nie wiedząc co jest przyczyną problemu trudno znaleźć rozwiązanie ;). W Linuksie jest taki mechanizm który nazywa się oom (out of memory killer). Gdy brakuje pamięci zaczyna losowo ubijać procesy - z sshd włącznie. Jego działanie powinno być widoczne w logach. O ile problem faktycznie wynika z braku pamięci.
Mati - jak sąsiad narzeka na forda sugerujesz mu zmianę na mercedesa? ;)
Ostatnio edytowany przez bobycob (2013-05-27 00:38:53)
Offline
Ja radzę zainteresować sie cgroup.memory, albo jakimś innym ograniczenoem, np ulimit, albo softlimit (z pakietu daemon-tools).
I przy okazji zobaczyć, co ma wyciek pamięci, bo samo zjawisko normalne nie jest.
Offline
@bobycob - a możesz podpowiedzieć gdzie te logi znaleźć? (niestety z linuxem to jestem na bakier, a chciałbym jakoś wyeliminować ten problem)
@Jacekalex - jak mogę zlokalizować ten wyciek pamięci ? (właśnie przez wspomniane logi?)
Offline
Wszystkie logi są w /var/log - nietrudno odnieść wrażenie, że nawet nie próbowałeś sam znaleźć rozwiązania. Nie wspominając o podstawach zarządzania serwerem którym władasz.
Offline
[quote=bobycob]Mati - jak sąsiad narzeka na forda sugerujesz mu zmianę na mercedesa? ;)[/quote]
Apache w normalnej (lamerskiej) konfiguracji na vps się nie nadaje.
Offline
[quote=mikajlo]@bobycob - a możesz podpowiedzieć gdzie te logi znaleźć? (niestety z linuxem to jestem na bakier, a chciałbym jakoś wyeliminować ten problem)
@Jacekalex - jak mogę zlokalizować ten wyciek pamięci ? (właśnie przez wspomniane logi?)[/quote]
Sprawdzić?
http://jacekalex.sh.dug.net.pl/psmem
Z Linuxem na bakier? stare przysłowie powiada:
"jak nie potrafisz, nie pchaj się a afisz".
Offline
Dzieki za podesłane linki..
Ale dzięki Wam zrozumiałem, że pozostaje mi zaaplikować w cronie raz dziennie (w nocy) restart systemu..
Pozdrawiam!
Offline
[quote=mikajlo]Dzieki za podesłane linki..
Ale dzięki Wam zrozumiałem, że pozostaje mi zaaplikować w cronie raz dziennie (w nocy) restart systemu..
Pozdrawiam![/quote]
A nie lepiej wsadzić do Crona skrypt psmem, ktory masz podlinkowany, zeby do logu godzinowego będzie zrucał wynik?
Porównując wyniki z kiku godzin latwo znajdziesz, gdzie jest wyciek pamięci.
Offline
@Jacekalex - a ten skrypt jest gotowy do uruchomienia? (tzn. nie muszę nic w nim modyfikować, tylko utworzyć pliczek i podpiąć go do crona ?)
Offline
Gotowy.
Uruchomienie?
np:
psmemng >/{gdzieś/na/dysku}/memory-raport-$(date "+%Y.%m.%d-%H.%m.%S")
Jak będzie tak leciał co godzinę, to porównując raporty z godziny np 12.00, 18.00 i 24.00 łatwo zauważysz, co przybrało na wadze.
Ostatnio edytowany przez Jacekalex (2013-06-05 05:35:49)
Offline
Hm.. chyba nie rozumiem.. co znaczy psmemng ? (to jest jakiś program ? bo nic na ten temat nie mogę znaleźć...)
Czy użyłeś po prostu "skrótu myślowego" i ma to wyglądać np. tak:
0 * * * * python /script/ps_mem.py > /dump/memory-raport-$(date "+%Y.%m.%d-%H.%m.%S")
?
Offline
psmemng - tak się u mnie nazywa skrypt, siedzi sobie w /usr/local/bin, ma uprawnienia 755 i można go wywołać w terminalu z palca.
Tu jest zawsze najnowsza wersja skryptu, na stronie Autora:
http://www.pixelbeat.org/scripts/ps_mem.py
Nazwę skrypta w swoim systemie możesz sobie sam ustawić taką, jak Ci odpowiada.
U siebie zrobiłbym skrypta w cron.hourly:
#!/bin/bash mkdir -p /var/log/memory 2>&1>/dev/null /usr/local/bin/psmemng > /var/log/memory/memory-raport-$(date "+%Y.%m.%d-%H.%m.%S")
Zapisał tego skrypta jako np
/etc/cron.hourly/memoryraport
potem
chmod 755 /etc/cron.hourly/memoryraport
i gotowe, Cron wykona go co godzinę.
Potem dla pewności wykonał go z palca:
/etc/cron.hourly/memoryraport
I sprawdził, czy zrobił raport:
ls /var/log/memory/* /var/log/memory/memory-raport-2013.06.05-20.06.56
Jak widać, działa...... ;)
Możesz też ustawić, zeby raporty był wysyłany mailem, i setkę innych akcji.
W językach skryptowych nie zbyt wielu ograniczeń w tym zakresie.
Tylko przede wszystkim weź się w garść, jak jesteś administratorem serwera, to nim administruj, jak administrator.
Pozdro
;-)
Ostatnio edytowany przez Jacekalex (2013-06-06 04:02:05)
Offline
Ok, dzięki Jacek za tip "step by step" :) Natomiast odnośnie kwestii czy jestem administratorem to bym tak siebie nie nazwał, bo to wiele za dużo powiedziane :P Ja tylko z konieczności (i też trochę chcęci) chciałbym rozwiązać tą sprawę, ale brakuje umiejętności.. No ale wydaje się, że skryp odpalił i monitoruje :) (dam znać jak tylko serwer zbierze trochę logów i jak padnie.. co się wydarzy pewnie jutro/pojutrze..)
Offline
No i dzisiaj serwer padł.. (pamięć zajęta..). Ostatni log jaki był wykonany jest pusty.. (pewnie juz wtedy nie było "siły" aby wykonać raport..).
Przed ostatni raport wygląda tak:
Private + Shared = RAM used Program 80.0 KiB + 12.0 KiB = 92.0 KiB ispcp_daemon 76.0 KiB + 17.0 KiB = 93.0 KiB logger 64.0 KiB + 51.5 KiB = 115.5 KiB sh 88.0 KiB + 41.0 KiB = 129.0 KiB run-parts 92.0 KiB + 51.5 KiB = 143.5 KiB mysqld_safe 172.0 KiB + 34.0 KiB = 206.0 KiB init 184.0 KiB + 71.0 KiB = 255.0 KiB couriertcpd (2) 244.0 KiB + 49.0 KiB = 293.0 KiB courierlogger (3) 364.0 KiB + 117.5 KiB = 481.5 KiB pickup 372.0 KiB + 119.5 KiB = 491.5 KiB bounce 396.0 KiB + 110.5 KiB = 506.5 KiB master 516.0 KiB + 59.5 KiB = 575.5 KiB sshd 388.0 KiB + 223.5 KiB = 611.5 KiB cron (2) 596.0 KiB + 20.0 KiB = 616.0 KiB memoryraport 504.0 KiB + 134.0 KiB = 638.0 KiB smtp 432.0 KiB + 214.5 KiB = 646.5 KiB authdaemond (6) 544.0 KiB + 129.5 KiB = 673.5 KiB qmgr 756.0 KiB + 54.5 KiB = 810.5 KiB rsyslogd 1.0 MiB + 251.0 KiB = 1.3 MiB trivial-rewrite 2.4 MiB + 70.0 KiB = 2.4 MiB proftpd 3.6 MiB + 655.0 KiB = 4.2 MiB ispcp-apache-lo (2) 6.4 MiB + 450.0 KiB = 6.8 MiB postgrey 1.9 MiB + 5.7 MiB = 7.6 MiB perl (2) 4.9 MiB + 3.3 MiB = 8.2 MiB apache2 (9) 8.3 MiB + 91.0 KiB = 8.4 MiB named 20.6 MiB + 72.5 KiB = 20.7 MiB mysqld 369.2 MiB + 40.3 MiB = 409.6 MiB php5-cgi (41) --------------------------------- 476.4 MiB =================================
.. czyli wygląda to na php.. tylko czy to oznacza, że zainstalowany skrypt strony WWW powoduje te problemy?
Offline
Czy w poprzednich logach wpis dla php rośnie?
I co to za php-cgi?
Najprościej można użyć php-fpm, i odpalić go z poleceniem softlimit z pakietu daemontools, podobnie, jak się to robi z Qmailem, jak w poniższym przykładzie:
exec /usr/bin/softlimit -m 40000000 /usr/local/bin/sslserver -v -R -l \ "domena.tld" -x /etc/tcp.smtp.cdb 0 587 \ /usr/sbin/qmail-smtpd /usr/sbin/vchkpw /bin/true 2>&1 \
Względnie ustawienie limitów w [url=http://dug.net.pl/tekst/42/]/etc/security/limits.conf[/url] (dalekie od doskonałości), czy zabawa z [url=http://wolvverine.jogger.pl/2012/06/23/cgroups-zarzadzanie-zasobami-w-linux/]cgroup.ememory[/url].
To są środki doraźne, ale niezbędne w stabilnym systemie, docelowo albo poszukaj, jak się ustawia [url=http://www.php.net/manual/en/ini.core.php#ini.memory-limit]limit pamięci w php.ini[/url], albo zainstaluj inną wersję, która nie ma takiego apetytu, bo ten jest chyba zbyt "pamięciożerny" w tej chwili.
.. czyli wygląda to na php.. tylko czy to oznacza, że zainstalowany skrypt strony WWW powoduje te problemy?[/quote]
Możliwe, jednak jeśli skrypty php strony www mogą blokować RAM serwera, to Administrator tego serwera powinien kontynuować karierę, jako przysmak w konserwach dla psów. :D
Pozdro
;-)Ostatnio edytowany przez Jacekalex (2013-06-08 04:53:32)
W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem para bellum ;) | Pozdrawiam :)
Offline
Strony: 1
Time (s) | Query |
---|---|
0.00010 | SET CHARSET latin2 |
0.00007 | SET NAMES latin2 |
0.00104 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.144.108.200' WHERE u.id=1 |
0.00068 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.144.108.200', 1732526789) |
0.00043 | SELECT * FROM punbb_online WHERE logged<1732526489 |
0.00039 | SELECT topic_id FROM punbb_posts WHERE id=234135 |
0.00005 | SELECT id FROM punbb_posts WHERE topic_id=23598 ORDER BY posted |
0.00047 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=23598 AND t.moved_to IS NULL |
0.00005 | SELECT search_for, replace_with FROM punbb_censoring |
0.00097 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=23598 ORDER BY p.id LIMIT 0,25 |
0.00237 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=23598 |
Total query time: 0.00662 s |