Project

General

Profile

Enhancement(機能追加・改善) #927

will memory over to be if all members join to community when has many members to the SNS. (SNSのメンバー数が多い場合、コミュニティ全員参加の処理がメモリオーバーしてしまう)

Added by Kiwa Sakai over 9 years ago. Updated over 7 years ago.

Status:
Fixed(完了)
Priority:
Normal(通常)
Target version:
Start date:
2010-04-02
Due date:
% Done:

100%


Description

コミュニティ全員参加処理(/pc_backend.php/community/addAllMember/id/:id)にて、SNSのメンバー数が多い場合にタイムアウトしてしまう。

再現環境

OpenPNE公式SNS http://sns.openpne.jp/

8410人のメンバーをid:722 に追加した際、途中でタイムアウトしてしまい3回ほど実行する必要があった


Related issues

Related to OpenPNE 3 - Backport(バックポート) #1660: will time out to be if all members join to community when has many members to the SNS. (SNSのメンバー数が多い場合、コミュニティ全員参加の処理がタイムアウトしてしまう) Fixed(完了) 2010-04-02
Related to OpenPNE 3 - Enhancement(機能追加・改善) #1662: コミュニティ全員参加処理がタイムアウトで中断されてしまう問題の改善 Pending Review(レビュー待ち) 2010-10-06

Associated revisions

Revision 0e618dbe (diff)
Added by Masato Nagasawa almost 9 years ago

fixed to get the primary ids without use the ORM. (fixes #927)

Revision f015591f (diff)
Added by Youichi Kimura over 7 years ago

improved performance while join all members to community (fixes #927)

Revision 54c1b476 (diff)
Added by Youichi Kimura over 7 years ago

fix syntax error (fixes #927)

Revision 41eb4d42 (diff)
Added by Youichi Kimura over 7 years ago

fix coding style issue (refs #927)

Revision d6956cde (diff)
Added by Youichi Kimura over 7 years ago

improved performance while join member to community (fixes #927)

History

#1 Updated by Rimpei Ogawa about 9 years ago

  • 3.6 で発生するか set to Yes

#2 Updated by Masato Nagasawa almost 9 years ago

  • Status changed from New(新規) to Accepted(着手)
  • Assignee set to Masato Nagasawa
  • Target version set to OpenPNE 3.7.0

#3 Updated by Masato Nagasawa almost 9 years ago

メモリオーバーで落ちたものと思います。

communityActions::executeAddAllMember() 内の以下の行が原因と思われます。

foreach ($query->execute()->getPrimaryKeys() as $id)

MemberレコードのプライマリキーをORMを使用して取得しているため、
多くのメモリを使用しています。
数回実行後正常に完了したということなので、
この処理自体では落ちていないと思いますが、
この部分が原因でその後の処理でメモリオーバーになったものと思います。

#4 Updated by Masato Nagasawa almost 9 years ago

  • Tracker changed from Bug(バグ) to Enhancement(機能追加・改善)

チューニングの範囲なので Enhancement とします。

#5 Updated by Masato Nagasawa almost 9 years ago

  • Subject changed from SNSのメンバー数が多い場合、コミュニティ全員参加の処理がタイムアウトしてしまう to will time out to be if all members join to community when has many members to the SNS. (SNSのメンバー数が多い場合、コミュニティ全員参加の処理がタイムアウトしてしまう)

#6 Updated by Masato Nagasawa almost 9 years ago

  • Status changed from Accepted(着手) to Pending Review(レビュー待ち)
  • % Done changed from 0 to 50

更新履歴 0e618dbeee4bb3683827cbcdef67d6464f982848 で適用されました。

#7 Updated by Hiroki Mogi almost 9 years ago

テスターテストを実施しました。
チューニングは行われているのですが、まだ環境によってはメモリオーバーが発生しているので、 #1662 にて対応していきましょう。

#8 Updated by Yuya Watanabe over 7 years ago

  • Status changed from Pending Review(レビュー待ち) to Rejected(差し戻し)
  • Assignee changed from Masato Nagasawa to Youichi Kimura

レビューしました.

気になった点としてはコントローラの中で直接 メンバーID を取得している部分は MemberTable 内で定義してから使用したほうがよさそうな感じがします.

#9 Updated by Youichi Kimura over 7 years ago

  • Status changed from Rejected(差し戻し) to Pending Review(レビュー待ち)

更新履歴 f015591f24dc30871fab2907f47cfd7e879598a7 で適用されました。

#10 Updated by Yuya Watanabe over 7 years ago

  • Status changed from Pending Review(レビュー待ち) to Rejected(差し戻し)

下記部分で community が存在しないためエラーが発生します.

lib/model/doctrine/Community.class.php 217 行目

213     foreach ($insertIds as $memberId)
214     {
215       Doctrine::getTable('CommunityMember')->join($memberId, $this->community->getId());
216     }

また,今回の修正部分とは違いますが,以下の部分がコーディング規約違反です.

lib/model/doctrine/CommunityMemberTable.class.php 75 行目

 75     if ($isRegisterPolicy == 'close')
 76     {
 77       $communityMember->setIsPre(true);
 78     }

#11 Updated by Youichi Kimura over 7 years ago

  • Status changed from Rejected(差し戻し) to Pending Review(レビュー待ち)

更新履歴 54c1b47624a3f4bede413df6a9180db4f8fc6711 で適用されました。

#12 Updated by Youichi Kimura over 7 years ago

更新履歴 d6956cde880be65aefc802e01b070bb9d054145f で適用されました。

#13 Updated by Yuya Watanabe over 7 years ago

  • Subject changed from will time out to be if all members join to community when has many members to the SNS. (SNSのメンバー数が多い場合、コミュニティ全員参加の処理がタイムアウトしてしまう) to will memory over to be if all members join to community when has many members to the SNS. (SNSのメンバー数が多い場合、コミュニティ全員参加の処理がメモリオーバーしてしまう)
  • Status changed from Pending Review(レビュー待ち) to Pending Testing(テスト待ち)
  • % Done changed from 50 to 70

問題ないと思います.

note-3 で言及されているメモリについては改善されたことを確認しましたが, PHP の実行時間エラーでひっかかるようになりました.現状これ以上の改善は見込めそうにないので, 本チケットでの対応をメモリオーバーについて改善したということにしておき,タイムアウトについては別チケットで改善することを検討します.

#14 Updated by Youichi Kimura over 7 years ago

これより先、コミュニティ全員参加処理での タイムアウト に関する問題は #1662 で取り扱って下さい。
メモリオーバーの問題については引き続き当チケットで扱います。

#15 Updated by Shouta Kashiwagi over 7 years ago

  • Status changed from Pending Testing(テスト待ち) to Fixed(完了)
  • % Done changed from 70 to 100

テストOKです。

Also available in: Atom PDF