WCF 无法响应的解决方案

解决问题: 第一步找到问题。

环境:用户访问网站调用wcf服务,wcf服务中的一些方法使用httpwebquest。

现象:wcf服务频繁出现Server Too Busy错误或wcf服务响应还是很慢,           有时候要等上30—60秒才能打开Service.svc页。

调查:服务器的资源消耗却很低,CPU使用只有10%左右,           不可能是因为访问量过大引起的。

          方向1:服务器的资源消耗怎样?(是否有其他的应用程序导致的)                       打开Event viewer 导出Log 数据。                       如果是内存的问题,直接拦截用微软的内存释放程序释放。

          方向2:IIS 资源消耗 打开站点,找到Logs  (并发量)                      %SystemDrive%\inetpub\logs\LogFiles                      区分windows 调用的原因还是Portal 调用的原因,还是更新status

          方向3:线程阻塞的问题                       EMAY 的返回status  量,更新慢会阻塞,                       目前是设计有锁   

             方向4:其他Portal调用,暂停其他客户端。                       发布的时候连接错了Windows 一直去Pin                      

          方向5:连接数过多导致的。             可以跟踪             database engine tuning advisor

猜想问题: 1. 初步判断为同时连接过多引起的线程阻塞引起。修改web.config中的httpRuntime配置节中的appRequestQueueLimit参数后,Server Too Busy 的错误得到解决。此参数默认从machine.config中继承,默认值为100,改为1000后Server Too Busy的错误不再出现。 System.Net.ServicePointManager.DefaultConnectionLimit = 2000;

虽然服务器忙的错误解决了,但是站点响应还是很慢,有时候要等上5—10秒才能打开页面。分析原因应该是同时请求过多,而IIS工作线程不足的原因引起,修改machine.config中processModel配置节maxWorkerThreads参数为200后站点响应速度慢的问题得到解决。此参数默认值为20,可根据服务器硬件配置于压力大小适当调整。 分析原因,是因为站点程序中使用了HttpWebRequest请求外部服务器的页面,而这个操作是相当耗时的(外部服务器响应慢是主要原因)。当访问者的请求到达ASP.NET工作进程后,ASP.NET首先会检查是否有空余的工作线程(WorkerThread),如果有的话,就交给一个空闲的工作线程去处理,如果没有空闲的工作线程,那么这个请求就会被放到请求队列(RequestQueue)中,这个时候的表现就是响应很慢。当访问量过大导致请求队列也满了的时候,ASP.NET就会抛出Server Too Busy异常了。在.NET 1.1中,默认的工作线程和请求队列分别为20和100,当运行的代码比较费时而访问量又较大的时候,这两个默认值显然就太小了。(现在的服务器硬件便宜了,一般PC服务器的吞吐量都应该远超过这个数)。这两个值可以根据服务器压力大小来进行合理配置。以调整站点吞吐量。

 

Dear CPB,

         Sandbox,DEV,Test 环境都没有遇到Timeout expired , 从数据的角度看上传7K条是不会有上传Performance Issue, 问题基本在IIS配置上,通过Yu,Qiao 协助查看了一下IIS 的Log,发现出错的用户(her1)一直处于连接的状态,此用户有超过1到2个小时处在连接的状态,但是Web应用程序本身有一个会自动超时的时限,这个时限一般是15分钟,当用户超过这个时限不使用此站点的话,那么IIS 站点在会把此应用池的连接赋值给其他访问连接,那么使得当前这个用户变得无效,一般的应用程序此时会自动掉转到登陆页面,但DDC项目没有做这样的处理,依然让其保持在自己的打开的那个页面,此时这个页面的连接,已经被IIS认定为无效了,如果去访问的话,就会出现超时的状态,在大部分情况下IIS工作进程是处于不繁忙的状态,IIS工资进程新添加一个线程供其使用,是不会出现此问题的,当IIS工作线程不足的时候,就会引起线程阻塞,就会引起出现超时的状况。

        问题出现在IIS上,解决这个问题的方案,是如何去优化IIS的工作进程,可以修改IIS默认的连接数,一般默认连接数为20,推荐修改这个默认值1000,修改IIS 连接超时的时间,一般默认为30秒,推荐修改这个默认值600秒

 

转载于:https://www.cnblogs.com/xinhua327/articles/5611758.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值