バージョン選択

フォーラム

メニュー

オンライン状況

36 人のユーザが現在オンラインです。 (26 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 36
もっと...

PR

デザインテンプレート EC-CUBE3.0版が登場!
広告掲載について

サイト内検索

質問 > 管理機能 > 受注管理 》 受注登録で「Out of memory」が発生しています。

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
Coinpad
投稿日時: 2017/5/11 0:44
対応状況: −−−
半人前
登録日: 2011/9/18
居住地:
投稿: 19
受注管理 》 受注登録で「Out of memory」が発生しています。
[EC-CUBE] 2.13.3
[レンタルサーバ] GMO
[PHP] PHP 5.6.25
[データベース] MySQL 5.1.47
[WEBサーバ] Apache
[ブラウザ] FireFox

管理者画面にて受注管理 》 受注登録をクリックすると画面が表示されず、「Internal Server Error」が表示されます。
※ ある日から突然このようになっています。

EC-CUBEのエラーログを確認すると以下のようになっています。

パス : /admin/order/edit.php
エラー内容 :
Fatal error(E_ERROR): Out of memory (allocated 9699328) (tried to allocate 3145728 bytes) on
[/xx/~(省略)~/Smarty/templates_c/admin/%%C8^C80^C80C6CBD%%edit.tpl.php(1235)]

ちなみに、PHPのmemory_limit = 128Mになっています。

これは何が問題で、解決方法を教えてください。

よろしくお願いいたします。
468
投稿日時: 2017/5/11 2:35
対応状況: −−−
仙人
登録日: 2008/10/26
居住地:
投稿: 801
Re: 受注管理 》 受注登録で「Out of memory」が発生しています。
メモリ割り当てが足りない事が原因と思います。
念の為確認ですが、管理画面のシステム設定>システム情報の画面に表示されるPHP情報に表示されるmemory_limitのLocal Valueは128Mになっていますか?
また、/admin/order/edit.phpなどプログラムのどこかでini_set()等でメモリの割り当てを変更されている事は無いでしょうか?


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

kaendaiko
投稿日時: 2017/5/11 22:12
対応状況: −−−
半人前
登録日: 2017/5/11
居住地:
投稿: 12
Re: 受注管理 》 受注登録で「Out of memory」が発生しています。
全く同じサーバ環境(EC-CUBE・GMO)ですが、私が関与するサイトでも同じ現象が本日から起きています。まだ原因調査段階なのですが、本日5/11AM00:00~AM09:00に、GMOのレンタルサーバで、以下のメンテナンスが行われています。

・WEBサーバーOSを32Bitから64Bitに変更
・PHPも32Bitから64Bitに変更(バージョンは同じまま)

本日から突然「Out of memory」が発生するようになりましたので、この64bit化が影響したものと思われます。ですので、恐らくですが、int型の扱いとかに関連した部分やこれまで文字列扱いだったものが64bitになって整数値として扱われるようになった等の問題が顕在化したのではないかと考えています。

ひとまずご参考まで。

---

その後、現象を確認中なのですが、商品マスターで検索をして編集リンクをクリックした場合と会員マスターで検索をして編集リンクをクリックした場合にも「Out of memory」が発生しました。ただし、これら商品編集と会員編集では、たまにしか発生しない状況で不安定です。上記の受注編集では必ず起きていましたが。
Coinpad
投稿日時: 2017/5/12 1:20
対応状況: −−−
半人前
登録日: 2011/9/18
居住地:
投稿: 19
Re: 受注管理 》 受注登録で「Out of memory」が発生しています。
kaendaikoさん
情報、ありがとうございます。

追加情報です。

[EC-CUBE] 2.13.3
[レンタルサーバ] GMO
[PHP] PHP 5.6.25
[データベース] MySQL 5.1.47
[WEBサーバ] Apache
[OS] Linux

上記環境では、以下が「Out of memory」が発生し、Internal Server Errorの表示状態です。
 - 受注管理 》 編集
 - 受注管理 》 受注登録
 - 受注管理 》 送り状番号登録
 ※ 他の機能は確認中です。
 
[EC-CUBE] 2.11.5
[レンタルサーバ] GMO
[PHP] PHP 5.6.25
[データベース] MySQL 5.1.47
[WEBサーバ] Apache
[OS] Linux

上記の環境では、大量に「core」ファイルが生成され、サーバーダウン状態です。
EC-CUBEその物が正常に機能しない状況が起きっています。

kaendaiko
投稿日時: 2017/5/12 3:12
対応状況: −−−
半人前
登録日: 2017/5/11
居住地:
投稿: 12
Re: 受注管理 》 受注登録で「Out of memory」が発生しています。
Coinpad さん

なかなか深刻な状況のようで、私の方もまだ解決に至りませんが、現象に進展があったので、ここに共有させてください。

先ほどはCoinpadさんの症状と全く同じだったのですが、その後、Smartyのテンプレートをコンパイルしたファイル(/data/Smarty/templates_c/admin/下のファイル)を全部削除して、受注管理の受注登録画面を再表示させたところ、ヘッダーのメニュー部分以外(order/edit.tplの部分とフッター部分)は、何度再表示させても白紙表示されるように変わりました(恐らく、order/edit.tplのテンプレートコンパイルファイルが生成されていないため白紙表示)。また、商品管理の商品登録と会員管理の会員登録では、テンプレートコンパイルファイルを削除した直後の1回目の表示ではFatalError(Out of memory)となりますが、2回目の再表示では問題なく表示されます(1回目はテンプレートコンパイルファイルは生成されてエラー、2回目はエラーにならず正常表示)。

現在、EC-CUBEのソースコードを追いながら、現象の再現性を確かめていますが、まだ五里霧中状態です。また、上記のような現象を鑑みて、並行して、GMOさんにPHPの実行プロセスに対して新たにメモリ制限をしていないかを問い合わせてみました。Coinpadさんのエラーログでも、合計10MB程度超のメモリを確保しに行こうとしたときに Out of memory になっていますし、私の環境でも「Fatal error(E_ERROR): Out of memory (allocated 10223616) (tried to allocate 786432 bytes) 」となっていて、同じくらいのメモリ量でエラーになります。PHPの実行プロセスに対して、10MB程度のメモリ制限が設定されてしまっているのかもしれません。

分かったことがあったら、また共有させてください。

なお、以下の投稿の方も同じようなタイミングと症状で困っていらっしゃいますので、こちらのCoinpadさんの投稿もご参考として紹介させていただきました。
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=18987&forum=2

---

その後、フロント側でもエラーになる画面がありました。私の環境の場合は、/products/detail.tpl なのですが、ファイルサイズが大きいもので現象発生するのかと思い、フロント側でファイルサイズが大きな商品詳細画面のテンプレートコンパイルファイルを削除して表示させようとしたところエラーとなりました。もし、正常稼働している画面があったら、その画面のテンプレートコンパイルファイルはむやみに削除しない方がよいかもしれません。

これらの現象をみると、まさにエラーメッセージの通りですが、EC-CUBEのソースコードの問題というより、PHP実行用のメモリが足りていないのではないかと思います。昨日のOS+PHPの64Bit化のメンテナンス時にメモリ制限が変わってしまった可能性もありますので、GMOさんからのお返事を待ちたいと思います。

kaendaiko
投稿日時: 2017/5/13 0:22
対応状況: −−−
半人前
登録日: 2017/5/11
居住地:
投稿: 12
Re: 受注管理 》 受注登録で「Out of memory」が発生しています。
Coinpad さん

GMOさんからお返事ありました。「サーバーの64bit化でメモリ使用量増加に起因するものと考えられますが、担当部署ではEC-CUBEの問題は確認できませんでした。EC-CUBEでの修正でメモリ使用量の調整が可能であればご対応をお願いします。なお、弊社側でも詳細な原因等について念のため調査させていただきます。調査が完了しましたら、あらためてメールにてご案内いたします。」とのことでした。

最初はあまり詳しい情報をお送りしなかったので、少々マト外れな検証をされた可能性もあります。先ほど、さらに詳しいエラー現象などをGMOさんに再度お送りしましたので、GMOさんからお返事があればまたご報告いたします。なお、同じ現象が起きている方がいらっしゃれば、GMOさんにお問い合せいただければ、GMOさんでの検証・対策の優先度が上がるかもしれません

現在、管理画面の受注登録・商品登録・会員登録やフロント画面の商品詳細などの比較的大きなファイルでエラーがおきること、そして、たぶんファイルサイズによって、PHPでテンプレートファイルコンパイル中かPHPでコンパイルファイル実行中のどちらかでエラーになることがわかりました。

ファイルサイズが大きな受注登録では、どうやらコンパイル中にOSによりcoreダンプされて強制終了しているようです(コンパイルファイルは生成されないので画面メイン部分は白紙表示)。次に大きな商品登録・会員登録ではコンパイルファイルは生成されますが管理画面上でPHPによりout of memoryエラー表示となり終了しています(再度表示させるとエラーなく表示できます)。また、メンテナンス前にコンパイルしていた受注登録画面のコンパイルファイルを実行したときには管理画面上でPHPによりOut of memoryエラー表示されていました(現在は、受注登録画面のコンパイルファイルは削除してあって、上記の通り生成できない状態です)。つまり、ファイルが、大きいとコンパイルできずにcoreダンプ、ちょっと大きいとコンパイル+実行は続けてできずコンパイルだけしてエラーとなるも2回目は実行だけなので正常終了、メンテナンス前にコンパイルしてあった大きなファイルは実行できずにエラー、ということのようです。

メモリ制限の問題のようですが、OSやPHPの64bit化によってガベージコレクションやメモリリークの不具合があったりして、アプリケーションで使えるメモリ量が少なくなったとかもあるのでしょうか。現在では、そちら方面でも調べていますが、何か情報をお持ちの方がいらっしゃればお教えいただければ助かります。
Coinpad
投稿日時: 2017/5/13 22:10
対応状況: −−−
半人前
登録日: 2011/9/18
居住地:
投稿: 19
Re: 受注管理 》 受注登録で「Out of memory」が発生しています。
kaendaikoさん
情報、ありがとうございます。

追加情報です。

1. サーバーA
[EC-CUBE] 2.11.5
[レンタルサーバ] GMO
[PHP] PHP 5.6.25
[データベース] MySQL 5.1.47
[WEBサーバ] Apache
[OS] Linux

上記環境では以下の状況です。

1. 現在大量のcoreファイルが生成されている。(例: core.1234 )
2. EC-CUBEが正常に動作しない。
 - 5/9まで普通に表示できたページすら表示されず「画面が白いまま」の状態になっている。
- 管理者画面 》 商品管理 》 商品登録では、「Fatal error: Out of memory」
- 管理者画面 》 商品管理 》 規格管理では、「Internal Server Error」 ⇒ Fatal error: Out of memory
- 管理者画面 》 顧客管理 》 顧客マスターでは、「Fatal error: Out of memory」
- 管理者画面 》 受注管理 》 受注管理 》 この条件で検索するでは、「Fatal error: Out of memory」
- 管理者画面 》 受注管理 》 受注登録では、「Fatal error: Out of memory」
 - 管理者画面 》 メルマガ管理 》 配信内容設定では、「Fatal error: Out of memory」
 - 管理者画面 》 システム設定 》 EC-CUBEログでは、「Fatal error: Out of memory」

このサーバーはサーバーダウン状況です。

上記問題を含めてGMO側に質問したところ、kaendaikoさん
記載内容と同じ返事が届いています。

[ GMO側の回答 ]
弊社担当部署にて、検証環境として800件程ダミー会員を登録した
EC-CUBEを用意し確認させていただきましたが、問題は確認できかねました。
なお、本件につきましては、弊社側でも、詳細な原因等について 念のため調査させていただいております。
弊社での調査が完了いたしましたら、あらためてメール返信にて ご案内させていただく予定でございますので、恐れ入りますが今しばらくお待ちいただけますよう、謹んでお願い申し上げます。

上記のメールが届いたのでサーバーの現状をより詳細に記載し再質問の返事待ち状況です。

恐らくですが、簡単に問題解決にならなそうな気がします。

GMOさんからお返事があればまたご報告いたします。



kaendaiko
投稿日時: 2017/5/14 11:55
対応状況: −−−
半人前
登録日: 2017/5/11
居住地:
投稿: 12
Re: 受注管理 》 受注登録で「Out of memory」が発生しています。
Coinpad さん

恐らく、ほぼ白紙の画面は、SmartyテンプレートファイルのPHPでのコンパイルが出来ておらず、PHPで実行可能なコンパイルファイルが生成されないため、その部分が白紙のようです。その場合、時々、coreファイルが出力されているようです。Out of memoryのエラー表示が出る画面は、コンパイルファイルは生成されているのですが、そのファイルをPHPで実行する時にメモリ不足エラーになるようです。

その後、GMOさんで現象の再現ができるように、Out of memoryのエラーが表示される最小限のカスタマイズをしたテンプレートファイルを1つ作成してGMOさんに送りました。GMOさんの環境でも再現できるとよいのですが。新たにEC-CUBEをインストールし、受注登録画面のテンプレートファイルのみを徐々にカスタマイズして行数を増やしていったところ、900行程度になったところで、Out of memoryとなりました。その他のファイルは全てインストールした状態のままですので、GMOさんでも簡単に再現できるのではないかと期待しています(インストールしたままの状態のEC-CUBEではメモリ不足エラーは発生しませんでした)。

ちなみに、受注登録画面の実際にカスタマイズしたファイル行数はもう少し多いのですが、それぞれ
 EC-CUBEオリジナルファイル:800行
 ぎりぎりエラーになるファイル:900行
 実際のカスタマイズファイル:1000行
くらいのサイズです。つまり、900行以内にカスタマイズを抑えられれば、テンプレートのコンパイル時にメモリ不足エラーにならないかもしれません。ただし、画面カスタマイズした部分に対応するビジネスロジックのクラス拡張でロジックコード行数も増えますので、受注登録画面で実際に実行できる追加可能行数は、ざっくり、テンプレートファイル50行、クラス拡張ファイル50行、といった感じかもしれません(メモリ消費を抑えたコードにすればもう少し追加できるかもしれませんが)。そうなると、ほとんどカスタマイズできないことになります。

なかなかつらい状況ですが、GMOさんでの検証を待ちながら、現在は、メモリ不足にならないやり方を思案中です。また、最悪は、サーバ引っ越しも検討しつつあります。なお、GMOさんの名誉のために・・今回の64bit化の案内は、2週間前の4月26日にあり、64bitの事前検証環境も用意されていました。その時点で検証していれば気が付くのがもう少し早かったのですが(涙)。

GMOさんからのお返事がありましたら、私からもご報告いたします。

kaendaiko
投稿日時: 2017/5/15 18:07
対応状況: −−−
半人前
登録日: 2017/5/11
居住地:
投稿: 12
Re: 受注管理 》 受注登録で「Out of memory」が発生しています。
本日、GMOさんからご連絡をいただきました。

「一時的にメモリ使用上限を上げましたので、カスタマイズしたEC-CUBEが正常動作するか、調査にご協力ください」とのことで、問題の受注登録画面を中心に動作確認しましたところ、正常動作するようになりました。どうやらなんとかなりそうです。

また、一昨日から以下のような単純なPHPプログラムで、どのようにPHPのメモリ使用量が増えるか、どこで Out of memory になるかを調べていました。ちょうど本日、念のため、同プログラムで確認したところでも、実際に、メモリ使用上限が50~60MB増えていました。

<?php
$MAX_NUM = $_GET['max_num'];
$a = [];
for ($i=0;$i<$MAX_NUM;$i++) {
$a[] = $i;
}
echo memory_get_usage() ."\n";
?>

昨日:Out of memory (allocated 108789760) 約100MB
本日:Out of memory (allocated 163577856) 約160MB

これまで、PHPのデフォルト上限(128MB)で動作していましたので、160MBあれば大丈夫かなと思います。

ということで、今回は一時的な上限UPですが、これを恒久的にしていただけるのか(たぶんメンテ以前と同等以上のサービスレベルにしてくださると期待していますが)、別ドメインで本番稼働後の開発・テスト用のコピーサイトがありますので、その別ドメインの方も上限UPしていただけるかを確認予定・確認中です。

ただ気になりますのが、EC-CUBEで表示されるエラーメッセージでは、
昨日:Out of memory (allocated 10223616) 約10MB
となっていましたので、上記単純プログラムの昨日の100MBとEC-CUBEの10MBの大きな差が謎です。

ひとまず、サーバ引っ越しはしなくて済みそうです。
Coinpad
投稿日時: 2017/5/16 1:04
対応状況: 解決済
半人前
登録日: 2011/9/18
居住地:
投稿: 19
Re: 受注管理 》 受注登録で「Out of memory」が発生しています。
kaendaikoさん

情報、ありがとうございます。

殆ど、kaendaikoさん記載内容と同一内容の連絡がありました。

一連の障害はこの「memory_limit=128MB」が原因のようです。
弊社サーバーも「memory_limit」をUPしています。

尚、決済モジュールを連動しているEC-CUBEにおいて、送り状番号登録(クロネコヤマトさんの決済モジュールの例)をするためCSVをダウンロードしますが、件数(約2,000件以上)が多いとメモリが足りなくなるため、上限値「128MB」は足りない結論になります。

従って、レンタルサーバーさん側と相談し、「memory_limit」サイズをUPするよう交渉が必要です。

ご参考までに。

kaendaikoさん、色々ありがとうございました。


[追伸]
もし東京でしたら ながら情報交換しませんか?
良かったらメールください。

よろしくお願いします。
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

クレジットカード情報の非保持化対応

統計情報

総メンバー数は20,566名です
総投稿数は83,588件です

投稿数ランキング

1
seasoft
7331
2
AMUAMU
2712
3
nanasess
1662
4
yuh
1430
5
red
1076
6
fukap
907
7
shutta
827
8
468
801
9 ramrun 789
10
tsuji
784
11
umebius
725
12
tao_s
651
13 karin 641
14 sumida 638
15
homan
633
16 DELIGHT 571
17
patapata
502
18
flealog
483
19 tonton 436
20
ecbg
387


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© LOCKON CO.,LTD. All Rights Reserved.