IISでは、System.Random.NextBytesはCPU使用率が高くなります

youbl

今日、私のIISサイトはhign cpuを使用していて、私のサーバーは非常に遅かったです!そして、タスクマネージャからダンプを取得し、IISResetを実行すると、質問が解決されました。

windbgでは、!runawayを使用して、長時間実行されたスレッドを検索します。たとえば、ここに画像の説明を入力します。

そして、!clrstackを使用して、上位10個のスレッドが次のコードを実行していたことを確認します:System.Random.NextBytes(Byte []))、次のようになります。

Thread  30
Current frame: (MethodDesc 00007ffb5252c418 +0x20 System.Random.InternalSample())
Child-SP         RetAddr          Caller, Callee
000000487470b460 00007ffb531d8138 (MethodDesc 00007ffb5252c458 +0x28 System.Random.NextBytes(Byte[]))
000000487470b4b0 00007ffaffafe87a (MethodDesc 00007ffafeeb4e20 +0x4a Pinpoint.Core.Util.SpanIdUtil.GetNewSpanId())
000000487470b4e0 00007ffb014a53fb (MethodDesc 00007ffafeeb4e30 +0x1b Pinpoint.Core.Util.SpanIdUtil.GetNextSpanId(Int64, Int64))
000000487470b520 00007ffb014a5370 (MethodDesc 00007ffafeeb4150 +0x30 Pinpoint.Core.TraceId.GetNextTraceId())
000000487470b5a0 00007ffaffae4dab (MethodDesc 00007ffaff317ed0 +0x1cb Mike.Pinpoint.Plugin.WebRequestPlugins.TraceHttpWebRequest.BeforeGetResponse(System.Net.HttpWebRequest))
000000487470bbb0 00007ffb529444e0 (MethodDesc 00007ffb52535888 +0x80 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(System.Object, System.Object[], System.Object[]))
000000487470bcf0 00007ffb529444e0 (MethodDesc 00007ffb52535888 +0x80 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(System.Object, System.Object[], System.Object[]))
000000487470bd60 00007ffb5292f4ee (MethodDesc 00007ffb52535870 +0x8e System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo))
000000487470bde0 00007ffaffae4b79 (MethodDesc 00007ffaff318238 +0x99 Mike.Pinpoint.Plugin.WebRequestPlugins.TraceFilterImpl.BeforeGetResponseForFilter(System.Net.HttpWebRequest))
000000487470bdf0 00007ffb528f93e0 (MethodDesc 00007ffb526b1270 +0x120 System.IO.StreamWriter.Dispose(Boolean))

そして、これが私の元のコードです:

using System;

namespace Pinpoint.Core.Util
{
    public class SpanIdUtil
    {
        private static readonly Random rnd = new Random(Environment.TickCount);
        public const long Null = -1;

        public static long GetNewSpanId()
        {
            byte[] buf = new byte[8];
            rnd.NextBytes(buf);
            long newId = BitConverter.ToInt64(buf, 0);
            return newId;
        }

        public static long GetNextSpanId(long spanId, long parentSpanId)
        {
            long newId = GetNewSpanId();

            while (newId == spanId || newId == parentSpanId)
            {
                newId = GetNewSpanId();
            }
            return newId;
        }
    }
}

誰かが私にこのエラーの原因を教えてもらえますか?これは1回だけ発生したことに注意してください。

イアンマーサー

Randomスレッド間で同じインスタンスを共有しているため、ここ説明するようにランダムクラス内で問題が発生し、ゼロを返すことができなくなる可能性があります。ランダムはスレッドセーフではありません。

個人的には、サーバーアプリでは、カウントダウンしてゼロになると例外をスローするガードなしでwhileループを使用することは決してありません。ループが終了することを(数学的に)証明できない限り、サーバーアプリではループが終了すると、スレッドが永久に失われるため、ループがスタックしないように注意する必要があります。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

SetTimeout()はCPU使用率が高くなります

分類Dev

root.query_pointer()._ dataはCPU使用率が高くなります

分類Dev

CPU使用率は非同期APIで非常に高くなります

分類Dev

Kotlin-コルーチンは、Kotlin 1.3への移行後、DefaultDispatcherでCPU使用率が高くなります

分類Dev

GCFrameでスタックしたスレッド数が多いと、CPU使用率が高くなります

分類Dev

17.10でYouTubeを視聴すると、FirefoxのCPU使用率が非常に高くなります

分類Dev

Nodemonこれにより、CPU使用率が高くなる可能性があります。使用を減らすには--watch

分類Dev

Obj-Cメソッドの呼び出しは非常に遅く、CPU使用率がはるかに高くなりますか?

分類Dev

Apache Stormが非アクティブ化されたトポロジは、CPU使用率が高くなります

分類Dev

ikecは、バックグラウンドプロセスとして開始すると、CPU使用率が高くなります

