
CentOS 6.5 では、crontab 経由で複数の PHP スクリプトが実行され、各 PHP スクリプトには少なくとも 1 つのデータベース要求が含まれています。PHP オブジェクトのサイズとタイプによっては、特定のケースで、mysqld サービスによって割り当てられる物理メモリが多すぎることがあります。
場合によっては、1.7 GB のうち 15 MB しか空きメモリがなく、スワップ メモリも 95% の使用率に割り当てられていることがあります。サーバー メモリを解放するための唯一の代替ソリューションは、mysqld サーバーを再起動することですが、数日後にはメモリがほぼいっぱいになります。
mysqld の再起動を無視するために、 と を使用してクエリ キャッシュをフラッシュしようとしましたがRESET QUERY CACHE;
、メモリのFLUSH QUERY CACHE;
状態は何も変わりませんでした。 また、 を実行しようとしましたsync && echo 3 | sudo tee /proc/sys/vm/drop_caches
が、メモリの状態は再び同じです。
たとえば、スクリプトの実行ごとに、mysql サーバーを再起動せずに物理メモリと仮想メモリを解放する方法をご存知ですか?
答え1
MySQL がすべてのメモリを消費している場合は、その値を下げるか、サーバーの RAM を増やす必要があります。MySQL に 16 GB の RAM を割り当てたのに、8 GB しか使用できない場合は、状況が変わります。
普通のホテルの部屋で 20 人のパーティーを開いたら部屋が狭すぎることがわかり、次の夜にもう一度試してみて 20 人収容できることを期待するなんてことはしません。もっと大きな部屋を予約するか、招待する人数を減らすかのどちらかです。