SOAP呼び出しのパフォーマンスを改善する


13

Magento 2.1のパフォーマンスに問題があります

私の店には、90.000の製品があります。これらの製品を石鹸に加えました。これを行ったとき、各記事(製品?)(要求>応答)で約7秒かかりました。要約すると、すべての製品を初期化するのに数日かかりました。

現在、すべての製品がショップにあります。数週間のうちに、記事(製品)に関するいくつかのことを更新する必要があります。石鹸でこれを再度行うと、同じ時間がかかります。更新を行うと、ショップは使用できなくなります。リクエストとレスポンスの例はこちら:https : //pastebin.com/aqnMJk98 https://pastebin.com/UAh0h8Zz

サーバーには、12コアのCPU、24 GBのRAM、およびSSDが搭載されています。Apache2 PHP7-fpmおよびMYSQLを使用したUbuntu 16.04の実行。

更新プロセスを見ると、MySQLの5つのコアが100%PHPで少し動作しており、残りはアイドル状態です。使用するRAMはごくわずかiotopであり、SSDが退屈していると言います。

データベースのパフォーマンスを見て、Magentoがデータベースへの追加プロセスで数千のコマンドを実行したことを確認しました。これでいい?

Magento CSVインポートで更新すると、はるかに高速になります。

このMagento2を高速化するにはどうすればよいですか?この状況では、このショップでうまく機能することは不可能です。


どの拡張機能を使用していますか?問題は、拡張機能の1つに関連している可能性があります。
ブニャミンイナン

@tadeus過去2年間で速度の問題を解決しましたか?そうでない場合、免責事項:私は、プロファイルやパフォーマンスを改善するための無料のユーティリティスクリプトやその他のAnalysis Servicesがあるネットワークプロファイルで言及されているWebサイトのコンテンツ作成者です。
ウィルソンHauck

回答:


1

一括インポート

あなたが言ったように、キーはバッチインポートを使用することです:

Magento CSVインポートで更新すると、はるかに高速になります。

SOAP APIを再考して、バルクモードに変更することを検討してください。たとえば、製品データを受け入れるミドルウェアを作成し、後でMagentoにフィードできるCSVファイルを生成できます。

これを支援するサードパーティの拡張機能がいくつかあります。

一般的なパフォーマンスのアドバイス

Magento自体を高速化することもできますが、それぞれの改善により1〜10%のブーストが得られます。複数の改善を行うと、メリットが倍増します。

  1. 非効率なコードがないことを確認してください
    1. コードが通知/エラー/警告を生成しないことを確認してください
    2. インストールされた拡張機能に高価なイベントリスナーがないことを確認します(サードパーティまたは自分から)。
  2. 通知と警告を削除したら、ログの無効化を検討してください。
  3. 使用していないMagentoおよびサードパーティの拡張機能を確認し、無効にすることができます。Magento2で無効にできるモジュールを確認してください参考のために。
  4. データベースサーバーがMagentoアプリケーションと同じマシン上にある場合-TCP / IP接続の代わりにLinuxソケットを使用していることを確認してください。
  5. データベースサーバーがMagentoアプリケーションと同じマシン上にない場合-PHPがデータベースを照会するたびにDNS解決を行う必要がないことを確認してください。
  6. データベースパフォーマンスチューニングのアドバイスを確認してください。perconaの記事は既に回答の1つで言及されています。https://github.com/major/MySQLTuner-perlも確認してください。
  7. magentoのインデックスモードを確認し、スケジュールに従ってインデックスに切り替え、毎晩または製品の保存時ではなくインポートの完了後にインデックスの再作成を実行します。https://devdocs.magento.com/guides/v2.2/extension-dev-guide/indexing.html#m2devgde-indexing-modes

上記のすべてが完了し、さらにパフォーマンスが必要な場合:

  • xDebugまたはblackfireを使用してアプリケーションのプロファイルを作成し、ボトルネックがどこにあるかを確認し、それらを排除してください。
  • 周りに尋ねますが、より具体的に、現時点で何を改善しようとしているのか正確に説明してください。
  • Magentoパートナーまたは認定Magento開発者にサポートを依頼することを検討してください。

0

ここでの問題は、SOAP呼び出しが非常に高価であることです。製品を追加/編集/削除するためにSOAPリクエストを起動する場合、Magentoはすべての必要な情報を取得するために多くのテーブルに参加する必要があります。この動作とPHP自体の組み合わせにより、処理する製品またはデータの数が遅くなります。

Magento自体は、トラフィックを処理するために5ノードサーバークラスター(1 x DB、4 x Webserver)を推奨しています。

AWSの場合など、水平方向にスケーリングすることをお勧めします。これはビジネスに大きな影響を与える可能性がありますが、私見ではMagentoを微調整してパフォーマンスを向上させることはできません。

AWS内では、起動するサーバーの数を管理する自動スケーリンググループの機能を使用する必要があります。データを追加するたびに、プレッシャーに対処するために新しいサーバーが起動します。AWS RDS(DBサービス)でも同じことが非常に簡単かつ迅速に行えます。

その場合、AWSはまったくオプションではないので、MagentoとPHPを微調整してみてください。以下の設定を確認することをお勧めします。


0

このリンクでは、MySQLのメモリ使用量を調整する方法について説明しています。RAMが非常に多いため、MySQLにさらに割り当てることでメリットが得られる場合があります。それは、専用のデータベースサーバーを構築するより簡単で低コストの($)ソリューションかもしれません。

https://www.percona.com/blog/2016/05/03/best-practices-for-configuring-optimal-mysql-memory-usage/

また、MySQLが一般的に実行していることのこの調整と監視を支援するために、MySQL Workbenchユーティリティが役立つ場合があります。このユーティリティはOracle / MySQLによって作成されます。ランダムなシェアウェアアプリではありません。

https://dev.mysql.com/downloads/workbench/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.