GAE-Cronのタイマ処理を見直し、負荷の低減を試みました。
version 0.01dの時もそんなことを言っていましたが(苦笑)、今回はより抜本的に修正してみました。
タイマ数が多く、かつ、それぞれの間隔が短い場合に効果的に働くと思います。
250個のタイマ(全て1分間隔:*/1 0 0 0 0)で試したところ、CPU負荷がversion 0.01dと比較して約半分となり、Over Quotaが出なくなりました。
version 0.01e時
グラフで見れば、0.01dのとき(0.3弱)が0.01eになると約半分(0.15程度)になり、表で見ると特に負荷の大半を占める /gaetimer/timercycle のAvg CPUが545→251と低減しているのがわかると思います。
代わりに/check_timerのAvg CPUが5855→8223と上がっていますが、頻度が140倍以上程度違うため、CPU負荷全体に与える影響は小さくなります。
実験は1ユーザ×250タイマでやっているので多少極端ですが、50ユーザ×5タイマの場合では、前者が1400〜1500回/hour前後程度コールされるのに対して、後者は10回/hour前後程度で、かつ、後者のAvg CPUはもっと下がります。
その他、
他、若干の不具合修正等を行なっています。
設置されている方は、お手数ですが出来ましたら最新版への更新をお願いします。
更新方法
前回(version:0.01d)から変更があるのは
- README
- gaecron.py
- gaetimer.py
- css/gc-common.css
- template/gc-top.html
- template/gc-user-header.html
の 6 ファイルです。
前回デプロイ時に使ったフォルダに上記ファイルを上書きしてデプロイして下さい。
注意点として、
- gaecron.pyソース内のPATH関係を修正して使っていた場合には、新しいファイルでも同様の箇所を修正してから、上書きして下さい。
- 設定ファイル(*.yaml)等については、これまでのものをそのまま使って下さい。
- デプロイ後、GAE-Cronに(管理者アカウントで)ログインし、左上にある[全タイマ再設定]ボタンを押して下さい。