ブログを運営し始めてから早3年目。ずーっとずーっとシカトを決め込んできたエラーがあります。そう「Out Of Memory」。育児という忙しさの最中、子どもへのメモリが溢れているのに、運営サーバーのメモリ溢れなど面倒見れるわけがありません。
WordPressは想定しているよりも、結構重いです。
あてずっぽうではありますが、画像をアップロードするなり、下書き保存などの保存系、それらのタイミングでメモリが溢れているのかな。と思っていました。
実は犯人は主にツイッターだった件
確かに編集作業も重いのでありますが、根本的な原因はツイッターにブログのURLを貼り付けると、「ツイッターカード」を作成するために、ツイッターボットがサーバーにやってきてメモリを喰い散らかしていくのでした...
-
ツイートするとhttpdプロセスが爆上がりする物語
続きを見る
で、ググってみると解決策って方法がいくつかあると思うのですが、一番手っ取り早いのがサーバースペックあげろや。ということは重々承知。
でも、時代は円安、値上げ。生活が苦しくなる一方です。そこにお金を投資できませんわ。
ということで、今回の対応策としては、どちらにしてもメモリを確保する必要があると思いましたので、記事タイトルにあるようにSWAP領域を確保し、足らない部分は仮想メモリにて補ってもらおう、そんな作戦です。
WordPress: fatal error out of memory
メモリ溢れはアパッチ君のログで確認できます。このエラーが出ると、高い確率でアパッチ君が強制終了します。当然、サイト閲覧はできない状態に。
error
PHP Fatal error: Out of memory (allocated 8912896) (tried to allocate 131072 bytes)
おそらく、WordPressは重たいので、あまりプラグインを入れていない状態でも、スペックの低い安価なレンタルサーバーなどでは、同じような悩みを持っている方も多いのではないでしょうか?得にWEBエンジニアとかではなく、単にブログを運営している方とかね。しらんけど。
Swap領域をステップ形式で作成してく
ここから、Swap領域を作成していきます。
step
1SWAP領域用のファイルを作成
command
$ sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.29765 s, 827 MB/s
これでSwap領域用のファイルが作成されました。今回1GBのファイルを作成しましたが、ディスク容量に余裕があれば2GBとか割り当てても良いと思います。
step
2mkswap: swap領域作成
ステップ1で作成したファイルをSWAP領域にします。
command
$ sudo /sbin/mkswap /var/swap.1
mkswap: /var/swap.1: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=b40d46b5-04ac-4d4f-b739-0bd44ae12e77
step
3 swapon: SWAPを有効化
ステップ2で作成したSWAP領域を有効化します。
command
$ sudo /sbin/swapon /var/swap.1
swapon: /var/swap.1: insecure permissions 0644, 0600 suggested.
これでSWAP領域が利用できるようになりました。あとは確認です。
step
4メモリ領域の確認
command
$ free -m
total used free shared buff/cache available
Mem: 983 628 195 0 159 208
Swap: 1023 231 792
$ swapon -s
Filename Type Size Used Priority
/var/swap.1 file 1048572 237204 -2
という感じで、Swap: の箇所で1GBが確保されてused(使用)されているのが確認できると思います。
ちなみに、今回SWAP領域を作成してからというものの、WordPressで記事編集時含め、ほぼ、メモリが溢れることはなくなりました。
将来的にディスク容量が足らなくなったりする時まで、一旦これで様子見をすることにしようかな。
追記
お兄ちゃんから指摘をいただきまして、/var/swap.1
ファイルはOSの指摘のように600にしておくようにということで実施しました。
swapon: /var/swap.1: insecure permissions 0644, 0600 suggested.
さらっとスルーしてました汗
後、空き容量が少なくて、メモリ割り当てケチりましたが、以下参考URLも頂きました。
そして、AWSは高いのでギリちょんまで容量も増やさない...