Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 调用WCF服务时,IIS工作进程(w3wp.exe)的CPU占用率达到99%_.net_Wcf_Iis 6 - Fatal编程技术网

.net 调用WCF服务时,IIS工作进程(w3wp.exe)的CPU占用率达到99%

.net 调用WCF服务时,IIS工作进程(w3wp.exe)的CPU占用率达到99%,.net,wcf,iis-6,.net,Wcf,Iis 6,我们有一个托管在IIS 6.0上的.NET 3.5 WCF服务,该服务具有basicHttp绑定。这由2.NET和2个ASP应用程序使用。当第四个应用程序(无论.NET还是ASP)启动并尝试使用它时,w3wp.exe的峰值为99%,并在几秒钟后保持不变 基于此,我们尝试将以下内容添加到.NET 2.0 machine.config中,但没有任何效果 <processModel autoConfig="false" maxWorkerThreads="500" maxIoThreads="5

我们有一个托管在IIS 6.0上的.NET 3.5 WCF服务,该服务具有basicHttp绑定。这由2.NET和2个ASP应用程序使用。当第四个应用程序(无论.NET还是ASP)启动并尝试使用它时,w3wp.exe的峰值为99%,并在几秒钟后保持不变

基于此,我们尝试将以下内容添加到.NET 2.0 machine.config中,但没有任何效果

<processModel autoConfig="false" maxWorkerThreads="500" maxIoThreads="500" minWorkerThreads="2"/>
<httpRuntime minFreeThreads="250" minLocalRequestFreeThreads="250"/>

听起来您的负载以某种方式生成了许多线程,从而导致CPU疯狂地工作以跟上它们。由于您的编辑引用了一个崩溃转储,因此您可以使用WinDbg来了解发生了什么

如果您熟悉WinDbg,并且已经安装并配置了它(),请尝试以下操作:

.loadby sos mscorwks
.prefer_dml 1
!threads
这将显示创建了多少线程。
.preference\u dml 1
允许生成类似HTML的链接,因此您只需单击即可在输出中运行适当的命令。下次运行:

!syncblk
查看哪些线程可能被阻塞。它应该在做阻塞。下一步运行类似这样的操作以获取线程32的堆栈(如果该线程是罪魁祸首):

~32e!clrstack

它应该包含在执行阻塞的线程上运行的代码的信息。说与WinDbg合作非常简单是一种非常轻描淡写的说法,但它值得努力帮助调试类似您的问题。祝你好运

听起来您的负载以某种方式生成了大量线程,从而导致CPU疯狂地工作以跟上它们。由于您的编辑引用了一个崩溃转储,因此您可以使用WinDbg来了解发生了什么

如果您熟悉WinDbg,并且已经安装并配置了它(),请尝试以下操作:

.loadby sos mscorwks
.prefer_dml 1
!threads
这将显示创建了多少线程。
.preference\u dml 1
允许生成类似HTML的链接,因此您只需单击即可在输出中运行适当的命令。下次运行:

!syncblk
查看哪些线程可能被阻塞。它应该在做阻塞。下一步运行类似这样的操作以获取线程32的堆栈(如果该线程是罪魁祸首):

~32e!clrstack

它应该包含在执行阻塞的线程上运行的代码的信息。说与WinDbg合作非常简单是一种非常轻描淡写的说法,但它值得努力帮助调试类似您的问题。祝你好运

要尝试将IIS处理与WCF服务的工作隔离开来,请创建服务的Windows服务托管版本,并查看它在类似负载下是否表现出相同的行为。如果是这样,则服务中的负载会触发CPU密集型工作。如果没有,那么您知道您有一个IIS优化问题,可以通过移动到IIS 7:)@SixtoSaez:来解决,这似乎是个好主意,但考虑到其规模,将其转换为Windows服务(或移动到IIS 7)在现阶段是不切实际的。我希望这更多地是关于ASP.NET工作线程与WCF IO线程对话方式的线程管理问题。要尝试将IIS处理与WCF服务的工作隔离开来,请创建服务的Windows服务托管版本,并查看它在类似负载下是否表现出相同的行为。如果是这样,则服务中的负载会触发CPU密集型工作。如果没有,那么您知道您有一个IIS优化问题,可以通过移动到IIS 7:)@SixtoSaez:来解决,这似乎是个好主意,但考虑到其规模,将其转换为Windows服务(或移动到IIS 7)在现阶段是不切实际的。我希望这可能更多地是关于ASP.NET工作线程与WCF IO线程对话方式的线程管理问题。谢谢您的回答。我没有使用WinDbg(在获取它的过程中),但如果它只是显示阻塞线程及其堆栈跟踪,这不是我在OP中所做的。我知道线程16是罪魁祸首,并且从.NET堆栈跟踪中,
HostedHttpRequestAsyncResult.ExecuteSynchronous
正在等待IO线程14。我只是不确定IO线程正在做什么。WinDbg在这方面有帮助吗?我不清楚问题中的堆栈跟踪属于哪个线程。如果堆栈跟踪是针对线程16的,那么它本身就在等待某个东西(线程14?)。否则,请查看线程14的堆栈跟踪以了解它正在做什么。希望是这样!syncblk输出应有助于确定死锁中涉及的任何线程。这就是使用WinDbg确实有助于假设你知道施放哪个法术的地方。谢谢你的回答。我没有使用WinDbg(在获取它的过程中),但如果它只是显示阻塞线程及其堆栈跟踪,这不是我在OP中所做的。我知道线程16是罪魁祸首,并且从.NET堆栈跟踪中,
HostedHttpRequestAsyncResult.ExecuteSynchronous
正在等待IO线程14。我只是不确定IO线程正在做什么。WinDbg在这方面有帮助吗?我不清楚问题中的堆栈跟踪属于哪个线程。如果堆栈跟踪是针对线程16的,那么它本身就在等待某个东西(线程14?)。否则,请查看线程14的堆栈跟踪以了解它正在做什么。希望是这样!syncblk输出应有助于确定死锁中涉及的任何线程。假设你知道该施放哪种法术,那么使用WinDbg真的会有帮助。