0

サーバーで断続的に最大 100% の CPU を使用する Web サービスがあります。これを開発サーバーで複製することはできません。本番環境でのみ発生するようです。負荷の問題ではないかと考えましたが、一度に最大 10 人で開発をテストしています。本番環境では、ベータ版の状態で 2 人しか使用していません。無限ループがないかコードを精査しましたが、何もありません。

何度も何度も検索した後、文字列の連結が問題である可能性があると述べているこのページを見つけました。を使用した場所が 5 か所ありますが、そこのリンクでアドバイスされているようにStringWriter変更しました。StringBuilderしかし、問題はまだ発生しており、それがDataTable.WriteXML呼び出しである可能性があるかどうか疑問に思っています. 基本的に、Web サービスのすべてのメソッドはデータ テーブルに入力し、データを XML として返します。これは、サード パーティに必要な形式であるためです。呼び出しはすべて次のようになります。

Dim SB As New StringBuilder
Dim SW As New IO.StringWriter(SB)
dsSource.Tables("Test").WriteXml(SW, Data.XmlWriteMode.IgnoreSchema, True)

これは非効率ですか?これにより、CPU 使用率が 100% になりますか? それが原因である可能性がある場合、どの代替手段が最適でしょうか?

これについて何らかの監視を実行したいと思っていますが、実際には、おそらく週に 1 回発生し、ライブ サーバー上でのみ発生するため、時間をかけてパフォーマンス診断を実行する場合は、サービスが停止する時期です。稼働していないと、ユーザーは仕事を終わらせることができません。プロセスを強制終了して再生成する方がはるかに迅速かつ簡単です。

何か案は?

4

1 に答える 1

0

この本番 Web サーバーには CPU が 1 つしかありませんか? WriteXML は、他の同期/シングル スレッド コードと同様に、1 つの CPU を 100% 使用するためです。サーバーに複数の CPU があり、100 にジャンプしてしばらくそこにとどまる場合、これは別の原因である可能性があります。複数のスレッド (実行されているスレッドが多すぎる) や自分でクリーンアップする、IE; のようなものを見てください。

SW.flush
SW.Close
SW = Nothing

または USING ブロックに入れます

USING SW As New IO.StringWriter(SB)
'Your code here
END USING
于 2013-09-18T14:29:14.353 に答える