Ich habe hunger

あふりかエンジニア、アフリカ向けのB2BのSaaSを開発する

Apacheがメモリ足りなくて息しなくなったので、調べてみた。

運用してるサービスが、アクセスもそんなにないのに何か動きが遅い・・・
再起動させてみると、復活するが少し時間が経つとすぐにダメになる・・・

ということで、psコマンドで確認したところ、apache2さんが30個ぐらいプロセス立ち上げて合計90%ぐらいのメモリを占有してました。

さくらVPS、だいぶ不調 | Hinemosu

現象としては、こちらの方と同じような感じでした。

Apacheの設定ファイルを見直す

<IfModule prefork.c>
StartServers       8
MinSpareServers    5
MaxSpareServers   20
ServerLimit      256
MaxClients       256
MaxRequestsPerChild  4000
</IfModule>

まずはこれがデフォルト。

参考記事の一つ目を見て、apache2の1プロセスあたりのメモリ使用率を計算して、そこからMaxClientsの値を出しました。結果、256 -> 100 ぐらいに落としました(後で修正はしました)。
で、MaxMemFreeを1024に設定。

MaxMemFree ディレクティブは free() が呼ばれない限り、 主アロケータが保持できる空のメモリの最大値をキロバイト単位で設定します。 設定されていないか、零に設定されているときは、無制限になります。

結果的には、参考2個目のブログの方と同じような設定になりました

<IfModule prefork.c>
StartServers       8
MinSpareServers    8
MaxSpareServers    8
ServerLimit        100
MaxClients         100
MaxRequestsPerChild  4000
MaxMemFree 1024
</IfModule>

まだまだ様子見ですが、一旦はこんな感じで。

参考になった記事


apacheでメモリリークしないようにするチューニング - わーくあうと!


Linuxブログ : 【トラブル】apacheがよく応答無しになるので調べてみました -その2(設定ファイル)-