ラベル linux運用 の投稿を表示しています。 すべての投稿を表示
ラベル linux運用 の投稿を表示しています。 すべての投稿を表示

Elementorのメモリ消費をSwapfileで対策する

 

LightsailのWordPress@BitnamiインスタンスでElementorを入れて固定ページを組んでいるとメモリ消費が著しく、いつの間にかElementor編集画面を開くだけで数百MBとか、編集画面を保存するとGB単位でメモリを消費するようになりインスタンスがハングアップするようになった。


当初、最も小さいインスタンスで十分だったが、メモリだけきつくてだましだましで10USDコースまで引き上げたがまだまだ足りない。この調子ではいくらスケールアップしても安心できない。




料金 - Amazon Lightsail | AWS



Elementorがメモリ食いというのは検索すると情報はあるものの、セーフモードとか再起動とか根本的な対策を探し当てることができず、自力でも何に食っているのか分からずお茶を濁したはなし。


試してみたこと




メモリを食いそうな要因についてダイエットを試したがいずれも芯を食ってない。


  • 画像のサイズ縮小、圧縮、パララックス解除 → 効果小
  • 投稿一覧ウィジェットを削除 → 効果小
  • js実装削除 → 効果なし
  • 未使用のプラグインをお掃除 → 効果なし

結論




メモリがスパイクするのはElementor編集している時だけなので、編集時のスパイクをSwapfileで凌ぐ。
通常のページ閲覧は物理メモリで十分賄えているのでパフォーマンスに影響はない。


# Swap領域がない状態
free
               total        used        free      shared  buff/cache   available
Mem:         1994048     1204604      625100       56884      164344      603616
Swap:              0           0           0

# 2GBのswapfileを作成して0埋め
sudo dd if=/dev/zero of=/swapfile bs=1M count=2048

# パーミッション設定
sudo chmod 600 /swapfile

# スワップ領域として設定
sudo mkswap /swapfile

# スワップファイルを有効化(マウント)する
sudo swapon /swapfile

# 起動時にswapfileを自動的にマウント
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# swapfileとして認識された
free
               total        used        free      shared  buff/cache   available
Mem:         1994048     1204604      625100       56884      164344      603616
Swap:        2097148      214272     1882876

crontabで秒レベルの排他実行を登録する

crontabのスケジューリング最小単位は分指定だが、秒単位で実行させて、並列処理されては困るときの排他実行の組み方。

10秒おきに排他実行をスケジュールする例

* * * * * flock -xn /path/to/task.lock -c /path/to/task.sh
* * * * * sleep 10; flock -xn /path/to/task.lock -c /path/to/task.sh
* * * * * sleep 20; flock -xn /path/to/task.lock -c /path/to/task.sh
* * * * * sleep 30; flock -xn /path/to/task.lock -c /path/to/task.sh
* * * * * sleep 40; flock -xn /path/to/task.lock -c /path/to/task.sh
* * * * * sleep 50; flock -xn /path/to/task.lock -c /path/to/task.sh

秒単位の指定

sleepコマンドで寝かせて遅延実行させる

# 30秒周期で実行
* * * * *  コマンド
* * * * *  sleep 30; コマンド
# 20秒周期で実行
* * * * *  コマンド
* * * * *  sleep 20; コマンド
* * * * *  sleep 40; コマンド

排他制御

flockファイルロックでカーネルリソースを利用してクリティカルセクションを確保する。
この感じWindowsSDKのMutexとかを思い出す。

flock

-xオプション

ファイルロックを取得する。

-nオプション

取得できない場合は終了させる。

-cオプション

ファイルロックを取得できたら実行させるコマンド。

* * * * * flock -xn /path/to/task.lock -c /path/to/task.sh

ストレージ容量を空ける


EC2の治験サーバーのストレージがたびたび逼迫していて、定期的にログをお掃除していたがちゃんと調べたら8年分の思いでが詰まっていた。シークだけで大変だったんじゃないか


# ルート /varが圧倒的にでかい
du -sh /*
6.5M    /bin
69M     /boot
4.0K    /cgroup
60K     /dev
8.9M    /etc
6.0G    /home
197M    /lib
21M     /lib64
4.0K    /local
16K     /lost+found
4.0K    /media
4.0K    /mnt
456M    /opt
0       /proc
69M     /root
28K     /run
15M     /sbin
4.0K    /selinux
4.0K    /srv
0       /sys
16K     /tmp
4.5G    /usr
96G     /var

# wwwコンテンツとかライブラリがでかいのはいいとしてspoolがでかい
du -sh /var/*
4.0K    ./account
711M    ./cache
4.0K    ./crash
4.0K    ./cvs
108K    ./db
8.0K    ./empty
8.0K    ./ftp
4.0K    ./games
12K     ./kerberos
28G     ./lib
4.0K    ./local
16K     ./lock
627M    ./log
0       ./mail
4.0K    ./nis
4.0K    ./opt
4.0K    ./preserve
628K    ./run
35G     ./spool
4.0K    ./tmp
33G     ./www
4.0K    ./yp

# mailがばかでかい。あー、、と
du -sh /var/spool/*
16K     ./anacron
8.0K    ./at
72K     ./clientmqueue
12K     ./cron
4.0K    ./lpd
35G     ./mail
4.0K    ./mqueue

# エラーログやら通知やら8年分くらいたまってた
du -sh /var/spool/mail
35G     ./ec2-user
176K    ./root
0       ./hoge
0       ./fuga

echo '俺の名前を言ってみろ' > /var/spool/mail/ec2-user

秘密鍵から公開鍵を導出する


ssh鍵を更新したあかつきにauthorized_keysファイルから旧公開鍵を削除したいんだが、、ラベルがなくてどれやと途方に暮れたときに

秘密鍵をソースにssh-keygen -yで公開鍵を導出できる

# 秘密鍵の公開鍵をプリント
ssh-keygen \
-y \ # 公開鍵の抽出オプション
-f path/to/private_key # 秘密鍵の指定オプション

> ssh-rsa XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX...

# 上記の公開鍵を削除する
vi path/to/authorized_keys