Enhancement(機能追加・改善) #927
完了will memory over to be if all members join to community when has many members to the SNS. (SNSのメンバー数が多い場合、コミュニティ全員参加の処理がメモリオーバーしてしまう)
100%
説明
コミュニティ全員参加処理(/pc_backend.php/community/addAllMember/id/:id)にて、SNSのメンバー数が多い場合にタイムアウトしてしまう。
再現環境¶
OpenPNE公式SNS http://sns.openpne.jp/¶
8410人のメンバーをid:722 に追加した際、途中でタイムアウトしてしまい3回ほど実行する必要があった
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 さんが12年以上前に更新
- ステータス を Pending Review(レビュー待ち) から Rejected(差し戻し) に変更
- 担当者 を Masato Nagasawa から Youichi Kimura に変更
レビューしました.
気になった点としてはコントローラの中で直接 メンバーID を取得している部分は MemberTable 内で定義してから使用したほうがよさそうな感じがします.
Youichi Kimura さんが12年以上前に更新
- ステータス を Rejected(差し戻し) から Pending Review(レビュー待ち) に変更
更新履歴 f015591f24dc30871fab2907f47cfd7e879598a7 で適用されました。
Yuya Watanabe さんが12年以上前に更新
- ステータス を 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 さんが12年以上前に更新
- ステータス を Rejected(差し戻し) から Pending Review(レビュー待ち) に変更
更新履歴 54c1b47624a3f4bede413df6a9180db4f8fc6711 で適用されました。
Yuya Watanabe さんが12年以上前に更新
- 題名 を 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 さんが12年以上前に更新
これより先、コミュニティ全員参加処理での タイムアウト に関する問題は #1662 で取り扱って下さい。
メモリオーバーの問題については引き続き当チケットで扱います。
Shouta Kashiwagi さんが12年以上前に更新
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
テストOKです。