网站运行一段时间后,Apache 的 httpd.exe 进程占用的内存就会越来越大,由最初的20M不断上升直到把内存占满。
重新启动服务器后 httpd.exe 占得内存又恢复到 20M,但是网站运行一段时间,占用的内存又会无限的增加。这是什么原因?怎么解决,谢谢!我的环境是:Windows Server 2003 + Apache 2.2.4 + PHP5.2.2

解决方案 »

  1.   

    在 httpd.conf 中设置MaxRequestsPerChild 1024
      

  2.   

    apache2.2.4和php5.2.2 都是很久以前的版本了 好像apache2.2.4时间并不长就出更新了 查查吧
      

  3.   

    通常在“Windows任务管理器-进程”中可以看到两个apache.exe进程,一个是父进程、一个是子进程,父进程接到访问请求后,将请求交由子进程处理。
    MaxRequestsPerChild这个指令设定一个独立的子进程将能处理的请求数量。在处理“MaxRequestsPerChild 数字”个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放,如果再有访问请求,父进程会重新产生子进程进行处理。
    如果MaxRequestsPerChild缺省设为0(无限)或较大的数字(例如10000以上)可以使每个子进程处理更多的请求,不会因为不断终止、启动子进程降低访问效率,但MaxRequestsPerChild设置为0时,如果占用了200~300M内存,即使负载下来时占用的内存也不会减少。内存较大的服务器可以设置为0或较大的数字。内存较小的服务器不妨设置成30、50、100,以防内存溢出。
      

  4.   

    通常在“Windows任务管理器-进程”中可以看到两个apache.exe进程,一个是父进程、一个是子进程,父进程接到访问请求后,将请求交由子进程处理。
    MaxRequestsPerChild这个指令设定一个独立的子进程将能处理的请求数量。在处理“MaxRequestsPerChild 数字”个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放,如果再有访问请求,父进程会重新产生子进程进行处理。
    如果MaxRequestsPerChild缺省设为0(无限)或较大的数字(例如10000以上)可以使每个子进程处理更多的请求,不会因为不断终止、启动子进程降低访问效率,但MaxRequestsPerChild设置为0时,如果占用了200~300M内存,即使负载下来时占用的内存也不会减少。内存较大的服务器可以设置为0或较大的数字。内存较小的服务器不妨设置成30、50、100,以防内存溢出。
    --------------------------------------------------------------------------------
    我的“Windows任务管理器-进程”中没有apache.exe 进程,有两个 httpd.exe 进程
      

  5.   


    你安的是Apache么?httpd.exe好像是Resin Servlet引擎的 Http Server 服务。
      

  6.   

    我引用的那个是旧的文章
    现在是 httpd.exe 这个进程的
      

  7.   

    http://imysql.cn/node/329apache设置1 KeepAlive On 设定是否要开启持续长连接,由于前面有 Squid,因此在这里把它打开2 MaxKeepAliveRequests 50 在一次持续长连接中,最多允许接收几次请求,如果设置太大的话,很可能导致 httpd
    进程持续消耗很多内存,因此可以选择一个适当的值,因为重新创建一个新的进程也是要有一定开销的3 KeepAliveTimeout 5 设定一个长连接在没有活动后等待多久自动关闭,可以设置小一点,不过跟上面的类似,如果太小的话,也会导致频繁创建新的进程
    未经测试...转帖...
      

  8.   

    换apache2.0.58试试,你用的是不是2.0.59?
      

  9.   

    我用的是Apaehce是Apache 2.2.4
      

  10.   

    还没有找到原因吗?
    我以前记得一个项目用的是APACHE2.0.59频繁的死机,后来换成2.0.58了情况就好很多。解决了记得说一下。什么问题。
      

  11.   

    是CGI方式还是ISAPI方式?
    CGI是独立进程
    ISAPI是共享进程
    建议用ISAPI方式
      

  12.   

    在windows上apache的性能并不好。
    如果可能,还是使用linux。另外,可以去掉一些不用的apache模块和php扩展,减少内存消耗。
    设置MaxRequestsPerChild减轻内存泄露造成的问题。
      

  13.   

    不是CGI,是加载为模块的。
    MaxRequestsPerChild,我设置了,但是还是不断的增长。
      

  14.   

    你换一个APACHE版本试试看,现在平均多久死一次?
      

  15.   

    Apache中APR_Pool作的很好的,是你的配置问题
      

  16.   

    不排除与其他软件冲突的可能,请查看 你的 apache/logs/ 下的 error.log 
    如果是冲突,他会一直写错误日志的,
    以前遇到过,后来也是重新装了 apache,只是换了一个版本
      

  17.   

    建立在win上不要用apache ,测试用用还行,真要还是linux 上的好。。 我一直,性能非凡。。
      

  18.   


    现在是httpd.exe进程.
    配置问题,是不是连接太多了,又有可能是你的程序问题,我做个一个生成HTML静态文件的程序,把所有数据生成静态,好恐怖的,占用了我2GB内存,然后完成后才降下来.
      

  19.   


    赞成,我现在就是用Linux,很少出现这些问题,性能很好.