私は、自分の個人プロジェクトを実行するためにレンタルしていたラックスペースサーバーを持っています。私は安いので、256MbのRAMであり、正直に多くを処理することはできません。時々、トラフィックが急激に増加すると、サーバーはプロセスの強制終了を決定し、 mysqldはkillに人気のあるもののようです。自分のサイトにアクセスしようとすると、データベース接続の確立中にエラーが発生したというメッセージが表示されます。ログを調べると、mysqldがメモリ不足のためにkillされたことがわかりました。
私はまだ昨日と同じくらい貧しく、ラックスペースVMのRAMをアップグレードしたくないので、mysqldが停止したときに自動的にmysqldを再起動するように指示する方法はありますか?
私はcrontabのようなものを使用することを考えていますが、悲しいかな、そこで何をするか正確にはわかりません。私は「Linux on your desktop」世代の製品だと思います。ほとんどのことをデスクトップとラップトップ(Linuxをほぼ排他的に実行する)で行うことができるからですが、Linuxのサーバー管理スキルはまだまだ足りません。
サーバーはCentOS 6.3を実行します
これはクリーンなソリューションではありません。そもそも問題を回避した方がいいでしょう。とにかく、CentOSがサービスを管理する方法はわかりませんが、service
を使用していると思います。その場合、mysql
サービスが実行されているかどうかを確認できます
/sbin/service mysql status
このコマンドは、mysql
が実行されている場合は正常に終了し、実行されていない場合は0以外の終了ステータスを返します。したがって、このコマンドで実行されていない場合は、サービスを開始できます。
/sbin/service mysql status || service mysql start
次の行を/etc/crontab
に追加して、毎分コマンドを起動できます。
* * * * * /sbin/service mysql status || service mysql start
これは少し不安です。
mysqld は無限ループがあるため、常に mysqld_safe によって再起動されますmysqld_safe
の下部にあり、異常なシャットダウンをチェックします。エラーが非常に深刻な場合、mysqld_safe
でさえ、その後の試行でmysqld
を再起動できません。
mysqld_safe
がそのように設計されている状況を考えると、mysqld_safe
が拒否するのであれば、mysqld
を強制的に開始することはお勧めできません。
エラーログはmy.cnfにある必要があります。
[mysqld]
log-error=log-filename
または
[mysqld_safe]
log-error=log-filename
テキストファイルを読み取り(おそらくtail -30 log-filename
を実行して)、mysqld処理のシャットダウンのソースを見つけます。
低メモリVPSで物事を稼働させ続けるための力ずくの試みで、terdomの answer の変更を使用して、MySQLをチェックして再起動しました。
/sbin/service mysqld status || service mysqld restart
これを機能させるには、mysql
をmysqld
に変更する必要がありました。それがないと、エラー「ERROR! MySQL is running but PID file could not be found
」が発生します。
私のCentOS 7.2システムでは、/sbin/service
は/bin/systemctl status
にリダイレクトされるため、次のコマンドの実行が高速です。
/bin/systemctl status mysqld.service || /bin/systemctl start mysqld.service
システムのルートcrontabに次の行を追加してしまいました。 MySQLが実行されているかどうかを毎分チェックし、stdoutをnullにリダイレクトします。サービスを開始しても、問題が発生しない限り何も出力されないため、最後のコマンドにnullリダイレクトを追加する必要はありません。
* * * * * /bin/systemctl status mysqld.service > /dev/null || /bin/systemctl start mysqld.service
二重パイプ||
はOR
を意味し、最初のコマンドが何らかの理由で失敗した場合に2番目のコマンドを実行します。 (ゼロより大きい終了コードを返します。)
「1番目のコマンドを実行するまたは、1番目のコマンドがなんらかの理由で失敗した場合は2番目のコマンドを実行する」と言っているようなものです。
これは、最初のコマンドが成功した場合にのみ、「最初のコマンドを実行するand」と言うような二重アンパサンド&&
とは異なります。 2番目のコマンドを実行します。」.
以下はからです jonnyreeves.co.uk :
そして犯人はphp-fpmです!簡単なグーグルは別のWordpress顧客が同様の症状に苦しんでいることを発見しました;アドバイスはphp-fpmプール設定(/etc/php-fpm.d/www.conf)を微調整し、午後を微調整することでした)構成。主な変更点は、pm = dynamic
からpm = ondemand
とともに pm.max_children
の値5
(ワーカーあたり最大5%のメモリ使用量の観察に基づく)。構成を変更した後、すべてのサービスを再起動し、メモリ使用量を確認しました。
service php-fpm restart
service nginx restart
service mariadb restart
再起動後、メモリ使用量は劇的に減少しました。