2019年11月19日
PowerCMS からのログアウト操作に時間がかかるようになったケースへの対策
PowerCMS には様々な機能があり中にはログイン/ログアウトが行えるものがあります。運用を継続しているとログアウト操作に時間がかかるようになる場合があり、今回はその対策を紹介いたします。
ログイン/ログアウトの操作が行える機能が対象になりますので、PowerCMS 管理画面だけでなく会員サイト、コミュニティ掲示板、コメント機能にも当てはまります。
今回取り上げるケースの環境は下記の特長があります。
- 運用を開始した頃と比べてログアウト操作にかかる時間が長くなった
- ログイン操作とログアウト操作を比べるとログアウト操作だけ目立って時間がかかる
- サーバの負荷が高くない状況でもログアウトには時間がかかる
- run-periodic-tasks スクリプトを定期的に実行していない (管理画面が対象の場合)
時間についてはしきい値も特にありませんので感覚から判断ください。
原因
データベース内にログインセッションが大量に存在することが原因です。
PowerCMS の各機能でユーザがログインを行うとデータベース内にセッションデータが作成され、ログアウトを行うとセッションデータが削除されます。しかし、ブラウザを閉じるなどログアウトの操作を行わないとセッションデータは削除されずに残ります。それが年月とともに積み重なり大量になるとログアウトに時間がかかるようになります。
対策
大量に存在するログインセッションを削除することで改善します。ただ削除するだけではログイン中のユーザにも支障がありますが、古くなったログインセッションのみ削除することができアクティブユーザへの影響を抑えられます。
PowerCMS 管理画面と管理画面以外では対策の方法 (スクリプト) が異なるためわけて説明しますが、古くなったログインセッションを削除するという対策であることにかわりません。
run-periodic-tasks スクリプトを実行する (管理画面への対策)
cron やタスクスケジューラを利用して run-periodic-tasks スクリプトを定期的に実行してください。
# cd $MT_HOME
# sudo -u apache perl tools/run-periodic-tasks
※ $MT_HOME は PowerCMS のインストール先を指します。環境にあわせて置き換えてください。
run-periodic-tasks スクリプトを設定する環境の多くは記事・ウェブページを日時指定で公開・非公開を行うことを目的にされると思いますが、今回のように不要なデータの削除を行うような処理もあります。 run-periodic-tasks スクリプトは利用機能に限らずどの環境でも設定されることをおすすめいたします。
run-periodic-tasks スクリプトの実行時の注意点については以前の記事「バックグラウンド処理の実行と設定」も参照ください。
remove_old_sessions スクリプトを実行する (管理画面と管理画面以外への対策)
※ $MT_HOME は PowerCMS のインストール先を指します。環境にあわせて置き換えてください。 remove_old_sessions スクリプトは引数 ttl と kind に応じたセッションデータを削除します。
上記の実行例は 1 日以上経過した US と SI セッションデータが削除対象になります。 先に紹介しました run-periodic-tasks スクリプトを実行した場合には --ttl=1 --kind=US を指定した場合に近い内容の削除を行います。 remove_old_sessions スクリプトは対話型であるため run-periodic-tasks スクリプトと同様に設定されますと動きません。 例えば下記のように実行しますとスクリプトとの対話の際に自動応答ができるので、remove_old_sessions スクリプトが即時実行される結果となります。 ※ $MT_HOME は PowerCMS のインストール先を指します。環境にあわせて置き換えてください。# cd $MT_HOME
# sudo -u apache perl tools/remove_old_sessions --ttl=1 --kind=US,SI
We are going to remove the following records:
SI: 9433
US: 1439
Proceed? [n]:
remove_old_sessions スクリプトを定期実行する場合の注意
# cd $MT_HOME
# echo yes | sudo -u apache perl tools/remove_old_sessions --ttl=1 --kind=US,SI
We are going to remove the following records:
SI: 9433
US: 1439
Proceed? [n]: Success!
コメントを投稿する