AWS WordPress サーバー

【WordPress】Out Of Memoryが多発していたのをSwap領域を確保して回避する方法

※本サイトはPR表記を含みます。

ブログを運営し始めてから早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
1
SWAP領域用のファイルを作成

 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
2
mkswap: 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は高いのでギリちょんまで容量も増やさない...

-AWS, WordPress, サーバー
-