一招解决apache的httpd.exe进程大量吃内存 作者: 02 五月 2008 时间: 14:04 and have 4 条评论

因为要运行两个ASP程序,所以昨天往上把服务器换成了win+apache的形式,但是出现了个非常严重的问题,就是httpd.exe吃大量内存,时间越久吃的越多,直到内存耗尽程序崩溃.

到apache的官方网站查询,原来默认设置适合2-8G内存的服务器使用…解决办法.修改配置文件http.conf,将Threadsperchild参数设为50左右(视你的配置适量减少即可,我设成了50因为服务器配置很差),同样的,适量减少MaxRequestsPerChild的数值.保存并重启apache即可.

ThreadsPerChild的意思是系统启动时默认启动的等待线程数,用来等待处理客户的请求。在使用AcceptEx时内存增长不明显并且可以降回20M左右,可能是因为用户来了请求线程分配了一些资源,此时内存增长,但用户访问完成后,这些资源都释放了(这些资源很可能都和用户相关,没法留着下个用户使用,所以都释放了)。但禁用了AcceptEx后,由于apache每个线程需要处理网络事件,因此每个线程的资源需要就多了,并且处理完一个用户的请求后,有些资源不想释放,是可以对下个用户重用的,这样就留在了里面。由于我的线程数设了550(估计网上很多人遇到这个类似于“memory leak”问题的可能也都设的比较大或者机器虚拟内存较小),这样当线程较多时就会出现达到最大内存的情况,而且这种现象给人的感觉就是有内存泄漏,因为初始时是20M,来一个请求后线程分配一些资源(暂时不释放的),这样可能就变成了21M,如果同时有10个人访问,可能等他们访问完后就变成了50M.

昨晚开始本站的缓存机制有了重大改变,现在用cos生成纯静态页面,可能还会遇到其它问题,如果朋友们发现了不妨提醒我一声,另外评论的审查也松多了,一般的评论都是可以即刻显示的了.

发表评论

4 条评论 : “ 一招解决apache的httpd.exe进程大量吃内存 ”

  1. 1
    rain :

    这个不是自己架设服务器应该不用管吧?

  2. 2
    ckt :

    是这样的,实际上自己架的服务器配置高的话也是不用管的…

  3. 3
    Stephen John Smith :

    那是要这样说:系统调优是一个综合工程,我是主张在条件许可的前提下尽可能采用System-wide的优化技术(如内存清理工具/策略等)而不是对httpd程序本身的运行细节进行过多干涉(这就好比计划经济年代国家的微观调控和市场经济年代的宏观调控,过多的微观调控经常出现“适得其反”的效果)

  4. 4
    太原电子琴大全 :

    尝试一下哦,我的一开始就吃掉100%的CPU

发表评论