linux启动了大量的httpd进程,占用大量内存

买了个阿里云的最低配的服务器,发现内存总是不够用,用free命令看了一下,竟然还剩下6M的内存,汗。。。

2.png

于是查看了一下进程,

linux启动了大量的httpd进程,占用大量内存_第1张图片

发现有大量的httpd进程,于是百度了一下,发现有如下解释:

有一台服务器 IBM P550 小型机上的 IHS 在连续运行几天后,其中的一个 httpd 进程占用内存接近几百兆。 

IHS 其实就是 Apache ,AIX 5.3 下运行在 worker 方式下,它被看作 Apache 未来的主流工作模式,它是一种多进程与多线程混合的模式。 
Apache的主流工作模式MPM模式。MPM是Multi-Processing-Modules的简称,意思是多道处理模块。MPM模块有不同的种类。现在用的比较多的MPM种类主要是prefork和worker。prefork的工作方式是多个进程工作,每个进程会在处理一定数量的请求后结束(这个数量可能是无穷),没有线程的概念。worker被看作apache未来的主流工作模式,它是一种多进程与多线程混合的模式。 

配置文件 httpd.conf 中 work 的参数配置项: 

 
ThreadLimit         100 
ServerLimit         256 
StartServers         8 
MaxClients         1200 
MinSpareThreads     100 
MaxSpareThreads     300 
ThreadsPerChild     100 
MaxRequestsPerChild  0 
 

关键的问题出现在 MaxRequestsPerChild 参数。MaxRequestsPerChild这个指令设定一个独立的子进程将能处理的请求数量。 
在处理“MaxRequestsPerChild 数字”个请求之后,子进程将会被父进程终止,这时候子进程占用的内存就会释放,如果再有访问请求,父进程会重新产生子进程进行处理。 
如果MaxRequestsPerChild缺省设为0(无限)可以使每个子进程处理更多的请求,不会因为不断终止、启动子进程降低访问效率。 
但如果占用了200~300M内存,即使负载下来时占用的内存也不会减少。内存较大的服务器可以设置为0或较大的数字。内存较小的服务器不妨设置成30、50、100,以防内存溢出。 

文章借鉴自:http://ezerg.iteye.com/blog/1098547

你可能感兴趣的:(服务器,服务器,阿里云,内存,ibm)