none
w3wp.exe 与 sqlservr.exe 占用CPU和内存均比较高,CPU联动占用忽高忽低,内存SQLSERVR.EXE占用1,725,626K,是怎么回事? RRS feed

  • 问题

  • w3wp.exe 与 sqlservr.exe 占用CPU和内存均比较高,CPU联动占用忽高忽低,内存SQLSERVR.EXE占用1,725,626K?

    服务器情况:

    新机器,新安装win server 2003 系统,内存12G,  4核CPU inter X  E5506

    sql server 2008 只运行了几个数据库,只做了数据备份操作。

    IIS 给每个程序设置单独的应用程序运行池设置(问题1:系统默认设置,之前经常出现回收失败,不知可有改进设置的方法?)

    w3wp.exe 占用内存:276,862 左右,  会不停的跳动占用CPU,跳动值在(1% / 2%  至  10% / 20% / 30% / 40%)  这些值之间来回跳动,

    sqldervr.exe占用内存约1.7G,

    w3wp.exe 与 sqlservr.exe 占用CPU 会联动反应,

    问题2: 请问大家w3wp.exe 与 sqlservr.exe 占用内存、CPU高是否正常? 是什么原因导致? 有什么解决方法?

    问题3:SQLSERVER 未设置最大占用内存,系统默认设置,看了一下,好像默认设置比物理内存还大,不知道这个会不会有什么影响?

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

     

    问题4:想采用 iisapp -a 查看是哪个应用程序池占用高,

    但系统报:CScript 错误: 初始化 Windows 脚本宿主失败。 (加载类型库/DLL 时出错。)

    这个是什么原因,这么解决?

    一次问了不少问题,还望谅解,敬候专家指教。

     

     

    2010年12月29日 9:50

