プロジェクト

全般

プロフィール

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

完了

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

Kiwa Sakai さんが14年以上前に追加. ほぼ13年前に更新.

ステータス:
Fixed(完了)
優先度:
Normal(通常)
担当者:
対象バージョン:
開始日:
2010-04-02
期日:
進捗率:

100%

予定工数:

説明

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

再現環境

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

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


関連するチケット 2 (1件未完了1件完了)

関連している OpenPNE 3 - Backport(バックポート) #1660: will time out to be if all members join to community when has many members to the SNS. (SNSのメンバー数が多い場合、コミュニティ全員参加の処理がタイムアウトしてしまう)Fixed(完了)Masato Nagasawa2010-04-02

操作
関連している OpenPNE 3 - Enhancement(機能追加・改善) #1662: コミュニティ全員参加処理がタイムアウトで中断されてしまう問題の改善Pending Review(レビュー待ち)Shinichi Urabe2010-10-06

操作

Rimpei Ogawa さんが14年以上前に更新

  • 3.6 で発生するかYes にセット

Masato Nagasawa さんが約14年前に更新

  • ステータスNew(新規) から Accepted(着手) に変更
  • 担当者Masato Nagasawa にセット
  • 対象バージョンOpenPNE 3.7.0 にセット

Masato Nagasawa さんが約14年前に更新

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

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

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

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

Masato Nagasawa さんが約14年前に更新

  • トラッカーBug(バグ) から Enhancement(機能追加・改善) に変更

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

Masato Nagasawa さんが約14年前に更新

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

Masato Nagasawa さんが約14年前に更新

  • ステータスAccepted(着手) から Pending Review(レビュー待ち) に変更
  • 進捗率0 から 50 に変更

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

Hiroki Mogi さんが約14年前に更新

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

Yuya Watanabe さんがほぼ13年前に更新

  • ステータスPending Review(レビュー待ち) から Rejected(差し戻し) に変更
  • 担当者Masato Nagasawa から Youichi Kimura に変更

レビューしました.

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

Youichi Kimura さんがほぼ13年前に更新

  • ステータスRejected(差し戻し) から Pending Review(レビュー待ち) に変更

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

Yuya Watanabe さんがほぼ13年前に更新

  • ステータスPending Review(レビュー待ち) から 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     }

Youichi Kimura さんがほぼ13年前に更新

  • ステータスRejected(差し戻し) から Pending Review(レビュー待ち) に変更

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

Youichi Kimura さんがほぼ13年前に更新

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

Yuya Watanabe さんがほぼ13年前に更新

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

問題ないと思います.

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

Youichi Kimura さんがほぼ13年前に更新

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

Shouta Kashiwagi さんがほぼ13年前に更新

  • ステータスPending Testing(テスト待ち) から Fixed(完了) に変更
  • 進捗率70 から 100 に変更

テストOKです。

他の形式にエクスポート: Atom PDF