512M的VPS优化apache内存
查看目前占用内存
Ps aux|grep httpd
基本一个占用50M左右
ps aux|grep httpd | wc –l
一共13个,减去grep httpd 那行 12个,说明占用大约600M
超过了服务器512M内存,
(相比之下nginx主进程占用50M,带着php-fpm跑,一个fpm占用2M,开启10个fpm进程,一共70M的内存就足够了。)
标准Linux Apache配置在Apache的配置文件在/etc/httpd/conf/httpd.conf
但是lampp的不在httpd.conf里,而是在extra/http-default.conf里面。
两处地方分别对应两个模块prefork模块和worker模块(Apache默认启用的是prefork模块),根据自己的服务器启用的模块分别修改对应的参数,可以用命令httpd -l查看apache所使用的模块。
各参数含义解释如下:
• StartServers //指定服务器启动时建立的子进程数量,prefork默认为5。如果你的内存占用过大,可适当减小此值。
• MinSpareServers //指定空闲子进程的最小数量,默认为5。如果当前空闲子进程数少于MinSpareServers ,那么Apache将以最大每秒一个的速度产生新的子进程。
• MaxSpareServers //设置空闲子进程的最大数量,默认为10。如果当前有超过MaxSpareServers数量的空闲子进程,那么父进程将杀死多余的子进程。如果你将该指令的值设置为比MinSpareServers小,Apache将会自动将其修改成”MinSpareServers+1″。
• MaxClients //限定同一时间客户端最大接入请求的数量(单个进程并发线程数),默认为256。任何超过MaxClients限制的请求都将进入等候队列,一旦一个链接被释放,队列中的请求将得到服务。要增大这个值,你必须同时增大ServerLimit 。
• ServerLimit //默认的MaxClient最大是256个线程,如果想设置更大的值,就的加上ServerLimit这个参数。20000是ServerLimit这个参数的最大值。注意,要想此参数生效:必须放在MaxClients指令的前面。
• MaxRequestsPerChild //每个子进程在其生存期内允许伺服的最大请求数量,默认为10000.到达MaxRequestsPerChild的限制后,子进程将会结束。如果MaxRequestsPerChild为”0″,子进程将永远不会结束。建议将此值设为非零值,可以防止内存泄漏以及当服务器负载减轻的时候减少活动进程的数量,如果内存占用过大,可以减少此值。
worker模块中多了几个参数,解释如下:
• ThreadLimit //每个子进程可配置的线程数上限。这个指令设置了每个子进程可配置的线程数ThreadsPerChild上限。任何在重启期间对这个指令的改变都将被忽略,但对ThreadsPerChild的修改却会生效。默认值是”64″.
• MinSpareThreads //最小空闲线程数,默认值是”75″。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太少,子进程将产生新的空闲线程。
• MaxSpareThreads //设置最大空闲线程数。默认值是”250″。这个MPM将基于整个服务器监视空闲线程数。如果服务器中总的空闲线程数太多,子进程将杀死多余的空闲线程。MaxSpareThreads的取值范围是有限制的。Apache将按照如下限制自动修正你设置的值:worker要求其大于等于MinSpareThreads加上ThreadsPerChild的和。
• ThreadsPerChild //每个子进程建立的常驻的执行线程数。默认值是25。子进程在启动时建立这些线程后就不再建立新的线程了。
修改保存之后,要想使配置生效,需先执行service httpd stop
然后service httpd start
直接service httpd restart无法使修改过的配置生效!
觉得有必要解释一下preforx模块的StartServers、MinSpareServers、MaxSpareServers这几个参数的相互关系,这样当你们的主机内存不足的时候,可以根据你们的实际情况来相应的修改这些值!
当Apache启动时,Apache会启动StartServers个空闲进程同时准备接收处理请求,当多个请求到来时,StarServers进程会越来越少,当空闲进程减少到MinSpareServers个时,Apache为了能够继续有充裕的进程处理请求,它会再启动StartsServers个进程备用,直到剩下的空闲进程数量到达MaxSpareServers为止,这样就大大减少了请求队列等待的可能,使得服务效率提高,这也是为什么叫做Pre-fork的原因;
StartServers 2
MinSpareServers 2
MaxSpareServers 4
MaxClients 150
MaxRequestsPerChild 20
这样最后一共启动4个进程,apache一共占用内存200M(还是比nginx大好多。)
对于小网站这么玩,还凑合,流量大了,还是去买个大点内存的VPS吧。或者用nginx能好一些。
优化数据库mysql
数据库内存比较好查看
Ps aux|grep mysql
直接显示 占用了300M
实际最大的消耗还是卡在mysql上,php如果有like查询,512M的内存基本扛不住。而且速度很慢。所以尽可能控制mysql执行时间到最短。
You must be logged in to post a comment.
主题很简洁呀