全部回复

  • 问题4: 已经解决,是由于杀毒软件保护导致的。 停用就可以了。

    请高手指教问题1、2、3。

    2010年12月29日 10:48
  • 问题1:系统默认设置,之前经常出现回收失败,不知可有改进设置的方法?

    这个回收时间可以设置长一些,系统默认设置也没什么问题。

    问题2: 请问大家w3wp.exe 与 sqlservr.exe 占用内存、CPU高是否正常? 是什么原因导致? 有什么解决方法?

    一个好的程序设计,应该是程序本身对cpu利用率高,而数据库对cpu占用底。iis进程占用cpu这个问题不大,可能是请求比较多,或者有复杂运算,数据库占cpu高这个一般不合理,涉及复杂计算最好不要由数据库来做,或者是你的查询不够优化,(这个时候往往IO也高)。尝试优化程序和SQL可以缓解这些问题。

    问题3:SQLSERVER 未设置最大占用内存,系统默认设置,看了一下,好像默认设置比物理内存还大,不知道这个会不会有什么影响?

    推荐给sql设置最小内存使用,一般预留2G内存给系统就可以了,其他全部分配给SQL吧。

     

     


    family as water
    2010年12月29日 14:17
  • It's not good practice to run iis and sql on same machine.
    2010年12月29日 18:29
  • It's not good practice to run iis and sql on same machine.

    To:rmiao

    是啊,仁兄,不过目前就这一台服务器。~~

     

    2010年12月30日 0:57
  • 问题1:系统默认设置,之前经常出现回收失败,不知可有改进设置的方法?

    这个回收时间可以设置长一些,系统默认设置也没什么问题。

    问题2: 请问大家w3wp.exe 与 sqlservr.exe 占用内存、CPU高是否正常? 是什么原因导致? 有什么解决方法?

    一个好的程序设计,应该是程序本身对cpu利用率高,而数据库对cpu占用底。iis进程占用cpu这个问题不大,可能是请求比较多,或者有复杂运算,数据库占cpu高这个一般不合理,涉及复杂计算最好不要由数据库来做,或者是你的查询不够优化,(这个时候往往IO也高)。尝试优化程序和SQL可以缓解这些问题。

    问题3:SQLSERVER 未设置最大占用内存,系统默认设置,看了一下,好像默认设置比物理内存还大,不知道这个会不会有什么影响?

    推荐给sql设置最小内存使用,一般预留2G内存给系统就可以了,其他全部分配给SQL吧。

     

     


    family as water


    To: Stone Z

    多谢石兄热线解答, 

     关于 问题1:   一般怎么设置为好? 网上找了一些文档,有些说设置定时到一大早2、3点没人使用的时候回收,也有人说限制内存、CPU占有量来设置,

    但对于这个应用程序池不太了解,通常怎么设置为好?

    关于问题2: 仁兄推测得有道理,担心有程序算法有问题,不知道造成死锁会不会就

    是这样的表现? 如果能确认是这样的问题,就有方向了可以让大家去检查程序去。

    我还有一疑问, 由于是 使用的最新的SILVERLIGHT4 开发的B/S程序,.net framework4.0 ,会不会 SILVERLIGHT 这个 用户量较多时会不会占用带宽多或者是有性能问题,(个人随便想的,没有实质根据。没太多去了解所以才这样去想)

    公司有800人左右,同时访问可能会有几十人、几百人同时在线 或者其他都不好说,(不排除一些人上了就不退出)

    一般都会需要访问系统的。

    关于 尝试优化程序和SQL可以缓解这些问题?

    优化程序:一般都会从哪些方面着手?

     优化SQL 一般如何优化,一般都会从哪些方面着手?

    这些方面是新手,只了解一些枝叶片角,还请有经验的高手们指点迷津!指给我一些入门的思路或方法。

    谢谢了。

    关于问题3: 最小设置多大为宜? 我的是12G内存。DDR3

    2010年12月30日 1:20
  • What's total db size on the server? Is it 64-bit machine? If sql has high cpu usage, you can find processes with high cpu time in master.sys.sysprocesses then find out query they ran with 'dbcc inputbuffer(spid)'. Spid is from master.sys.sysprocesses, then you can check execution plan and cost of those queries. 

    2010年12月30日 1:32
  • What's total db size on the server? Is it 64-bit machine? If sql has high cpu usage, you can find processes with high cpu time in master.sys.sysprocesses then find out query they ran with 'dbcc inputbuffer(spid)'. Spid is from master.sys.sysprocesses, then you can check execution plan and cost of those queries. 


    仁兄, 数据库大小有304.8M, 机器应该是64位的,   系统装的是32位系统。

    sql 的 CPU占用没有 W3WP.EXE 占用的高,只是瞬间高于0%, 一般都会在1%,2%,这2个数字跳动, 偶尔会有10% 出现一下。

    怎么去检查 master.sys.sysprocesses, 

    我用 select * from master.sys.sysprocesses  ,查出来的里面的数据看的不是太明白。

    得再找找资料了,大家再指教。

     

    2010年12月30日 2:26
  •  If sql has high cpu usage, you can find processes with high cpu time in master.sys.sysprocesses then find out query they ran with 'dbcc inputbuffer(spid)'. Spid is from master.sys.sysprocesses, then you can check execution plan and cost of those queries.

     

    这句话怎么做?

    2010年12月30日 2:39
  • if you run 32-bit apps on 64-bit machine machine, just waste 12gb memory. Should upgrade sql to 64-bit. You can find details of sysprocesses and 'dbcc inputbuffer' in books online.  
    2010年12月30日 3:04
  • 我用 select * from master.sys.sysprocesses  ,查出来的里面的数据有如下3个占用CPU的

    spid kpid  waittime    lastwaittype                       uid  CPU  physical_io     status               cmd                           loginame
    10 2752  300            SLEEP_TASK                      1     62     0                background       BRKR TASK                      sa
    11 2724  8654336     CHECKPOINT_QUEUE          1     109   32               background       CHECKPOINT                   sa
    13 2756  54165710    BROKER_EVENTHANDLER    1      15    30               background       BRKR EVENT HNDLR          sa

    查到了占用CPU高的是 109  CHECKPOINT,  然后去

    事件查看器, 应用程序中看到有这样的警告信息:

    .....

    异常信息:
        异常类型: SqlException
        异常消息: 违反了 PRIMARY KEY 约束 'PK_AttachLog'。不能在对象 'dbo.AttachLog' 中插入重复键。
    语句已终止。

       在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
       在 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
       在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
       在 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
       在 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
       在 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
       在 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
       在 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
       在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
       在 System.Data.Mapping.Update.Internal.DynamicUpdateCommand.Execute(UpdateTranslator translator, EntityConnection connection, Dictionary`2 identifierValues, List`1 generatedValues)
       在 System.Data.Mapping.Update.Internal.UpdateTranslator.Update(IEntityStateManager stateManager, IEntityAdapter adapter)

    看到,是在获取附件的页面,添加附件获取日志的时候, 插入日志记录时检查主键时出错了。

    SQL 占用CPU高的原因应该就是这个吧!!??

    请大家帮忙排查。

    2010年12月30日 3:05
  • Checkpoint is system process, don't worry about it. Dup key is app issue, you should fix in app but it shouldn't cause high cpu time. You said that sql uses 1.7gb memory and iis uses much less, then which processes use other 10gb memory on the server?
    2010年12月30日 4:26
  • Checkpoint is system process, don't worry about it. Dup key is app issue, you should fix in app but it shouldn't cause high cpu time. You said that sql uses 1.7gb memory and iis uses much less, then which processes use other 10gb memory on the server?


    To:rmiao

    谢谢仁兄,费心了,

    目前状况是这样,重启机器后,SQL占用内存一开始是223,335K, 使用1天后发现,SQL内存占用到1,178,229K, 然后排名第二高的就是使用SILVERLIGHT4开发的程序 W3WP.EXE 占用内存261,308K,

     12G内存 目前 一共占用到2220M, 其余的内存都空闲。

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

    另:通过什么命令 可以查机器硬件 是X64,还是X86?

    怎么查win server2003 系统是X86还是X64?

     32位的系统 和运行64位的 SQLSERVER2008吗?

    SQL SERVER 2008 32位的 能直接升级到64位么?

     

     

     

     

     

     

    2010年12月30日 5:49
  • sql 占用 1.7G 内存 不算高,而且还有这么多人同时访问,sql 就是喜欢内存 有空闲的内存 就给它。 如果你的sql 是32的 就是用AWE开启内存限制。

    2010年12月30日 9:02
  • sql 占用 1.7G 内存 不算高,而且还有这么多人同时访问,sql 就是喜欢内存 有空闲的内存 就给它。 如果你的sql 是32的 就是用AWE开启内存限制。


    多谢楼上仁兄热情帮忙, 查了一下好像32位的SQL 内存只能用到4G, 12G内存好像真如楼上“rmiao” 所说是浪费了。

    怎么检查机器是64位还是32位的机器?

    我在SQL 安装界面的 选项内,选了64位的 想升级, 报系统部支持64位的, 不知道是 win server 2003 不支持 ,还是由于我已经安装了32位的数据库所导致呢?

    还请这方面哪位有经验的兄台出面指点一下!

     

    2010年12月30日 12:14
  • Run 'select @@version' in ssms, it'll tell if it's 32 or 64 bit sql. Standard edition of sql doesn't support awe, means can't use more than 2gb memory.
    2010年12月30日 18:06
  • 你的系统 是32位的吧

    2010年12月31日 8:21