検索

ホームページ  >  に質問  >  本文

CPUサージの理由 - コードログ

通信の最後に epoll モデルを使用します。その後、epoll がリクエストを処理するときに、スレッド プール内のスレッドが上位層のサービスを呼び出します。ネットワーク通信を伴うため、ざっくりとした処理になります 1リクエスト10ms以内

そのようなモデルでは、トラフィックが増加したときに CPU が急激に増加しますか?

背景: 私の CPU 使用率は約 75% (トラフィック: 20 ~ 22Mbps)、トラフィックが 25Mbps に増加すると、CPU はすぐにいっぱいになります。 。トラフィックの増加は 15% 未満であるにもかかわらず、CPU は 25% 急増しているため、これは予想どおりではありません。

PHP中文网PHP中文网2749日前642

全員に返信(1)返信します

  • 阿神

    阿神2017-05-16 13:29:40

    ご参考までに、私の見解を簡単に説明させてください:
    1: まず、リクエストが IO 集中型であるか、CPU 集中型であるかを検討します。私が話している IO 集中型とは、メッセージの送受信、つまり通信のために読み取りと書き込みが必要なネットワーク IO を指します。たとえば、CPU 集中型の場合は、結果を生成するために計算が必要で、時間がかかります。
    2: これが最初のタイプの IO 集中型である場合、すべてのリクエストを処理のためにスレッド プールに渡す必要はないと思います。ファイルの読み取りや書き込みなど、時間のかかるディスク IO 操作がない場合は、スレッド プールが使用されないこともあります。このように、スレッドごとに 1 つのループ モデルが最も効率的であることは間違いありません。すべての読み取りと書き込み (ファイルの読み取りではなく、ネットワーク データの読み取りと書き込み) とスケジュールされたイベントが 1 つの EPOLL で完了します。
    3: CPU を集中的に使用する場合は、thread_pool を使用しても問題ありません。これは、設定するスレッドとコードの数によって異なります。

    この質問は実際の環境がなければ答えるのが困難です。私はただアイデアを引き出し、間違いを指摘しようとしているだけです。

    返事
    0
  • キャンセル返事