1. 云栖社区>
  2. PHP教程>
  3. 正文

APACHE内存溢出

作者:用户 来源:互联网 时间:2017-12-01 12:34:46

内存apache溢出

APACHE内存溢出 - 摘要: 本文讲的是APACHE内存溢出, 近期系统常挂的情况。影响大家工作。针对此情况我们对系统进行了跟踪。发现系统的apache服务进程占用资源不断上升,导致系统假死。即使重启后,apache进程资源也不断自动增加。直到假死掉。在排除了代码问题后,我们查看了apache的日志,


近期系统常挂的情况。影响大家工作。针对此情况我们对系统进行了跟踪。发现系统的apache服务进程占用资源不断上升,导致系统假死。即使重启后,apache进程资源也不断自动增加。直到假死掉。
在排除了代码问题后,我们查看了apache的日志,发现日志中的错误如下:
[Thu Aug 25 11:00:56 2011] [notice] Apache/2.0.59 (Win32) PHP/5.2.5 configured -- resuming normal operations
[Thu Aug 25 11:00:56 2011] [notice] Server built: Jul 27 2006 15:55:03
[Thu Aug 25 11:00:56 2011] [notice] Parent: Created child process 4288
PHP Warning:  PHP Startup: Unable to load dynamic library './php_mbstring.dll' - xd5xd2xb2xbbxb5xbdxd6xb8xb6xa8xb5xc4xc4xa3xbfxe9xa1xa3rn in Unknown on line 0
[Thu Aug 25 11:00:56 2011] [notice] Child 4288: Child process is running
[Thu Aug 25 11:00:56 2011] [notice] Child 4288: Acquired the start mutex.
[Thu Aug 25 11:00:56 2011] [notice] Child 4288: Starting 250 worker threads.
经过错误日志看出。这是apache内存溢出。即确定为apache问题。
在httpd-mpm.conf/httpd.conf 配置文件中,windows下apache加载的是“mpm_winnt_module”部分的配置信息。mpm_winnt_module中的参数ThreadsPerChild:每个子进程所产生的线程数,意思是系统启动时默认启动的等待线程数,用来等待处理客户的请求。MaxRequestsPerchild:每个子进程所处理的最大求情数。希望它在每次处理完请求后,kill掉进程,在重新创建,保持内存不会溢出。将MaxRequestsPerchild从默认的0(无限制)改10000以后,虽有所缓解,但仍然回假死。最后,在一片文章中偶然看见“ThreadLimit”这个参数的作用,ThreadLimit:线程数限制,参数值要和ThreadPerChild值一致。

    ThreadsPerChild     300
    ThreadLimit      300           #这里ThreadLimit的值要与ThreadPerChild一致
    MaxRequestsPerChild    0
    Win32DisableAcceptEx        #这里禁用AcceptEx()函数

设定以后apache没在假死。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索内存 , apache 溢出 ,以便于您获取更多的相关知识。