解决centos环境httpd被内存强制停止

用服务器建站就是比较麻烦,好不容易搞好,前几天却时不时出现“httpd killed by SIGSEGV”这个错误。

表面上看就是Apache的httpd服务被内存停掉了,一般都是因为进程占用的内存太大了,苦于一直找不到解决的办法。

治标不治本的解决方法就是重启服务,代码如下:

systemctl restart httpd.service
systemctl restart mysqld.service

如果想彻底解决问题,还得从查找原因入手,查看了一下apache的error log日志。
由于是yum默认安装的apache,那么它的mpm应该是prefork模式。Apache以模块化的方式组合了多种功能,并发处理的核心部分也是以模块化的方式来出现,通常称为MPM(Multi Processing Module)。
根据选择的MDM,用户可以配置不同的并发处理模式。UNIX环境下主要由两个:
prefork:提取生成(prefork)多个进程供客户端连接的多进程模式(默认)
worker:多线程和多进程的混合型模式。
prefork是多进程模式,worker是多线程和多进程的混合模式。后者占得内存更小,适合在高并发环境下使用。 多线程和多进程的差异:
多个进程中不存在进程间直接共享内存,内存是独立且安全的。
在多线程中,多个线程间共享内存空间,需要注意不能发生资源冲突,这是多线程编程比较复杂的原因。
如果想切换到worker模式的话,可以在通过/etc/sysconfig/httpd 这个文件来更改,修改下图的代码如下:

但令人奇怪的是httpd寻遍所有配置文件都找不到prefork的参数字段,看来Centos7默认安装的apache2.4并没有提供针对prefork的选项。只能手动添加,在apache2.4中的/etc/httpd/conf/httpd.conf文件中加上了以下一段代码:

<IfModule prefork.c>StartServers 4MinSpareServers 4MaxSpareServers 6MaxClients 1500MaxRequestsPerChild 3000</IfModule>

在apache2.2中的/etc/httpd/conf/httpd.conf文件中加上了以下一段代码:

<IfModule mpm_prefork_module>StartServers 4MinSpareServers 4MaxSpareServers 6MaxClients 1500MaxRequestsPerChild 3000</IfModule>

影响apache性能的几个重要参数(conf/httpd.conf中设置)主要含义如下:


KeepAlive 是否允许持续连接
MaxKeepAliveRequests 允许的持续连接的最大数
KeepAliveTimeout 持续连接在没有请求多少秒后切断
StartServers 最初启动时启动多少个服务器进程
MinSpareServers 空闲服务器进程的最小数
MaxSpareServers 空闲服务器进程的最大数
MaxClients 同时处理的请求数(最重要的参数,要少于ServerLimit)
MaxRequestsPerChild 每个子进程处理的最大请求数

prefork 控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两 个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这种模式 可以不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个 值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为 MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和 MaxSpareServers。MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了 “MaxRequestsPerChild”个请求后将自动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0可以使每个子进程处理更多的请求,但如 果设成非零值也有两点重要的好处:1、可防止意外的内存泄漏。2、在服务器负载下降的时侯会自动减少子进程数 、

人已赞赏
笔记

CentOS不支持mbstring的解决办法

2019-10-7 21:44:12

笔记

Linux系统查看 Apache 、 MySQL 、 PHP 版本的方法

2019-10-7 22:02:15

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索