分類Dev

Windows10ではPythonのCPU使用率が0になります

分類Dev

IceweaselのStackoverflowがXorgのCPU使用率を高くするのはなぜですか?

分類Dev

IceweaselのStackoverflowがXorgのCPU使用率を高くするのはなぜですか?

分類Dev

Ajaxは1秒あたりにリクエストを送信し、CPU使用率を高くします

分類Dev

ズームを使用すると、CPU使用率がランダムに高くなり、再起動するまで終了しません。

分類Dev

ゲームの更新速度をロックすると、CPU使用率が高くなります。何もしていないときにスレッドをスリープ状態にするにはどうすればよいですか?

分類Dev

tarのCPU使用率は低いが、システム負荷が高いのはなぜですか?

分類Dev

dwm.exeはディスプレイを複製するときのみGPU使用率が高くなります

分類Dev

CPU使用率が高いと、仮想マシンの速度が低下するのはなぜですか?

分類Dev

並列処理によってCPU使用率が100%になる可能性はありますか?

分類Dev

USB 3.0ポートがCPU使用率を高めているのはなぜですか?

分類Dev

ApplicationInsightsのパフォーマンスカウンターコレクションがCPU使用率を高くしているのはなぜですか

分類Dev

CPU使用率が高い根本的な原因。より信頼できる測定値:WindowsタスクマネージャーまたはProcess Explorer?

分類Dev

psとtopは異なるCPU使用率を提供します

分類Dev

openjdkzgcでのCPU使用率が高い

分類Dev

Jenkinsは、CPU使用率が高いときにKubernetesノードをスタックさせます

分類Dev

負荷は高いがCPU使用率は低い

分類Dev

OneDriveSetup.exeは高いCPU使用率を引き起こします

分類Dev

Wird Chromeサービスはシステムの速度を低下させ(CPU使用率12%)、使用できなくなりますか?

Related 関連記事

  1. 1

    SetTimeout()はCPU使用率が高くなります

  2. 2

    root.query_pointer()._ dataはCPU使用率が高くなります

  3. 3

    CPU使用率は非同期APIで非常に高くなります

  4. 4

    Kotlin-コルーチンは、Kotlin 1.3への移行後、DefaultDispatcherでCPU使用率が高くなります

  5. 5

    GCFrameでスタックしたスレッド数が多いと、CPU使用率が高くなります

  6. 6

    17.10でYouTubeを視聴すると、FirefoxのCPU使用率が非常に高くなります

  7. 7

    Nodemonこれにより、CPU使用率が高くなる可能性があります。使用を減らすには--watch

  8. 8

    Obj-Cメソッドの呼び出しは非常に遅く、CPU使用率がはるかに高くなりますか?

  9. 9

    Apache Stormが非アクティブ化されたトポロジは、CPU使用率が高くなります

  10. 10

    ikecは、バックグラウンドプロセスとして開始すると、CPU使用率が高くなります

  11. 11

    Windows10ではPythonのCPU使用率が0になります

  12. 12

    IceweaselのStackoverflowがXorgのCPU使用率を高くするのはなぜですか?

  13. 13

    IceweaselのStackoverflowがXorgのCPU使用率を高くするのはなぜですか?

  14. 14

    Ajaxは1秒あたりにリクエストを送信し、CPU使用率を高くします

  15. 15

    ズームを使用すると、CPU使用率がランダムに高くなり、再起動するまで終了しません。

  16. 16

    ゲームの更新速度をロックすると、CPU使用率が高くなります。何もしていないときにスレッドをスリープ状態にするにはどうすればよいですか?

  17. 17

    tarのCPU使用率は低いが、システム負荷が高いのはなぜですか?

  18. 18

    dwm.exeはディスプレイを複製するときのみGPU使用率が高くなります

  19. 19

    CPU使用率が高いと、仮想マシンの速度が低下するのはなぜですか?

  20. 20

    並列処理によってCPU使用率が100%になる可能性はありますか?

  21. 21

    USB 3.0ポートがCPU使用率を高めているのはなぜですか?

  22. 22

    ApplicationInsightsのパフォーマンスカウンターコレクションがCPU使用率を高くしているのはなぜですか

  23. 23

    CPU使用率が高い根本的な原因。より信頼できる測定値:WindowsタスクマネージャーまたはProcess Explorer?

  24. 24

    psとtopは異なるCPU使用率を提供します

  25. 25

    openjdkzgcでのCPU使用率が高い

  26. 26

    Jenkinsは、CPU使用率が高いときにKubernetesノードをスタックさせます

  27. 27

    負荷は高いがCPU使用率は低い

  28. 28

    OneDriveSetup.exeは高いCPU使用率を引き起こします

  29. 29

    Wird Chromeサービスはシステムの速度を低下させ(CPU使用率12%)、使用できなくなりますか?

ホットタグ

アーカイブ