2013-06-22 19 views
5

Gdy system zabraknie pamięci, Ubuntu 12.04 zabija proces MySQL:Restart MySQL automatycznie po ubuntu na EC2 mikro instancja zabija go po wyczerpaniu pamięci

Out of memory: Kill process 17074 (mysqld) score 146 or sacrifice child 

Więc proces kończy się zabić. Zdarza się to przy szczytach obciążenia serwera i głównie z powodu dzikiego apache i zjedzenia pozostałej dostępnej pamięci. Możliwe podejścia mogą być:

  • Zmień gdzieś jakoś priorytetem mysql, więc to nie jest zabity (prawdopodobnie zły fix jako coś innego zostanie zabity)
  • Monitorowanie stanu mysql i automatycznie ponownie uruchomiony, gdy tylko zabił (ten, o którym myślę, ale nie wiem jak to zrobić).

Jak widzisz?

Odpowiedz

8

Nagłe zamknięcie serwera bazy danych jest bardzo poważną awarią. Trzeba tego uniknąć w systemie produkcyjnym, ponieważ może nie zacząć od nowa.

Serwer bazy danych jest zasobem udostępnionym i prawie nigdy nie powinien kończyć się w nieplanowany sposób podczas produkcji. Jedyną rzeczą, która powinna spowodować nieplanowane zakończenie, jest katastrofalny sprzęt lub awaria zasilania. Większość prawidłowo skonfigurowanych produkcyjnych serwerów baz danych ma nieplanowane zakończenie raz na dziesięć lat lub rzadziej. Poważnie.

Co robić?

Napraw konfigurację apache. Ogranicz liczbę wątków roboczych i procesów, z których może korzystać, aby nie działały dziko. Dowiedz się, jak to zrobić. To ważne. Zobacz tutaj: http://httpd.apache.org/docs/current/mod/mpm_common.html#maxrequestworkers

Napraw błędy w aplikacji internetowej, które powodują, że Twój apache zaczyna dzika.

Jeśli możesz, przenieś swój serwer mysqld na inny serwer z Apache, więc te dwa nie walczą o te same zasoby sprzętowe.

Skonfiguruj swój mysqld, aby ograniczyć liczbę połączeń, które będzie akceptował z wątków pracownika apache lub innych klientów. Twoja aplikacja internetowa prawdopodobnie obsługuje sytuację, w której wątek roboczy musi czekać na połączenie. Spójrz tutaj. http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_max_connections

Czy jesteś na instancji EC2 micro? Musisz zrobić poważne dostrojenie. Zobacz tutaj: http://ubuntuforums.org/showthread.php?t=1979049

+4

Dziękuję Ollie! Tak, masz rację, próbuję wycisnąć mikro instancję EC2. Potem będę kontynuował dostrajanie apache i mysql i zacznę analizować skalę i skalować w dół. Ale czy istnieje sposób, aby wykryć, że mysql spadł i uruchom go automatycznie? Na wszelki wypadek, jeśli nie monitoruję serwera, a ja go jeszcze nie zoptymalizowałem. – Alex

3

Można sprawdzić stan mysql co minutę (z crona) i uruchom ponownie, jeśli jest rozbił:

* * * * * service mysql status | grep running || service mysql restart 
+0

dzięki za to. to zadziałało dla mnie. tylko, że/var/spool/mail/root staje się wielki po jakimś czasie z tego powodu. – sulabh

Powiązane problemy