精华内容
下载资源
问答
  • 如何降低W3WP.EXE占用内存和CPU?结合网上的诸多建议,主要的解决办法是:a.在IIS中对每个网站进行单独的应用程序池配置;b.合理的配置你的应用程序池;c.找出具体网站站点的程序问题。问题描述环境:win2003server+...

    如何降低W3WP.EXE占用的内存和CPU?结合网上的诸多建议,主要的解决办法是:

    a.在IIS中对每个网站进行单独的应用程序池配置;

    b.合理的配置你的应用程序池;

    c.找出具体网站站点的程序问题。

    问题描述

    环境:win2003server+IIs+ASP+MSSQL

    现象:每隔一段时间(不定,有时几分钟,有时半小时)出现一次网站打开非常缓慢,甚至有时会出现超时打不开站点,此时查看服务器端的进程,CPU占用率达到100%,其中w3wp占用超过80%,于是所有服务器端的操作也变得缓慢。

    简单解决方法:每次现象出现时,立即登录服务器直接结束w3wp进程或重启IIS服务。

    解决方案参考

    针对该类问题,具体可参考如下所述方法来逐步寻找根本的解决途径:

    1、在IIS中对每个网站进行单独的应用程序池配置,即使之互相之间不影响。(但需要注意一点:进程池越多越占用内存,由于访问网站之后往往不会立即释放内存资源。)

    2、设置应用程序池的回收时间。默认为1720小时,可以根据情况修改。同时,设置同时运行的w3wp进程数目为1。再设置当内存或者cpu占用超过多少,就自动回收内存 。

    3、设置固定时间回收进程。比如在凌晨1:00至9:00之前访问人数都比较少,影响很少小,可以设定每天在这个时间段内进行内存回收,以减少服务器因 为内存不足带来的影响。设定固定时间回收进程在IIS6中没有限制次数,所以可根据实际情况来设定时间。比如:晚上12:00,8:00,12:30,6:30等时间进行有效的进程池资源回收。

    一般来说,做完以上操作就可以解决了。但仍然会可能出现因为个别网站的程序问题,不能及时释放资源。所以我们可以找出该网站,然后调试分析其程序问题所在。

    那么,怎么样才能确定是哪一个网站呢?参考方法如下:

    1、在任务管理器中增加显示pid字段。方法为:打开任务管理器-查看-选择列-选中“PID(进程标识符)”前的复选框。这样就可以看到占用内存或者cpu最高的进程pid。

    2、在命令提示符下运行iisapp -a。注意,第一次运行,可能会提示没有js支持,点击确定进行注册,然后再次运行该命令就可以了。这样就可以看到pid对应的应用程序池。

    3、到iis中察看该应用程序池对应的网站,进行更详细的分析,具体问题具体对待。

    最后的补充

    总结一些需要注意的问题:(摘)

    1、 要限制一个站点的CPU使用,必须将该站点设置为独立应用程序池,共用应用程序池是无法限制单个站点的。IIS独立应用程序池,就需要独立的进程,非常消耗内存。独立池越多,就有越多的W3WP进程。对 于每个站点均要独立应用程序池的服务器,在一般的普通P43.0 2G内存 的普通服务器上,建议不要超过50个站点,最好30以内,不然服务器压力非常大。在配置上,我一般把资源消耗较大的网站独立一个池,一般普通BBS或者生 成HTML的系统大概5个站一个池。普通网站以及一些企业站点均共用一个池。

    2、根据wlmmc的经验,在服务器硬件允许的情况下,一般不要限制站点内存使用,这样能够保证网站运行,不会出现用户掉线情况。需要限制某站的最大虚拟内存不要小于64M,不然可能出现一些未知的错误。

    3、这些都不是根本解决办法,它的根本问题是网站程序有问题,要解决根本问题还要从程序查起。根据本文开头提到的方法查到具体的应用程序池,找到使用此应用程序池的网站,解决网站程序存在的问题,如死循环之类。

    4、除了w3wp.exe, 在调用数据库进行大量查询操作的时候,也会大量占用CPU资源,这是难免的(数据库方面的语句及结构优化不在本文讨论范围之内)。个人认为,只要不是CPU长时间占用100%, 一般在75%左右都是正常的。

    展开全文
  • 这台服务器上装了SqlServer、TFS(项目管理、远程Git库、CI、生成代理)、两个系统的整套DEV环境(六七个iis站点和八九个win服务),还有其他一些辅助服务什么的,总之负担相对较重,内存占用经常10个G以上。...

    最近遇到一个奇葩内存问题,跟了三四天,把Windbg玩熟了,所以打算分享下。

    症状简介

    我们团队的DEV开发环境只有一台4核16G的win2012r2。
    这台服务器上装了SqlServer、TFS(项目管理、远程Git库、CI、生成代理)、两个系统的整套DEV环境(六七个iis站点和八九个win服务),
    还有其他一些辅助服务什么的,总之负担相对较重,内存占用经常10个G以上。

    现象是经常报内存不足(平常明明还剩余至少5个G的内存)。
    然后我们发现有个iis站点不对劲,是一个为电商平台后台管理系统提供api接口的项目(我们的项目基本是前后端完全分离的,这个PortalApiHost为所有后台功能提供支持)。
    这个站点经常占用非常高的内存,2G,3G,甚至这次发现最高达到5G,难道是开发框架有问题?或者是业务代码哪里有严重的内存泄露?或者以前遇到过的某个Linq坑错用了IEnumerable 接口,把大量DB数据拉到内存里了?

    多次试验后,基本排除上面提到的可能性。
    因为这货内存占用较高时,我们发现所有功能一切正常。所有后台功能操作了一遍,接口响应速度非常快。日志也没记录什么相关错误,没异常,审计日志显示的执行时间也很正常。

    一切都很正常,就是内存占用高!怎么破?!

    从8月4日到8月8日,DEV服务器上进程号为15832的Ecom站点进程,经历了内存用量从启动到最高占用2个G(8月7日下班时),又回落到1.6G(8月8日早上),后继续回落到1.3G。

    证明GC正常,且无内存泄露问题。

    8月8日下午17:30左右再次查看15832,内存占用达到5G,无论如何都是有问题的了,需要继续跟进。

    Windbg搞起来

    为了查明这个奇葩的高内存问题,我们尝试了各种工具,这里主要讲下WinDbg

    1. 下载winsdksetup.exe
    2. 安装,只选择Debugging Tools for Windows
    3. 配置环境变量,符号表路径_NT_SYMBOL_PATH = symsrv * symsrv.dll * d:\symbols * http://msdl.microsoft.com/download/symbols
    4. 以管理员身份启动windbg,附加进程(如果提示调试器只能有一个,很有可能这个进程是从VS启动的,可以在VS那边换成不调试启动),直接输入进程号(PID)
    5. 也可以离线化,先创建iis进程转储文件w3wp.dmp(任务管理器中右键目标进程即可看到,注意完成后复制转储文件的路径),再用windbg Open Crash Dump File
    6. 先用 .loadby sos clr 加载调试DotNet必须的dll。(如果是.net framework 2.0及以前的程序,将clr换成mscorwks)
    7. .loadby sos clr 不好用的话,也可以.load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\sos.dll 指定具体路径
    8. 调试结束时,关闭windbg前应该 debug菜单 -> detach debugee,否则进程会崩溃,dump文件无妨。



    Windbg命令笔记

    有了windbg,怎么开始?具体过程和windbg的输出就不记录了,占篇幅太长。
    那么在使用windbg,面对如此多的输出,我们重点看什么?重点看统计信息,几乎每个命令的输出最后都会有统计信息,一般按对象占用字节数大小升序排列。

    这里记一些常用命令:

    .loadby sos clr  //加载.net framework 调试dll,clr对应.net 4.0及以上,.net 4.0以前用 mscorwks
    !eeheap         //查看.net堆信息, 选项 -gc 只看托管堆gc heap, -loader 只看loader heap
    !heap -s        //基本堆状态
    !dumpdomain     //查看AppDomain及程序集加载信息
    !dumpheap -mt 00000011 //查询method table !dumpheap -strings //查询所有字符串对象 !dumpheap -stat //堆内对象统计 !gcroot 00000011 //查询指定地址对象是被谁调用或者实例化的 !do 00000012 //查看指定地址内容 !dumpmodule 00000013 //查看指定模块

    往内存溢出方向使用这些命令尝试了几十次后,终于发现!dumpdomain有些异常:
    前面说的5G大小的dump文件,copy!dumpdomain的输出经过grep ^Domain过滤,居然有17个AppDomain,

    [wbc@mbp:~]$grep ^Domain data3
    Domain 1:           000000fae3c28510 Domain 2: 000000ff2ea50480 Domain 3: 000000ff32481580 Domain 4: 000000ff3545b2c0 Domain 5: 000000ff35bab0c0 Domain 6: 000000ff3abaec40 Domain 7: 000000fae3bf01d0 Domain 8: 000000ff3c95e560 Domain 9: 000000ff3ea0d170 Domain 10: 000000ff40d31e80 Domain 11: 000000ff42b36a20 Domain 12: 000000ff43d65a00 Domain 13: 000000ff45eba410 Domain 14: 000000ff46a4f080 Domain 15: 000000ff48524090 Domain 16: 000000ff4800aac0 Domain 17: 000000ff43d74920 [wbc@mbp:~]$

    难道是CI发布密集,AppDomain来不及卸载?(等等!发布后进程没回收?这是webdeploy的作用?)

    总结

    和同事多次发布-回滚-发布-回滚...验证后,总结:

    (这条是猜测,是IIS的作用还是webdeploy的作用未经证实)
    IIS 通过webdeploy方式发布时,不会回收进程,会自动增加新的AppDomain和卸载旧的AppDomain。然而,在短时间内密集发布,可能导致旧的AppDomain来不及卸载,再加上服务器本身如果负载较高,cpu比较紧张的话,加载新AppDomain及其相关程序集(需要编译IL)就会非常占用内存。

    解决方法:

    在每次发布后,确保回收应用程序池。
    msdeploy远程回收应用程序池

    其他优化点(查内存,查出来几个非主要问题,也是可优化的地方):

    1. 针对iis站点的进程,合理设置cpu关联,可以减少托管堆数量(和可用cpu核心数量相同),降低内存占用。
    2. 清理无用目录和文件,减少FCN问题
    3. 去掉Nlog异步写文件,去除不必要的nlog target或rules

    FCN File Change Notification,FCN贡献了上述5G内存占用中字符串对象的773MB内存占用。
    基本都是重复的以关键目录的更改通知。..bin dir change or directory rename..开头的类似日志的内容。

    CLR windbg中,经常可以看到很多module,这是托管模块,是c#编译后代码被CLR处理的单元

    参考

    • SOS.dll
    • 《CLR via C#》
    • 极力推荐李争老师:《微软互联网信息服务(iis)最佳实践》,第9章开始,后半本都是windbg的使用范例,满满干货。

    追记莱特大神提醒

    numa跨越可能引起性能问题

    Numa 简介
    非一致性内存访问 (NUMA) 是一种计算机系统体系结构,该体系结构适用于多处理器设计,此类设计中某些内存区域具有更大的访问延迟。 这取决于系统内存和处理器互连的方式。 某些内存区域直接连接到一个或多个处理器,而所有处理器通过各种类型的互连构造相互连接。 对于较大的多处理器系统,这种排列方式会减少内存争用并提高系统性能。
    NUMA 体系结构将内存和处理器分组,称为 NUMA 节点。 从系统中任何单个处理器的角度来看,与该处理器位于相同 NUMA 中的内存称为本地,而包含在其他 NUMA 节点中的内存称为远程。 处理器可以更快地访问本地内存。
    通常扩展为利用许多处理器和大量内存的大多数现代操作系统和许多高性能应用程序(例如 Microsoft SQL Server)都包括可识别和适应计算机 NUMA 拓扑的优化功能。 若要避免远程访问损失,NUMA 感知应用程序会尝试为数据分配内存并计划处理器线程,以在相同的 NUMA 节点中访问该数据。 这些优化功能可最大程度地减少内存访问延迟并减少内存互连流量。


    原文地址为:http://www.cnblogs.com/personball/p/7455941.html

    转载于:https://www.cnblogs.com/focus-lei/p/7476997.html

    展开全文
  • 由于win8以上系统在任务管理器中已经屏蔽了具体的IIS网站的进程,在进程以及详细中无法区分是哪个站点了,所以我们需要先知道各站点对应的进程pid,然后再到任务管理器中根据具体的pid查看资源占用情况。 具体操作...

    由于win8以上系统在任务管理器中已经屏蔽了具体的IIS网站的进程,在进程以及详细中无法区分是哪个站点了,所以我们需要先知道各站点对应的进程pid,然后再到任务管理器中根据具体的pid查看资源占用情况。

    具体操作方法:

    1.win微标+x,选择 命令提示符(管理员)(A

    2.在cmd窗口中输入下面命令,可以直接复制,即可查看所有运行中的站点的pid:

    c:\Windows\System32\inetsrv\appcmd list wp
    

     

     注意事项:

    1.命令提示符必须是管理员权限

    2.如果输入命令后无响应,请检查第一步。如果确定是管理员权限,则有可能是你的站点无人访问,自己先访问下,在执行命令即可。

    转载于:https://www.cnblogs.com/maomao999/p/7088522.html

    展开全文
  • 今天有朋友问我他的服务器网站访问很卡,内存及CPU占用不能及时释放,从而导致服务器响应速度很慢,这里简单介绍下,方便需要的朋友
  • 再设置当内存或者cpu占用超过多少,就自动回收内存 一般来说,这样就可以解决了。但仍然会出现个别网站因为程序问题,不能正确释放。 那么,怎么样才能找到是哪一个网站的? 1、在任务管理器中增加显示pid字段。就
  • 小网站,使用iis6,asp语言,发现最近网站响应很慢,w3wp进程占用内存很高,怎么回事
  • 初步判断内存一点点增多可能是因为有未释放的资源一直在占用内存,而cpu居高不下可能是因为执行了耗时的操作。 下面我们就使用ANTS Performance Profiler和ANTS Memory Profiler这两个工具来分析...

    一、前言

    最近一段时间,网站经常出现两个问题:

    1.内存占用率一点点增高,直到将服务器内存占满。

    2.访问某个页面时,页面响应过慢,CPU居高不下。

    初步判断内存一点点增多可能是因为有未释放的资源一直在占用内存,而cpu居高不下可能是因为执行了耗时的操作。

    下面我们就使用ANTS Performance Profiler和ANTS Memory Profiler这两个工具来分析具体原因。

    --------------------------------------------------------

    工具下载地址:ANTS Performance Profiler 8 安装包+激活工具+教程

    官方文档:https://documentation.red-gate.com/dashboard.action

    需要注意的是:安装完成后会有两个工具,如下图:

    二、CPU分析

     我们打开内存分析工具,如下:

    点击New profiling session 按钮:

    点击Start profiling 按钮结果如下:

    从上图授权的方法是最耗时也是请求最频繁的方法,针对这种现象我们可以把用户的权限放在session中从而减少连接数据库的次数,进而提高性能

     通过分析我们可以找出最耗时的方法,最耗时的请求URL,最耗时的sql语句,通过这些分析我们可以轻松找出程序的性能短板,从而有针对性的进行优化

    三、内存分析

     启动内存分析工具:

     

    点击Start profiling 按钮结果如下:

     

    点击Class list,我们可以看出哪些类型的数据占用的内存最高:

     

     点击上图画圈的地方如下:

    双击上图中的绿条,结果如下:

    将图放大到绿色的地方结果如下:

     

    通过上述方法,我们可以找出需要改进的地方,针对性的进行优化

     

    来源:http://www.cnblogs.com/eggTwo/p/6090245.html?utm_source=itdadao&utm_medium=referral

     

    转载于:https://www.cnblogs.com/lidj/p/7125397.html

    展开全文
  • IIS Worker Process进程占用内存达99%。 解决方式:修改应用程序池的高级设置-回收-专用内存限制。我设置在800MB,当达到专用内存限制数时,启动自动回收机制。
  • 解决 IIS Worker Process 内存占用达到99%的问题
  • 80端口被system进程占用/IIS占用

    万次阅读 2015-11-09 22:29:48
    我在用wamp,后来经过一步步的排查,调试Apache里面的httpd.conf发现是80端口被占用,之后一直用8088端口,但是很不方便,...发现是system进程占用80端口,之后开始一步步寻找如何结束system进程及释放80端口的方法。
  • 解决iis内存占用过大的问题--ZT

    千次阅读 2019-07-18 09:13:00
    解决iis内存占用过大的问题 在IIS6下,经常出现w3wp的内存占用不能及时释放,从而导致服务器响应速度很慢。今天研究了一下,可以做以下配置:1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。2、...
  • IIS6下,经常出现w3wp.exe的内存及CPU占用不能及时释放,从而导致服务器响应速度很慢。 解决CPU占用过多: 1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。 2、设置应用程序池的CPU监视,不...
  • 已经碰见了好几次,在Exchange2007的场景中,前端角色所在服务器的w3wp.exe进程总是占用大量内存,以至于触发反压组件,停止了正常的邮件流投递,造成业务中断。 终于下决心查一下到底问题问题出在哪块,虽然...
  • 关于要修改IIS的虚拟内存,此问题无异于要配置IIS应用程序池了,否则的话,服务器经常产生“应用程序池 'DefaultAppPool' 提供服务的进程关闭时间超过了限制。进程 ID 是 '3504'。”的错误,导致iis处于假死状态,...
  • 基本上,我注意到IIS应用程序池为我们运行的api占用了大量内存。我有一个Web api方法,它返回一个客户列表。public async Task GetCustomerList(){List dtoCustomers = await customerService.GetCustomers();return...
  • 公司最近IIS出了个很奇怪的问题,但是没有追查到原因,所以要求对IIS添加更为完善的监控。 以下监控都是通过抓取Windows机器中性能监视器的值得到的结果,所以不需要写脚本。 性能监视器介绍: ...
  • ![](https://img-ask.csdn.net/upload/201805/15/1526394065_734946.png) 没有头绪,英文工具看不懂……,求跟进办法和修改意见。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,597
精华内容 5,838
关键字:

iis进程占用内存