对于IIS 管理员来说,经常会碰到 Web 服务器 CPU 占用 100% 的情况,以下是个人的日常工作总结和一些解决办法,主要用来剖析 w3wp.exe(IIS )  占用 CPU 100% 的一些原因 和解决方案,希望能对你有所帮助

w3wp.exe的解释 : 全名,IIS Application Pool Process。 w3wp.exe是IIS工具的一部。w3wp.exe是在IIS(因特网信息服务器)与应用程序池相关联的一个进程,如果你有多个应用程序池,就会有对应的多个w3wp.exe的进程实例运行。这个进程用来分配大量的系统资源。

引起 w3wp.exe(IIS ) Cpu 占用 100% 的常见原因如下:

1. Web 访问量大,从而服务器压力大而引起的

这个也是最常见的情况。如果 Web 访问量大,特别是同时在线人数过多,处理的 Requests Current(当前请求数)过高,就会同时对 IIS 和服务器造成较大的压力。特别是 服务器需要不断的运算,往客户端发送生成后的页面,这些都需要占用大量的CPU 资源,从而造成  Cpu 100%

2. 动态页面(.aspx)的程序逻辑复杂程度

这个问题,对 w3wp.exe 的 CPU 占用 来说也是蛮严重的,可能在访问量级比较小的情况下并没有多少影响,但是在高并发的网站上面来说,特别是 Asp.NET 的 Requests Current 超过250 的时候,将会是 w3wp.exe 占用 CPU 的一个重要的因素。

我曾经碰到过这样一个情况,两个 web(A 和 B) 在两台 配置相当的 服务器中部署,且两个站点的访问量都很大,访问页面都集中在两个站点的两个单独页面,且这两个页面 的 IIS 连接数都是 50个左右,但是页面程序的复杂程度就错了很多,A 站点中的页面,只有几个 简单的 Repeater 绑定, 而 B 站点中的页面,则有大量的绑定、字符串过滤替换、Repeater 嵌套绑定等等。这样的情况,在 大流量、高并发的环境中,A 站点 在 IIS 连接数 达到3 W 多的时候,CPU 占用仍然是 50 % 左右,而 B 站点在 IIS 连接数 达到 7K 左右的时候,CPU 就 90% 多了,造成了 服务器的压力很大,并且 IIS 遭到了堵塞。

3. 页面程序中有死循环

如果Web 访问量不大,但是 CPU 却占用很高,那么页面中的程序肯定有死循环或者性能比较严重的 程序语句

4. Http方式下载的站点

如果站点是HTTP形式下载站,也遇到过 w3wp.exe 占用 CPU 100% 的情况

5. 服务器资源不会自动释放

有时,一个站点的流量在一个小时内陡增,结果操作系统分配了比较多的 CPU 资源,但是当流量下去后,w3wp.exe 占用的 CPU  并没有及时释放,仍然在保持在 90% 以上

6. 对 IIS 日志文件操作

比如此时分析 IIS 日志文件里面的数据,把 IIS Log 日志导入到数据库中等操作,也会造成此现象

解决办法

1. 快速定位到出问题的站点

利用iisapp -a 命令,快速的定位到出问题的站点。当然如果当前服务器只跑了一个web站点,那么此步骤可以跳过

在 cmd 中 输入 iisapp - a ,会出现下图中的信息:

当然,这个要求你没个站点,都要有独立的应用程序池与之对应,应用程序池的名称,最好就是站点的名称,如下图:

关于 IIS 的应用程序池的配置,这里就不说了,不懂的可以search  下

之后,再打开任务管理器,如下图:

观察进程为 w3wp.exe 的,查看那个CPU 占用的高,再利用其 PID 于 iisapp 中列出的结果对比,就能轻松的找出是那个站点占用的CPU过高了

2. 重启 IIS 和 应用程序池

此步是紧急处理,一般都是治标不治本的步骤。如果你的站点搭建的有
负载均衡(负载均衡、NLB),那么请在
负载均衡(负载均衡、NLB)把当前服务器下了,然后重启。如果你没有
负载均衡(负载均衡、NLB),而且你的站点又是在线的,那么,就悲剧10多秒吧,短暂的不能访问吧

3. 给页面加上页面级别缓存

如果Web
是 Asp.Net
程序,那么请一定要 <%@ OutputCache Duration="10" VaryByParam="none"%>。但是有好多人都没有用好
OutputCache ,导致经常出现下载页面的问题,所以都放弃了使用,这里有
OutputCache导致页面下载的解决办法

OutputCache
非常有用,好处有三:直接从内存读页面,页面响应速度更快,用户体验更好;大大的降低了服务器的压力,特别是对于高并发的网站,特别是 CPU
的压力;减少了 DB
的强求,降低 DB(数据库)的压力。

4. 检查页面逻辑

如果WEB
流量很低,但是还有 w3wp.exe(IIS ) CPU
占用 100%
左右的情况,那么就检查页面的代码逻辑吧,很有可能是死循环或大量的运算导致。

