PHP脚本内存泄露导致Apache频繁宕机解决方法

在部署一套内网测试环境时,频繁宕机,开机后不断的吃内存,重启apache之后内存占用会不停的上涨,直到swap用完,直到死机,由于是内网环境,服务器并发和压力都很小。

查看apache错误日志,报大量类似错误:

代码如下:

[Tue Feb 14 14:49:28 2012] [warn] child process 7751 still did not exit, sending a SIGTERM
[Tue Feb 14 14:49:30 2012] [error] child process 7603 still did not exit, sending a SIGKILL
[Tue Feb 14 14:49:30 2012] [error] child process 7614 still did not exit, sending a SIGKILL

后查出来是因为php某一些脚本存在内存泄露的代码段。而apache处理这些代码段的进程的处理请求数被设置为无穷。也就是说这些进程只有在apache重启(stop-start模式)或者服务器重启的情况下才会被kill,否则将一直运行下去,直到耗尽系统的最后一点资源(主要是内存)。

问题分析:

代码如下:

//服务器允许配置的进程数上限
ServerLimit 1500
//设置服务器启动时建立的子进程数量。因为子进程数量动态的取决于负载的轻重,所有一般没有必要调整这个参数。
StartServers     5
//MinSpareServers:设置空闲子进程的最小数量。所谓空闲子进程是指没有正在处理请求的子进程。如果当前空闲子进程数少于MinSpareServers,那么Apache将以最大每秒一个的速度产生新的子进程。
MinSpareServers   5
//设置空闲子进程的最大数量。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。
MaxSpareServers   10
//用于客户端请求的最大接入请求数量(最大线程数)。
MaxClients 1500
//设置每个子进程在其生存期内允许提供的最大请求数量
MaxRequestsPerChild 50

问题解决:
 
设置 MaxRequestsPerChild 50或30
 
MaxRequestsPerChild不能太大,也不能设置为0,最好设置为一个相对不大的数字,100内可能就够了,防止httpd进程有意外的内存泄露。

(0)

