ApacheとMySQLをどのくらいの頻度で再起動する必要がありますか(特に毎週15万ヒット)、特定の時間ごとに再起動することで実際にどのようなメリットがありますか?
システムが適切に調整されていて、アプリケーションにメモリリークなどの問題がない場合は、パッチを適用するためにシステムを再起動するだけで済みます。
ApacheとMySQL自体には、メモリリークがあってはなりません。ほとんどのデータベースサーバーは、稼働時間が長くなるほどパフォーマンスが向上します。ただし、PHPのようにApacheにコンパイルされるモジュールでは、多くの場合、メモリリークが発生します。
Apache mpm module は、10,000リクエスト後にプロセスを自動的にリサイクルします。 MaxRequestsPerChild
は別の値に変更できますが、デフォルトは10,000です。
Apacheは定期的に再起動する必要はありません。 MySQLもすべきではありません。
プリフォークモードで実行されているApacheは、MaxRequestsPerChildを使用して子プロセスをリサイクルできます。これは、遅いメモリリークなどを防ぐので良いことです。
MySQLを定期的に再起動しないでください。再起動すると、サービスが停止します。 MySQLを再起動すると、エンジンが起動するまで待機する必要があり、また、キャッシュがクリアされるため、ウォームアップするまでパフォーマンスが低下します。ときどき再起動する必要があるようです[1] アドレススペースの断片化のため、これは64ビットシステムではそれほど発生しないはずであり、新規インストールでは常にこの状況が続くはずです。
[1]例: 1秒あたり平均100クエリを超えるビジーサーバーで9か月ごと
パフォーマンス上の理由から、可能な限りMySQLを再起動しないでください。 MySQLは、データページとインデックスをキャッシュするために大量のメモリを使用します。 MySQLを再起動すると、キャッシュされたすべてのページが解放され、ウォームアップキャッシュに時間がかかります。負荷の高いサイトでは、データベースを再起動するとパフォーマンスの問題が発生する可能性があります。
サイトの負荷が高くないため(150kヒット/週では1req/4sしかありません)、MySQLを再起動しても大きな問題は発生しません。
システムまたはサービスをいつ再起動する必要があるかを理解するには、まずその理由を理解する必要があります。メモリリークが最も一般的な理由ですが、ソフトウェアの記述が不十分である(あまりにも一般的です!)など、不要になったときにファイルハンドルを閉じるなど、適切な内部ハウスキーピングを実行しないものもあります。メモリリークと同じではありませんが、症状は同じです。 ApacheとMySQLはどちらも非常に安定していることがわかっており(アルファ版またはベータ版を実行している場合を除く)、何年も問題なく実行できます。通常、オペレーティングシステムは、いずれかのアプリケーションでパッチが必要になるずっと前に、パッチを適用するために再起動する必要があります。