asp.net core中出现某个服务挂起无响应不超时问题

在asp.net写了ashx的服务,cpu消耗很高

后改写到到asp.net core还是一样

最后将action改为异步,以及涉及到的操作全改为异步

cpu占用降下来了,但是新的问题出现了-->一旦有并发大概 --->每次发5个请求,连续发20次,这样服务端就会有500个任务--创建500个任务,每个任务会发送1到6个http请求,各种网站,500个任务,最终可能需要发送2000到3000个请求(百度,腾讯,阿里等等网站)5秒超时

最终导致这个action响应的数据无法回发到客户端,调试的时候action可以正常执行到return,且结果正常,但是客户端就是收不到响应

多种调试排查无果--全部中断查看线程情况--一切正常

后面不知道那一次全部中断发现有任务执行的线程中断,查看对于代码,找到代码块

最后发现在异步方法中使用thread.sleep  ,但是线程并没有卡在这里,去掉这个语句改为await task.delay,同时将tcpclient创建多个放在list里面重用(对线程安全无要求)

最后发现提高并发持续发请求不会出现响应被挂起的情况

 

那么问题来了,具体是什么原因导致的,还是不清楚,为什么会出现action能正常执行完毕并return,但是请求端弄死收到响应,dotnet命令行显示请求执行完毕的时间是随时间一直同步增长,但是实际action都是毫秒级完成的

不仅如此,action响应被挂起后,其他action和其他controller还是能正常请求和响应的

难道线程死锁只锁死了负责某一个action'响应的线程么,不可能啊

一脸懵逼,只知道和线程阻塞有关,需要进一步测试,异步方法中不要出现阻塞代码,一定一定

转载于:https://www.cnblogs.com/Wind-yesterday/p/10633683.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值