有个对响应时间要求很高的WebService接口,必须要3秒内响应,现在的情况测试得到超过3秒响应大概占5%左右。
用fiddler抓包工具测试发现一个问题如下:,
服务器收到请求->服务器开始响应的耗时 大概就是这5%里面的重要原因
基本代码如下:
然后记录日志为:
[19:32:59]可用性查询进入
[19:32:59]可用性查询开始,参数:
可以看出来抓包工具的服务器开始响应之后才进入到我的代码里面,写了第一段日志
我现在困惑的是这个:服务器收到请求->服务器开始响应 这3秒钟花在哪了,可以如何解决
服务器开始响应
应该是web service中的代码执行完成了,你可以试试在web service方法中直接return,然后测试一下响应速度
你没看明白我上面的意思,我的代码一开始就是写日志了,但是按照抓包记录,是卡主了3秒之后才进入到我的web service方法中写了第一条日志,这个跟执行代码没关系,还没到执行代码的就已经卡主了3秒了,这3秒时间现在是不知道干嘛了
@破晓幽灵: 建议在 Global.asax.cs 的 Application_Start 中也记一下日志
我刚刚按照你的说的加了一个测试方法直接return,还是一样的结果时间全部卡在:服务器收到请求->服务器开始响应上了,下面是截图:
@dudu: Global.asax.cs 的 Application_Start 也只是在第一次访问的时候会执行一次,只要不是间断很久不访问或不回收应用程序池基本不会进入这里的,跟这里关系不大
@破晓幽灵: 不好意思,当时写错了,应该是 Application_BeginRequest
@dudu: Application_BeginRequest 这个里面是空的 什么都没写,这个我最优先就检查了的
@dudu: 看下
@dudu: 我换成handler的方式也是一样慢,我原以为是web service收到请求之后需要解析路由到具体的方法可能耗时,我把一样的代码换成handler也慢,同样是卡在:服务器收到请求->服务器开始响应上了,但是我在相同的目录下放一个html静态页面就非常快
@破晓幽灵: 站点是在VS中运行的还是在IIS中运行的?
@dudu: IIS的,问题基本解决了,感谢老大的提点,虽然解决的途径跟你说的关系不大,嘿嘿,非常感谢!!非常感谢!!!
裸奔?
如果有session卡住那么也有可能卡住。或者数据库锁了?
你没看明白我上面的意思,我的代码一开始就是写日志了,但是按照抓包记录,是卡主了3秒之后才进入到我的web service方法中写了第一条日志,这个跟执行代码没关系跟数据库更没关系,还没到执行代码的就已经卡主了3秒了,这3秒时间现在是不知道干嘛了
你的日志是同步写还是异步写的?会不会是写日志造成的呢?
跟日志无关,我有测试,用一个最简单的方法测试也是很慢,访问同域名下面的静态页面很快
这个问题应该不麻烦,但是需要具体的一步步的分析,就你提供这点信息,不好快速的跟踪,具体看你的http的begin 和end 期间都做了什么逻辑,如果有和网络通信,比如读写数据库,文件读写,tcp通信,非托管资源的使用……
建议你把从http 的begin和end 之间的大概都做了什么事情能表述清楚的,仅供参考!
http 的begin和end 之间什么都没做
基本大概很可能就是写日志引起的,换成异步写日志,再看
我用一个只有返回的方法测试也是慢,跟日志/数据库这些无关
问题已搞定,问了一个大牛专家,瞬间点破了,昨晚上已经基本处理好了,感谢各位仁兄大侠的提点!!!
说说怎么解决的呀,我也遇到了
大哥看到后能说说怎么解决的吗?
楼主太不厚道。
发文讨教,别人来一起分析,最后解决了也不说如何解决的,问题在哪。实际上也是问专家,专家指点的。那专家为何要指点你呢。
怕别人也知道了,太小气
建议使用Wireshark抓包
– dudu 6年前@dudu: 我查了资料,Wireshark主要用于TCP之类的协议抓包,HTTP/HTTPS的用fiddler比较合适
– 破晓幽灵 6年前