相关推荐

  • win7 64位系统 配置php最新版开发环境(php+Apache+mysql)

    一 :准备阶段 1:php php-5.5.13下载链接:http://windows.php.net/downloads/releases/php-5.5.13-Win32-VC11-x64.zip 推荐 Thread Safe(线程安全) V11 x64,也就是64bit的. 现在PHP官网上下载PHP安装包都有VC11或VC9的字样,这是什么含义,我们应该下载哪种安装包更好呢? 其实PHP官网给出了答案: VC9 and VC11 More recent versions of PHP a

  • 简单介绍win7下搭建apache+php+mysql开发环境

    环境目录:E:\dev​ 一.Apache 下载地址:http://www.apachelounge.com/download/​ 我们下载VC11运行库的 1.安装说明: 运行apache安装程序,方法非常简单,弹安装界面后一直"next" 接着会出现一个界面,需要填写3个内容,分别为:Network Domain.Server Name.Administrator's Email Address 随便填写就好,不影响内容. 在下面还有2个选项,默认选择为80端口,第二个为8080端

  • windows下apache搭建php开发环境

    本文详细介绍了在Windows2003下使用Apache2.2.21/PHP5.3.5/Mysql5.5.19/phpMyAdmin3.4.9搭建php开发环境. 第一步:下载安装的文件 1. Apache 版本 httpd-2.2.21-win32-x86-no_ssl.msi 2. MySQL 版本 mysql-5.5.19-win32.msi 3. PHP 版本 php-5.3.5-Win32-VC6-x86.zip 4. phpMyadmin 版本 phpMyAdmin-3.4.9-al

  • apache集成php5.6方法分享

    apache对php的支持是通过apache的mod_php5模块来支持的,这点与nginx不同.nginx是通过第三方的fastcgi处理器才可以对php进行解析. 如果源码编译安装php的话,需要在编译时指定--with-apxs2=/usr/local/apache2/bin/apxs表示告诉编译器通过apache的mod_php5模块来提供对php的解析. 同时php安装的最后一步make install时,我们会看到将动态链接库libphp5.so拷贝到apache2的安装目录的mod

  • Windows下Apache + PHP SESSION丢失的解决过程全纪录

    今天的工作是迁移一个PHP站点至新服务器. 创建一台Windows Server 2008虚拟机,并在其上停掉net stop http服务(避免争抢80端口),安装配置 Apache + PHP,迁移站点至新服务器,站点正常打开,Apache + PHP运行正常,连接MySql Server正常,一切都美好,本想着半小时完成的工作,紧接着噩梦开始了. 该站点使用单点登录,登录过程包含JavaScript异步操作,包含SOAP调用Web Service.登录却直接跳回了登录页面,没有任何错误提示

  • apache和PHP如何整合在一起

    一般安装好PHP之后,apache并不能处理php文件,要想使得php与apache服务器整合在一起,必须修改配置文件,这里我教大家如何配置php安装文件. 方法/步骤 首先在apache的conf目录下的httpd.conf加入如下代码: LoadModulephp5_module~php安装路径/php5apache2_2.dll PHPIniDir"~php模块安装路径" AddTypeapplication/x-httpd-php.php.phtml 这里我对上面的代码简单解释

  • Windows系统下Apache、PHP无法启动问题总结

    最近经常被问到Apache无法启动的问题,所以写一篇文章,总结一下Windows下经常遇到的 Apache/PHP 无法启动的情况的解决方法. Apache/PHP 无法启动分两种情况: 1.Apache无法启动,没加载php也无法启动 2.Apache可以启动,但加载php后无法启动 第一种情况多数是Apache配置问题,或者80端口被占用 使用Apache的配置检查: 复制代码 代码如下: C:\>D:\Apache2.2\bin\httpd.exe -t Syntax OK 根据错误提示,

  • Apache2.4.x版wampserver本地php服务器如何让外网访问及启用.htaccess

    Apache 从2.2升级到 Apache2.4.x 后配置文件 httpd.conf 的设置方法有了大变化,以前是将 deny from all 全部改成 Allow from all 实现外网访问,现在是将 Require all denied 以及 Require local 都该为 Require all granted 就可以了. .htaccess 如果不起作用将 LoadModule rewrite_module modules/mod_rewrite.so 前面的注释(#)去掉就

  • Apache同时支持PHP和Python的配置方法

    最近开始学着用Python+Tornado+MongoDB写网站,兴起写了一个博客,觉得很有意思所以想挂在服务器上发布出去找大家一起玩.这个时候就遇到了问题. 服务器是windows系统,安装的是Apache,所以需要配置Apache,使Apache同时支持PHP和Python. 废话少说,提供有效方案一个,照做即可: 1. 修改 httpd.conf 文件 将下列几个Module前的注释符 # 去掉 LoadModule proxy_module modules/mod_proxy.so Lo

  • win7系统配置php+Apache+mysql环境的方法

    B/S架构当下很流行,因为B/S架构有众多优点,例如:用户只需有浏览器就可使用,维护升级都比较方便,跨平台,等等.本文就讲讲Windows+Apache+PHP+Mysql的开发环境如何配置. 如何在win7系统下配置php环境呢,php+Apache+mysql都是在配置过程中必不可少的元素,php负责解析php代码,apache负责服务器端而mysql是数据交互的中转站. 那么如何将php+apache+mysql配置好呢,接下来我们看一下具体的方法,软件版本会改变所以需要自己因时制宜,随机

  • apache You don't have permission to access /test.php on this server解决方法

    键字: Apache   403  Forbidden 系统配置: 操作系统:Red Hat Linux 6.2 Web服务器:Apache 3.1.1+jakarta-tomcat 3.1.1 数据库服务器:oracle 8i Apache服务器是目前应用最多的web服务器,据统计在世界上的服务器中有超过一半采用Apache服务器.关于它的好处,您可以自己到http://www.apache.org/上去看. 今天我们的服务器出了一点儿问题:任何访问都会返回一个403的错误: 复制代码 代码如

  • 在CentOS 6 中安装WordPress(一) 安装Apache,Mysql, PHP环境

    1.安装Apache   在终端中输入下面的命令就可以安装Apache了: sudo yum install httpd sudo的意思是用root用户做什么操作.要点击y就确认下载安装了,非常方便. 然后用下面的命令来启动服务 sudo service httpd start 现在不用着急往下弄,直接在浏览器中输入DigitalOcean给你的IP地址,应该就可以访问到Apache的欢迎页面了.类似下面的样子: 是不是很酷?如果你的域名已经成功解析到你主机的IP地址上的话,用你的域名应该也可以

随机推荐