Enhancement(機能追加・改善) #927
完了
will memory over to be if all members join to community when has many members to the SNS. (SNSのメンバー数が多い場合、コミュニティ全員参加の処理がメモリオーバーしてしまう)
Kiwa Sakai さんが14年以上前に追加.
12年以上前に更新.
説明
コミュニティ全員参加処理(/pc_backend.php/community/addAllMember/id/:id)にて、SNSのメンバー数が多い場合にタイムアウトしてしまう。
再現環境¶
8410人のメンバーをid:722 に追加した際、途中でタイムアウトしてしまい3回ほど実行する必要があった
- ステータス を New(新規) から Accepted(着手) に変更
- 担当者 を Masato Nagasawa にセット
- 対象バージョン を OpenPNE 3.7.0 にセット
メモリオーバーで落ちたものと思います。
communityActions::executeAddAllMember() 内の以下の行が原因と思われます。
foreach ($query->execute()->getPrimaryKeys() as $id)
MemberレコードのプライマリキーをORMを使用して取得しているため、
多くのメモリを使用しています。
数回実行後正常に完了したということなので、
この処理自体では落ちていないと思いますが、
この部分が原因でその後の処理でメモリオーバーになったものと思います。
- トラッカー を Bug(バグ) から Enhancement(機能追加・改善) に変更
チューニングの範囲なので Enhancement とします。
- 題名 を SNSのメンバー数が多い場合、コミュニティ全員参加の処理がタイムアウトしてしまう から will time out to be if all members join to community when has many members to the SNS. (SNSのメンバー数が多い場合、コミュニティ全員参加の処理がタイムアウトしてしまう) に変更
- ステータス を Accepted(着手) から Pending Review(レビュー待ち) に変更
- 進捗率 を 0 から 50 に変更
テスターテストを実施しました。
チューニングは行われているのですが、まだ環境によってはメモリオーバーが発生しているので、 #1662 にて対応していきましょう。
- ステータス を Pending Review(レビュー待ち) から Rejected(差し戻し) に変更
- 担当者 を Masato Nagasawa から Youichi Kimura に変更
レビューしました.
気になった点としてはコントローラの中で直接 メンバーID を取得している部分は MemberTable 内で定義してから使用したほうがよさそうな感じがします.
- ステータス を Rejected(差し戻し) から Pending Review(レビュー待ち) に変更
- ステータス を 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 }
- ステータス を Rejected(差し戻し) から Pending Review(レビュー待ち) に変更
- 題名 を 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 の実行時間エラーでひっかかるようになりました.現状これ以上の改善は見込めそうにないので, 本チケットでの対応をメモリオーバーについて改善したということにしておき,タイムアウトについては別チケットで改善することを検討します.
これより先、コミュニティ全員参加処理での タイムアウト に関する問題は #1662 で取り扱って下さい。
メモリオーバーの問題については引き続き当チケットで扱います。
- ステータス を Pending Testing(テスト待ち) から Fixed(完了) に変更
- 進捗率 を 70 から 100 に変更
他の形式にエクスポート: Atom
PDF