バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > 管理機能 > 顧客CSVアップロード完了後、Apache HTTP Server.のメモリが増えたままになってしまいます。

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
mommy
投稿日時: 2018/1/29 1:27
対応状況: −−−
新米
登録日: 2017/9/4
居住地: 埼玉県
投稿: 8
顧客CSVアップロード完了後、Apache HTTP Server.のメモリが増えたままになってしまいます。
【開発環境】
EC-CUBE3 version : 3.0.15(新規インストール)
OS : windows10

【開発環境xampp version:7.1.9】
PHP version : 7.1.9
mariaDB version : 10.1.26
apache version : 2.4.27

【導入済みの顧客関連のプラグイン】
・会員項目追加プラグイン
https://www.ec-cube.net/products/detail.php?product_id=1356

・顧客一括アップロード
https://www.ec-cube.net/products/detail.php?product_id=1227

【カスタマイズ状況】
顧客一括アップロードプラグインのCustomerImportController.phpにて、会員項目追加プラグインで追加した項目をCSVからアップロードできるようにカスタマイズ済みになります。

【困っていること】
顧客CSVアップロード時に、アップロード完了後、一部のメモリが解放されず、アップロード前よりApache HTTP Server が使用しているメモリが増加してしまう状態です。(←タスクマネージャーより確認しています。)

【実践済みなこと】
対応策として、$this->em->clear();をしています。
また、使用しているオブジェクトはunset()をしています。
加えて、$this->em->getConfiguration()->setSQLLogger(null);も行っております。
管理画面のトップページにアクセスするとApache HTTP Server が使用しているメモリが下がることが確認されています。

【ご教授いただけると嬉しいこと】
Apache HTTP Server のメモリがアップロード後に解放されない原因に心当たりがあれば教えていただきたいです。


nanasess
投稿日時: 2018/1/30 9:18
対応状況: −−−
登録日: 2006/9/9
居住地: 宝塚
投稿: 1796
Re: 顧客CSVアップロード完了後、Apache HTTP Server.のメモリが増えたままになってしまいます。
変数を unset 等しても、 ガーベジコレクションが実行されるまでは、メモリは開放されません。 強制的にガーベジコレクションを実行したい場合は gc_collect_cycles() をコールします。

また、 Apache のメモリリークが気になる場合ですが、 Apache の子プロセスは MaxConnectionsPerChild の数だけ使いまわされます。
MaxConnectionsPerChild の数を 1 とかにしてあげれば、すぐにメモリ開放されるのではないでしょうか。

(本番環境が Linux などの場合は、また状況が変わることも多々ありますで、 XAMPP での検証は参考程度にしておくのをおすすめします)


----------------
大河内健太郎(Kentaro Ohkouchi)
EC-CUBE公式エバンジェリスト
有限会社 Loop AZ

EC-CUBE1系2系長期サポートホスティングサービス CUBE Lab
https://cubelab.info/

mommy
投稿日時: 2018/2/2 17:42
対応状況: 開発中
新米
登録日: 2017/9/4
居住地: 埼玉県
投稿: 8
Re: 顧客CSVアップロード完了後、Apache HTTP Server.のメモリが増えたままになってしまいます。
この度は、ご対応いただきありがとうございます。また、ご返信が遅くなりまして申し訳ございませんでした。

ご教授いただいた、gc_collect_cycles()を、CSVのアップロード処理を行っている、CustomerImportController.phpの中のrenderの前に組み込んでみましたが、メモリの増加に関する状況としては、変化がありませんでした。

また、C:\xampp\apache\conf\extra\httpd-mpm.conf 内のMaxConnectionperChildの数値が0でしたので、1と変更したところ、2回目のアップロード時に下記エラー(※1)が発生してしまい、メモリの状況も変化が特に見られませんでした。

※1のエラー内容開始>>>
[Fri Feb 02 16:28:12.470522 2018] [mpm_winnt:notice] [pid 220:tid 212] AH00362: Child: Waiting 0 more seconds for 1 worker threads to finish.
[Fri Feb 02 16:28:12.571569 2018] [mpm_winnt:notice] [pid 220:tid 212] AH00363: Child: Terminating 1 threads that failed to exit.
[Fri Feb 02 16:28:12.571569 2018] [mpm_winnt:notice] [pid 220:tid 212] AH00364: Child: All worker threads have exited.
<<<※1のエラー内容記述終了


■メモリの上がり方を確認するためテストを行いました。
メモリが増えていく過程が少しヒントになるかもしれないので、簡単なテスト結果を記載させていただきます。

顧客データ1500件を3回アップロードして、メモリの上がり方を確認したテスト結果
1回目アップロード:開始時点でのApacheHTTPServerのメモリ使用量=185MB(アップロード開始後すぐメモリが上がり始めます)

アップロード完了直前のApacheHTTPServerのメモリ使用量=547MB

アップロード完了後のApacheHTTPServerのメモリ使用量=325MB

2回目アップロード:開始時点でのApacheHTTPServerのメモリ使用量=325MB(1回目のアップロードと違い、アップロード開始後はすぐにメモリが上がらず、しばらく325MBのまま)

アップロード完了直前のApacheHTTPServerのメモリ使用量=482MB

アップロード完了後のApacheHTTPServerのメモリ使用量=382MB

3回目のアップロード:開始時点でのApacheHTTPServerのメモリ使用量=382MB(アップロード開始後はすぐにメモリが上がらず、しばらく382MBのまま)

アップロード完了直前のApacheHTTPServerのメモリ使用量=482MB

アップロード完了後430MB

■テストによる考察
アップロード時に使用したメモリのうち、一部は解放されているが、結果として、アップロード完了後に
メモリが増えてしまう。
2回目、3回目のアップロード時にメモリがすぐに上がらないのは、unset等で空いた部分にデータをいれているからなのでしょうか。


=======

この度は、せっかくご対応いただいたのにも関わらず解決できず申し訳ありません。引き続きこちらでも調査し、なにか分かり次第、こちらに記載していきたいと思います。



スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBEペイメント

統計情報

総メンバー数は33,286名です
総投稿数は87,798件です

投稿数ランキング

1
seasoft
7331
2
AMUAMU
2712
3
nanasess
1796
4
yuh
1515
5
468
1275
6
red
1178
7
umebius
1007
8
fukap
907
9
shutta
827
10
tsuji
815
11 ramrun 789
12
tao_s
665
13 karin 656
14 sumida 641
15
homan
633
16
h_tanaka
572
17 DELIGHT 571
18
patapata
502
19
flealog
483
20 tonton 436


ネットショップの壺

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

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