У меня есть сервер стойки, который я арендовал для запуска моих личных проектов. Так как я дешевый, он имеет 256 Мб оперативной памяти и, честно говоря, не может справиться много. Время от времени, когда происходит резкое увеличение трафика, сервер решает запустить процессы уничтожения, и кажется, что mysqld является популярным средством для уничтожения. Я пытаюсь зайти на свой сайт и получаю сообщение об ошибке при установлении соединения с базой данных. Проверка журналов показывает, что mysqld был убит из-за нехватки памяти.
Так как я все еще беден, как и вчера, и не хочу обновлять оперативную память моей виртуальной машины в стойке, есть ли способ, с помощью которого я могу сказать ей автоматически перезапустить mysqld, когда он умрет?
У меня есть мысль использовать что-то вроде crontab, но, увы, я точно не знаю, что там делать. Я предполагаю, что я являюсь продуктом поколения «Linux на вашем компьютере», так как я могу делать большинство вещей на своем настольном компьютере и ноутбуке (которые работают почти исключительно под Linux), но все еще не хватает навыков администрирования сервера для Linux.
Сервер работает CentOS 6.3
Ответы:
Это не чистое решение, во-первых, было бы лучше избежать этой проблемы. Во всяком случае, я не уверен, как CentOS управляет услугами, но я думаю, что он использует
service
. Если это так, вы можете проверить, работает лиmysql
служба сЭта команда успешно завершится, если
mysql
выполняется, и вернет состояние выхода, отличное от 0, если i - нет. Поэтому вы можете запустить службу, если она не работает с этой командой:Вы можете добавить эту строку
/etc/crontab
для запуска команды thes каждую минуту:источник
Это немного беспокоит.
mysqld всегда перезапускается mysqld_safe, потому что в нижней части есть бесконечный цикл
mysqld_safe
для проверки на ненормальное завершение работы. Если ошибка слишком серьезная, дажеmysqld_safe
не удастся перезапуститьmysqld
при последующих попытках.Принимая во внимание ту ситуацию,
mysqld_safe
для которой она предназначена, может быть плохой идеей заставитьmysqld
ее начать, еслиmysqld_safe
она все равно ее отвергнет.Вам нужно найти журнал ошибок в my.cnf, он будет находиться под
или
Прочитайте текстовый файл (возможно, запустив
tail -30 log-filename
) и найдите источник завершения обработки mysqld.источник
В попытке грубой силы сохранить работоспособность VPS с низким объемом памяти я использовал модификацию ответа Тердома для проверки и перезапуска MySQL.
Мне нужно изменить ,
mysql
чтобыmysqld
получить его на работу. Без этого я бы получил ошибку "ERROR! MySQL is running but PID file could not be found
".В моей системе CentOS 7.2 происходит
/sbin/service
перенаправление на/bin/systemctl status
, поэтому следующая команда выполняется быстрее.В итоге я добавил следующую строку в корневой каталог системы. Он проверяет каждую минуту, работает ли MySQL, и перенаправляет стандартный вывод на ноль. Запуск службы не выдаст ничего, если что-то пойдет не так, поэтому нет необходимости добавлять нулевое перенаправление в последнюю команду.
Двойная труба
||
означаетOR
и выполнит 2-ю команду, если первая команда каким-то образом потерпит неудачу. (Возвращает код выхода больше нуля.)Это все равно, что сказать: «Запустите 1-ую команду или , если 1-я команда каким-то образом потерпит неудачу, запустите 2-ю команду».
Это не похоже на двойной амперсанд,
&&
который напоминает: «Запустите 1-ую команду, и , только если 1-я команда была успешной, запустите 2-ю команду».источник
Следующее от jonnyreeves.co.uk :
И виновник php-fpm! Быстрый Google нашел другого клиента Wordpress, страдающего от подобных симптомов; Совет состоял в том, чтобы настроить конфигурацию пула php-fpm (/etc/php-fpm.d/www.conf) и настроить конфигурацию pm. Основное изменение было перейти от
pm = dynamic
кpm = ondemand
сpm.max_children
значением5
(на основе наблюдений ~ 5% использования памяти на одного работника). После изменения конфигурации я перезапустил все сервисы и проверил использование памяти.После перезапуска использование памяти было резко ниже.
источник