w3wp.exe(IIS ) CPU 占用 100% 的常见原因及解决办法的更多相关文章

  1. w3wp.exe(IIS ) CPU 占用 100% 的常见原因

    引起 w3wp.exe(IIS ) Cpu 占用 100% 的常见原因如下: 1. Web 访问量大,从而服务器压力大而引起的 2. 动态页面(.aspx)的程序逻辑复杂程度 3. 页面程序中有死循环 ...

  2. Python3 Selenium定位不到元素常见原因及解决办法

    Python3 Selenium定位不到元素常见原因及解决办法 一.问题描述 在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况: 报错信息: no such e ...

  3. Connection reset by peer的常见原因及解决办法 RST 大文件上传

    Connection reset by peer的常见原因及解决办法 Connection reset by peer的常见原因 - 简书 https://www.jianshu.com/p/263e ...

  4. Connection reset by peer的常见原因及解决办法

    转自:https://blog.csdn.net/xc_zhou/article/details/80950753 1,如果一端的Socket被关闭(或主动关闭,或因为异常退出而 引起的关闭),另一端 ...

  5. Sql Server 阻塞的常见原因和解决办法

    1. 由于语句运行时间太长而导致的阻塞,语句本身在正常运行中,只须等待某些系统资源 解决办法: a. 语句本身有没有可优化的空间 b. Sql Server 整体性能如何,是不是有资源瓶颈影响了语句执 ...

  6. Python+Selenium定位不到元素常见原因及解决办法(报:NoSuchElementException)

         在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况(报selenium.common.exceptions.NoSuchElementException ...

  7. Selenium2(webdriver)_定位不到元素常见原因及解决办法

    在做web应用的自动化测试时,定位元素是必不可少的,这个过程经常会碰到定位不到元素的情况,一般可以从以下几个方面着手解决: 1.Frame/Iframe原因定位不到元素: 这个是最常见的原因,首先要理 ...

  8. ping不通的常见原因和解决办法

    Ping是Windows.Unix和Linux系统下的一个命令.ping也属于一个通信协议,是TCP/IP协议的一部分.利用“ping”命令可以检查网络是否连通.如果ping不通则可以通过以下方式寻找 ...

  9. 服务器php-cgi.exe进程过多,导致CPU占用100%的解决方法

    再使用iis服务器中经常会出现php-cgi.exe进程过多,导致CPU占用100%,最终造成网站运行过慢甚至卡死的情况,重启iis会好一会,过一段时间久出现这种情况,为什么会出现这种情况呢,应该怎么 ...

随机推荐

  1. MEF入门之不求甚解,但力求简单能讲明白(四)

    上一篇我们已经可以获取各种FileHandler的实例和对应的元数据.本篇,我们做一个稍微完整的文件管理器. 1.修改接口IFileHandler,传入文件名 namespace IPart { pu ...

  2. .net项目引用C++ 动态链接库.dll

    项目开发时可能需要调用其动态链接库,如C++动态链接库,实现相应功能,那么在C#里怎么调用C++库里的方法呢,如下提供两种方式. 方式一:建立一个C++项目,选择dll动态链接库如下. //stdaf ...

  3. 数据库SQL server规则的创建、查看、修改和规则的绑定与松绑、删除

    用CREATE RULE语句创建规则 创建雇佣日期规则 hire_date_rule CREATE RULE hire_date_rule AS @hire_date>='1980-01-01' ...

  4. 去掉Mybatis Generator生成的一堆 example

    <table tableName="%" enableInsert="true" enableDeleteByPrimaryKey="true& ...

  5. java servlet手机app访问接口(一)数据加密传输验证

    前面几篇关于servlet的随笔,算是拉通了 servlet的简单使用流程,接下去的文章将主要围绕手机APP访问接口这块出发续写,md5加密传输--->短信验证--->手机推送---> ...

  6. java Servlet+mysql 调用带有输入参数和返回值的存储过程(原创)

    这个数据访问的功能,我在.NET+Mysql .NET+Sqlserver  PHP+Mysql上都实现过,并且都发布在了我博客园里面,因为我觉得这个功能实在是太重要,会让你少写很多SQL语句不说,还 ...

  7. Guava学习笔记目录

    Guava 是一个 Google 的基于java1.6的类库集合的扩展项目,包括 collections, caching, primitives support, concurrency libra ...

  8. GJM : 使用浏览器的计算力,对抗密码破解 [转载]

    感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...

  9. ajax的再次封装!

    js的动态加载.缓存.更新以及复用 系列有点卡文,放心会继续的.先来点更基础的,为js的加载做点铺垫. jQuery的ajax本来就很方便了,为啥还要在进一步的封装呢?这个首先要看项目的具体需求了,如 ...

  10. $('div a') 与$('div>a'),.div+.div2与.div~.div2

    $('div a'):div标签下所有层次a元素的jquery对象 $('div>a'):div标签下子元素层次a元素的jquery对象 <body> <div class=' ...