Re: 唐突にphpのメモリが超過するバグが発生。Core Version -5.7.5.13

2020年7月17日 at 6:40

自作のコードもあるということなので、切り分けが必要と思います。

- サイトデータを他のサーバーに引っ越しても同じ症状になるか → 向上したらサーバーの問題
- サイトキャッシュをクリアするとどうなるか。クリア直後としばらく経ってから変わるか → 変わったら c5 キャッシュに関わる何かが問題
- 特定のページ訪問や特性のアクション後に遅くなるなどあるか → その特定のアクション・カスタマイズが問題
- 管理画面などテーマを使っていないページ訪問中も遅くなるか? → 管理画面が早ければテーマ関連ファイルかブロックなどフロントエンド部分が問題
- ログをクリアするとどうなるか → ログが貯まりすぎていないか



あくまでも参考ですが

concrete5 の GitHub でメモリに関するバグが報告 or 修正されているか Issue や Pull Request を調べてみました。
http://github.com/concrete5/concrete5/issues?page=2&q=is%3Aissue+memory
http://github.com/concrete5/concrete5/pulls?page=2&q=is%3Apr+memory

プルリクエストのところで、5.7.5.13 がリリースされた 2016年12月周辺に、画像に関するメモリリークの修正や機能追加がありました。(5.7.5.13 への修正ではなく、主に V8 への修正追加があります)

すごく巨大な画像ファイルをアップロードし、concrete5 がそのサムネイル画像を作ろうとしてクラッシュしているかもしれません。SVG 画像形式の可能性もあります。SVG 画像は 5.7時代はあまりうまく処理できていませんでした。

JPEG や PNG なご、すごく巨大なファイルサイズでも、真っ白な画像だったり圧縮率がすごく良いために、ファイルサイズは小さいけれども、実際の画像サイズは果てしなく大きいという場合があります。

それが起因しているかもしれません。

一度、最近アップロードされたファイルにそのようなファイルがないか確認してもらえますか?

ありそうであれば、そのファイルを削除してみてください。難しい場合は、小さめのサイズの画像を作り、物理的に画像を差し替えてみてください。

ファイル画像が原因だとすると、根本的な解決は、V8 以降にアップグレードし、アップロード時に JS でユーザーのブラウザ側で一定程度以下にリサイズしてからアップロードする機能をオンにしてもらうのが良いかと思います。

タグ:

Re: 唐突にphpのメモリが超過するバグが発生。Core Version -5.7.5.13

2020年7月17日 at 9:59
ご返信ありがとうございます。

インフラの専門家の方と話し合ったところ、phpの制限を上げてもその制限を食い潰す様にまた超過を起こしているので無限ループや膨大なサイズのファイルを参照しようとしている可能性が示唆されました。

また唐突に起きたので、お客様にもその様どんな操作を行ったかを確認を行っています。

vagrant上にこのサイトの開発環境を構築し、同じapplication/fileとDBを入れ込むと同様のエラーが同じページで発生しました。

vagrantで同様のエラーが発生するのでサーバー由来というよりは、concrete5の自作スクリプトor予想だにしない操作が原因の可能性が高いです。ともかく頂いたアドバイスや専門の方と調査を進め、進展がありましたら追記いたします。
 

Re: 唐突にphpのメモリが超過するバグが発生。Core Version -5.7.5.13

2020年7月17日 at 12:06
なんとかサイトは閲覧できるようになりました。ログを確認してみると

[Fri Jul 17 01:06:48 2020] [error] [client xxxxxxxxxx] PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 2101248 bytes) in /documentroot/concrete/src/Area/Layout/Preset/Provider/Manager.php on line 37

と見られ、エリアプリセットもエラーを吐いていました。このコア部分の

$presets = array();
foreach($this->providers as $provider) {
//$presets = array_merge($presets, $provider->getPresets());
}

上記箇所にコメントアウトすることでバグが起きなくなりました。(コアをいじるのはご法度ですが...)

しかしエリアプリセットを使えなくしたので、「記事+画像横並び」みたいなレイアウトが崩れて全て縦並びになってしまいました。お客様にはサイトがとりあえず見れるので今のところは大丈夫とのことで、引き続きテーマファイルなどを見直しています。

CMSによるページ編集は禁止にして、エリアプリセットのバグの対処にあたります。ファイルアップロード系のご指摘に感してお客様に尋ねましたが、該当するようなことは行っておりませんでした。アドバイスありがとうございました。

引き続きエリアプリセットあたりのエラーの究明、テーマコントローラーでのエリアプリセットをvagrant上で確認します。

このエリアプリセットあたりに今回のようなバグが発生したというissueやpull request、他のフォーラムではありますか?(念のため英語版の方でも投稿します。)