アクセス集中時のfetch-google-plus.phpとfetch-pocket.phpのプロセス異常滞留

Simplicityの特徴 フォーラム 不具合報告 アクセス集中時のfetch-google-plus.phpとfetch-pocket.phpのプロセス異常滞留

4件の返信スレッドを表示中
  • 投稿者
    投稿
    • #61247 返信
      rken
      ゲスト

      WEBコンサル関連の企業に勤めている者です。

      3年以上前より、
      Simplicity2テーマを使用してブログ運営している複数のお客様より、
      「アクセス集中時に、Simplicity2テーマが原因でプログラムを止められた」
      との連絡を非常に多数うけております。
      実際にレンタルサーバー会社からの警告や
      プログラム停止の旨のメールが届いているようです。

      こちらで簡単に調査を実施したところ、Simplicity2テーマに含まれる
      「lib/fetch-google-plus.php」と「lib/fetch-pocket.php」にて
      アクセス集中時に問い合わせプロセスが正常に終了されずに滞留し
      最悪の場合、Wordpressを提供しているWEBサーバーが応答困難な
      状態になることが判明しました。

      レンタルサーバー会社に務める複数知人も本事象を把握しており
      過去数回障害となったケースもあるそうで、都度ユーザーに連絡をとっているそうです。

      【検証内容】
      ・Linux上で動作する標準的なWEBサーバー(apache、nginx + PHP)を構築
      ・デフォルト状態のWordpressをインストールし、記事を5つ作成
      ・デフォルト状態のSimplicity2.7.3テーマと子テーマを追加し、有効化
      ・キャッシュ機能(WP Super chache等)をONにした状態で、
       ひとつの記事(single.php)に対して秒間30アクセス程を発生させると
       fetch-google-plus.phpとfetch-pocket.phpへの問い合わせプロセスが多数滞留し
       秒間30アクセスを1分ほど継続したところ、応答困難な状態に陥る
       (サーバーのスペックにより捌ける数は変動すると思います)

      上記挙動を不思議に思い、さらに調査を実施したところ
      fetch-google-plus.phpとfetch-pocket.phpの呼び出し先である「lib/sns.php」の
      preg_matchの処理待ちが滞留原因となっている模様です。

      preg_matchはPHPの処理の中でも非常に遅い部類であるため
      シングルスレッド同期処理の場合、preg_matchが完了するまで
      wp_remote_get($query, $args);で取得した$resultが把持されたまま開放されず
      apacheやnginxの負荷をかけ続け、アクセスが重なるごとにさらなるpreg_matchの遅延を招く…
      というものが根本の原因と考えています。

      解決策としては、
      1. 非同期処理またはマルチスレッド処理に切り替える
       →マルチスレッド未実装環境ではPHPエラーとなる可能性大
      2. preg_matchに代わる代替関数にて処理を実施する
       →strposなどで大雑把な篩にかけてから処理を実施する等…
      の2つが有効と思います。

      しかし、Google+も8月には終了処理に入るようですし
      PocketもAPIにないものを無理に取得するものなぁ・・という状況ですので
      個人的には「fetch-google-plus.php」と「fetch-pocket.php」を標準で無効化しておき、
      有効化する方法とアクセス集中時に高負荷が発生する可能性がある旨を
      ダウンロードする方々にアナウンスしておけば、コードを修正するほどでもないのかなぁと。

      ひとまず弊社では該当利用者様に向けて
      「fetch-google-plus.php」と「fetch-pocket.php」のファイルを削除することで
      アクセス集中時の高負荷を避けられる旨のアナウンスを実施済みとなります。
      (ファイルのパーミッションを落とすだけでいいかもしれません)

      コードの修正や今後のサポートの方針については作者様にお任せしますが
      ひとまず、ダウンロードページの目立つ個所に上記のような注意を付け加えていただければ
      WEB業界各位の負担を少しでも減らせることができるのではないかな…と思い連絡次第です。

      上記、よろしくお願いいたします。

      PS. cocoonテーマが非常に使いやすくパフォーマンスも良いと顧客や弊社サポートに評判です。
        我々の業界では個人向けではほぼ鉄板テーマとなっております。
        今後のアップデートを期待しております!
        (個人情報保護の観点から、匿名での報告となり申し訳ありません)

    • #61251 返信
      わいひらわいひら
      キーマスター

      これまで、そういった具体的な報告は受けたことがなかったので、今現象については知りませんでした。
      ご迷惑をおかけしました。

      対策として以下のようなことを行いました。

      • Google+はサービスが終了するので、これを機に廃止
      • Pocketは一度カウントを取得したら3時間DBにキャッシュして、2回目以降はDBから情報を取得する(preg_matchも1つの記事に対して3時間に1度しか呼び出されない)

      対応版がこちら。
      https://wp-simplicity.com/wp-content/uploads/2019/01/simplicity2.7.4.zip
      こちらだとどうでしょう。

    • #61252 返信
      わいひらわいひら
      キーマスター
    • #61258 返信
      rken
      ゲスト

      早々にご対応いただきありがとうございます。

      v2.7.4にて同条件でのテストを行いましたところ
      想定の通りプロセス滞留が解消していることを確認できました!

      また、Pocketのtransientの初回処理も思ったよりも重くはなく
      秒間30アクセスを1分間以上継続しても応答困難な状況に陥ることはありませんでした。

      素晴らしい更新内容ですので、ぜひ公開していただきたく思います。

      公開していただきましたら、弊社でも今後の顧客からの問い合わせに対し
      「テーマの更新を促す」という方針に切り替えていきたく考えております。

    • #61261 返信
      わいひらわいひら
      キーマスター

      動作確認ありがとうございます。
      とりあえず、最新版をダウンロードページからダウンロードできるようにはしておきました。
      バージョンアップ記事は近いうちに書ければと思います。

4件の返信スレッドを表示中
返信先: アクセス集中時のfetch-google-plus.phpとfetch-pocket.phpのプロセス異常滞留
あなたの情報:




スポンサーリンク
アドセンス(大)
アドセンス(大)