Mam serwer typu rack, który wynajmowałem, aby realizować moje osobiste projekty. Ponieważ jestem tani, ma 256 MB pamięci RAM i szczerze mówiąc, nie mogę sobie z tym poradzić. Od czasu do czasu, gdy następuje gwałtowny wzrost ruchu, serwer decyduje się na rozpoczęcie procesu zabijania i wydaje się, że mysqld jest popularnym narzędziem do zabijania. Próbuję odwiedzić moją witrynę i zostaje mi przywitany komunikat o błędzie podczas nawiązywania połączenia z bazą danych. Przegląd dzienników ujawnia, że mysqld został zabity z powodu braku pamięci.
Ponieważ wciąż jestem tak biedny jak wczoraj i nie chcę uaktualniać pamięci RAM maszyny Wirtualnej w przestrzeni dyskowej, czy jest sposób, aby powiedzieć mu, aby automatycznie uruchamiała mysqld po jego śmierci?
Mam pomysł, aby użyć czegoś takiego jak crontab, ale niestety, nie wiem też dokładnie, co tam zrobić. Wydaje mi się, że jestem produktem generacji „Linux na twoim pulpicie”, ponieważ mogę robić większość rzeczy na moim komputerze stacjonarnym i laptopie (który działa prawie wyłącznie na Linuksie), ale wciąż brakuje wielu umiejętności administrowania serwerami w systemie Linux.
Serwer działa w CentOS 6.3
Odpowiedzi:
To nie jest czyste rozwiązanie, oczywiście lepiej byłoby przede wszystkim uniknąć problemu. W każdym razie nie jestem pewien, jak CentOS zarządza usługami, ale myślę, że z nich korzysta
service
. Jeśli tak, możesz sprawdzić, czymysql
usługa działaTo polecenie zakończy się pomyślnie, jeśli
mysql
jest uruchomione, i zwróci stan wyjścia inny niż 0, jeśli ja nie. Możesz zatem uruchomić usługę, jeśli nie jest uruchomiona za pomocą tego polecenia:Możesz dodać ten wiersz, aby
/etc/crontab
co minutę uruchamiać polecenie:źródło
To trochę niepokojące.
mysqld jest zawsze restartowany przez mysqld_safe, ponieważ w dolnej części znajduje się nieskończona pętla,
mysqld_safe
aby sprawdzić nieprawidłowe zamykanie. Jeśli błąd jest zbyt poważny, nawetmysqld_safe
nie będzie mógł zrestartować sięmysqld
przy kolejnych próbach.Biorąc pod uwagę tę sytuację, dla której
mysqld_safe
została zaprojektowana, wymuszeniemysqld
uruchomienia może nie być dobrym pomysłem, jeślimysqld_safe
i tak ją odrzuci.Musisz zlokalizować dziennik błędów w my.cnf, który będzie poniżej
lub
Przeczytaj plik tekstowy (prawdopodobnie przez uruchomienie
tail -30 log-filename
) i znajdź źródło zamykania przetwarzania mysqld.źródło
W próbie brutalnej siły, aby utrzymać rzeczy i działa na VPS niskiej pamięci, użyłem modyfikację terdom za odpowiedź sprawdzić i restart MySQL.
Musiałem się zmienić,
mysql
żebymysqld
go uruchomić. Bez niego dostałbym błąd „ERROR! MySQL is running but PID file could not be found
”.W moim systemie CentOS 7.2
/sbin/service
przekierowuje do/bin/systemctl status
, więc szybsze wykonanie następującego polecenia jest szybsze.Skończyło się na dodaniu następującej linii do crontab systemu root. Sprawdza co minutę, czy MySQL jest uruchomiony i przekierowuje standardowe wyjście na zero. Uruchomienie usługi niczego nie wyświetli, chyba że coś pójdzie nie tak, więc nie trzeba dodawać przekierowania zerowego do ostatniego polecenia.
Podwójna rura
||
oznaczaOR
i wykona 2. polecenie, jeśli pierwsze polecenie jakoś się nie powiedzie. (Zwraca kod wyjścia większy niż zero.)To tak, jakby powiedzieć: „Uruchom pierwszą komendę lub , jeśli pierwsza komenda jakoś się nie powiedzie, uruchom drugą komendę”.
Jest to odmienne od podwójnego znaku handlowego i ,
&&
który jest jak powiedzenie: „Uruchom pierwsze polecenie i , tylko jeśli pierwsze polecenie zakończyło się powodzeniem, uruchom drugie polecenie”.źródło
Następujące dane pochodzą z witryny jonnyreeves.co.uk :
A winowajcą jest php-fpm! Szybki Google znalazł kolejnego klienta Wordpress cierpiącego na podobne objawy; rada polegała na poprawieniu konfiguracji puli php-fpm (/etc/php-fpm.d/www.conf) i poprawieniu konfiguracji pm. Główną zmianą było przejście od
pm = dynamic
celupm = ondemand
opm.max_children
wartości5
(w oparciu o obserwację ~ 5% zużycie pamięci na pracownika). Po zmianie konfiguracji zrestartowałem wszystkie usługi i sprawdziłem użycie pamięci.Po ponownym uruchomieniu zużycie pamięci było znacznie niższe.
źródło