免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3087 | 回复: 8
打印 上一主题 下一主题

[Web] Apache服务器的优化-模式设置 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-29 14:40 |只看该作者 |倒序浏览
服务器的优化
(MPM: Multi-Processing Modules)
apache2主要的优势就是对多处理器的支持更好,在编译时同过使用–with-mpm选项来决定apache2的工作模式。如果知道当前的apache2使用什么工作机制,可以通过httpd -l命令列出apache的所有模块,就可以知道其工作方式:
prefork
如果httpd -l列出prefork.c,则需要对下面的段进行配置:
StartServers 5 #启动apache时启动的httpd进程个数。
MinSpareServers 5 #服务器保持的最小空闲进程数。
MaxSpareServers 10 #服务器保持的最大空闲进程数。
MaxClients 150 #最大并发连接数。
MaxRequestsPerChild 1000 #每个子进程被请求服务多少次后被kill掉。0表示不限制,推荐设置为1000。
在该工作模式下,服务器启动后起动5个httpd进程(加父进程共6个,通过ps -ax|grephttpd命令可以看到)。当有用户连接时,apache会使用一个空闲进程为该连接服务,同时父进程会fork一个子进程。直到内存中的空闲进程达到MaxSpareServers。该模式是为了兼容一些旧版本的程序。我缺省编译时的选项。


worker
如果httpd -l列出worker.c,则需要对下面的段进行配置:
StartServers 2 #启动apache时启动的httpd进程个数。
MaxClients 150 #最大并发连接数。
MinSpareThreads 25 #服务器保持的最小空闲线程数。
MaxSpareThreads 75 #服务器保持的最大空闲线程数。
ThreadsPerChild 25 #每个子进程的产生的线程数。
MaxRequestsPerChild 0 #每个子进程被请求服务多少次后被kill掉。0表示不限制,推荐设置为1000。
该模式是由线程来监听客户的连接。当有新客户连接时,由其中的一个空闲线程接受连接。服务器在启动时启动两个进程,每个进程产生的线程数是固定的(ThreadsPerChild决定),因此启动时有50个线程。当50个线程不够用时,服务器自动fork一个进程,再产生25个线程。
perchild
如果httpd -l列出perchild.c,则需要对下面的段进行配置:
NumServers 5 #服务器启动时启动的子进程数
StartThreads 5 #每个子进程启动时启动的线程数
MinSpareThreads 5 #内存中的最小空闲线程数
MaxSpareThreads 10 #最大空闲线程数
MaxThreadsPerChild 2000 #每个线程最多被请求多少次后退出。0不受限制
MaxRequestsPerChild 10000 #每个子进程服务多少次后被重新fork。0表示不受限制。
该模式下,子进程的数量是固定的,线程数不受限制。当客户端连接到服务器时,又空闲的线程提供服务。 如果空闲线程数不够,子进程自动产生线程来为新的连接服务。该模式用于多站点服务器。

论坛徽章:
0
2 [报告]
发表于 2008-07-29 17:04 |只看该作者
very good ding ...

论坛徽章:
0
3 [报告]
发表于 2008-08-03 11:19 |只看该作者

回复 #1 gunguymadman 的帖子

我采用了你的配置参数

[root@du conf]# apachectl -l
Compiled in modules:
  core.c
  prefork.c
  http_core.c
  mod_so.c
[root@du conf]# ps ax|grep htt|wc -l
30
[root@du conf]#

30个http进程,对吗?

论坛徽章:
0
4 [报告]
发表于 2008-08-04 11:28 |只看该作者
lz的prefork配置有点保守,我也给一个组参数作为锦上添花。
另外如果你的程序是php的话,使用prefork是最佳选择,php对线程的支持有问题。
设置apache的MaxClients (设置可连接的最大连接数)
   ServerLimit          1024
   StartServers         30
   MinSpareServers      30
   MaxSpareServers      80
   MaxClients           1024
   MaxRequestsPerChild  3000

1、对于prefork MPM,只有在你需要将MaxClients设置成高于默认值256的时候才需要使用ServerLimit指令。要将此指令的值保持和MaxClients一样。
Apache在编译时内部有一个硬限制“ServerLimit 20000”(对于preforkMPM为“ServerLimit 200000”)。你不能超越这个限制。
2、也可以编译前修改apache源代码去掉这个限制:server/mpm/prefork/prefork.c
3、根据上面的配置,只要 Web 服务器启动,就会立即以root是否启动一个httpd进程,同时这个进程启动 30 个子进程,并尽力保持 30 到 80 个空闲服务器运行。进程数的硬性限制由 MaxClients 指定。
4、尽管一个进程能够处理许多相继的请求,Apache 还是会取消连接数超过 3,000 以后的进程,这降低了内存泄漏的风险,如果MaxRequestsPerChild为"0",子进程将永远不会结束。
5、最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小。

论坛徽章:
0
5 [报告]
发表于 2008-08-04 13:33 |只看该作者
very good ding ...

论坛徽章:
0
6 [报告]
发表于 2008-08-04 15:22 |只看该作者
原帖由 iask 于 2008-8-4 11:28 发表
lz的prefork配置有点保守,我也给一个组参数作为锦上添花。
另外如果你的程序是php的话,使用prefork是最佳选择,php对线程的支持有问题。
apache(worker)+php(fastcgi)

论坛徽章:
0
7 [报告]
发表于 2008-08-04 15:28 |只看该作者
原帖由 flowingtree 于 2008-8-3 11:19 发表
我采用了你的配置参数

[root@du conf]# apachectl -l
Compiled in modules:
  core.c
  prefork.c
  http_core.c
  mod_so.c
[root@du conf]# ps ax|grep htt|wc -l
30
[root@du conf]#

30个http ...

可参见iask的参数
我的
   ServerLimit          2000
   StartServers         30
   MinSpareServers      30
   MaxSpareServers      80
   MaxClients           1500
   MaxRequestsPerChild  5000

论坛徽章:
0
8 [报告]
发表于 2008-08-04 17:27 |只看该作者
模式讲的很好

论坛徽章:
0
9 [报告]
发表于 2008-08-20 18:07 |只看该作者
biao ji
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP