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'响应的线程么,不可能啊

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

posted on 2019-03-31 22:23  喜洋洋2012  阅读(1147)  评论(0)    收藏  举报