今天下午访问高峰的时候,主站的Web服务器出现奇怪的问题,开始是2台8核8G的云服务器(ECS),后来又加了1台8核8G的云服务器,问题依旧。html
并且3台服务器特意使用了不一样的配置:1台是禁用了虚拟内存的临时磁盘云服务器,1台是启用了虚拟内存的临时磁盘云服务器,1台是禁用了虚拟内存的云盘云服务器。这样排除了磁盘IO与虚拟内存的缘由。服务器
问题的表现是这样的(如下监视截图来自Windows性能监控器Performance Monitor):性能
1. ASP.NET请求执行时间(Request Execution Time)变慢阿里云
一般请求执行时间在100ms如下,而出问题时居然达到了近1.5s,发生时间为15:18:09。云计算
2. IIS当前链接数(Current Connections)突增3d
IIS当前链接数一般在10左右,出现问题时先跳高至67,后跳高至270多,说明IIS处理请求的能力降低,开始发生的时间点是15:18:06。orm
可见IIS当前链接数突增早于ASP.NET请求执行时间变慢。htm
3. CPU占用降低blog
CPU在15:18:07到达高点以后,一直往下掉,在15:18:14掉至最低点。内存
CPU降低发生于IIS当前链接数突增以后。
4. 请求出现排队现象(Requests Queued)
Requests Queued正常状况下是0,只有在请求处理不过来的时候才会出现排队现象。请求排队开始于15:18:05,早于IIS当前链接数突增。
5. ASP.NET请求处理能力降低(Requests/Sec)
15:18:05开始,ASP.NET的请求处理能力降低,与请求排队开始于同一时间。
咱们给上面的5个现象排个序:请求处理能力降低(Requests/Sec)-> 请求排队(Requests Queued)-> 当前链接数突增(Current Connections)-> CPU占用降低 -> 请求执行时间变慢(Request Execution Time)
而后再来看另一次问题发生时的现象:
1. Requests/Sec降低(棕色)与Requests Queued出现(蓝色)
Requests Queued在高点达1007。
2. Request Execution Time变慢(紫色)与Current Connections突增(绿色)
Current Connections在高点达1586。
3. 加上CPU占用率,5个指标叠在一块儿
【分析】
Requests/Sec降低、Requests Queued上升、Request Execution Time变慢、Current Connections突增,这些说明在什么地方卡住了;而CPU占用降低说明不是由于负载高CPU处理不过来,而是卡在了其余环节,好比IO。
以前遇到比这还奇怪的“黑色10秒钟”(详见云计算之路-阿里云上:超级奇怪的“黑色10秒钟”),现象有点相似,但有2个地方不一样:
1. 此次持续时间是30秒(因此把此次问题命名为“黑色30秒”)。
2. “黑色10秒钟”期间Requests/Sec会降低为0;而“黑色30秒”期间Requests/Sec只是降低,没有为0,也就是说还在处理请求,只是由于某些资源出现瓶颈,请求处理能力降低。
以前的“黑色10秒钟”是由于虚拟化对spinlock的支持问题引发的,改用Windows Server 2012解决了问题。
此次呢?应用的问题,Windows的问题,仍是阿里云的问题?这是个问题!目前还不知道从何处下手。
期待您的宝贵建议!