云主机或vps,内存都比较宝贵,默认的设置,在高负荷下会吃光内存,这时候mysql再动态请求内存可能会失败而进程退出。
需要做一些限制。

下面涉及数值为64位系统下估算。

我们需要关系三个内存值,mysqld,apache,php
work模式下,php是独立进程,每个占用60~70m(wordpress+discuz应用),内存消耗大户。
apache进程内存占用很少,1个大概2~7m不等。
mysql只有一个进程,60~80m内存占用。

需要限制的是php进程数量和apache进程数量。

1、修改apapche的work配置

vim /etc/apache2/apache2.conf

   StartServers          2  #初始进程(apache进程)
   MinSpareThreads      25  #最小空闲线程数
   MaxSpareThreads      75  #最大空闲线程数
   ThreadLimit          50  #每个子进程可配置的线程数上限
   ThreadsPerChild      25  #每个子进程建立的常驻的执行线程数
   ServerLimit          10  #apache最大进程数
   MaxClients          200  #允许同时伺服的最大接入请求数量(最大线程数量)
   MaxRequestsPerChild 500  #设置每个子进程在其生存期内允许伺服的最大请求数量(不设置位0,可避免应用的内存泄漏引发内存问题)

公式:

ThreadLimit >= ThreadsPerChild
MaxClients  <= ServerLimit * ThreadsPerChild  必须是ThreadsPerChild的倍数
MaxSpareThreads >= MinSpareThreads+ThreadsPerChild

2、修改fcgi配置

vim /etc/apache2/mods-available/fcgid.conf

  AddHandler fcgid-script .fcgi
  AddHandler fcgid-script .php
  FCGIWrapper /usr/lib/cgi-bin/php5 .php
  FcgidConnectTimeout 20
  FcgidMaxProcesses 5  # 最大进程数量
  FcgidMaxRequestsPerProcess 1000  # 每个进程最大请求数,达到后进程销毁,再创建
  FcgidMaxRequestLen 10485760      # 限制了上传文件大小,同时要结合php.ini里面的设置

标签: php, apache

添加新评论