Chinaunix首页 | 论坛 | 博客
  • 博客访问: 398082
  • 博文数量: 36
  • 博客积分: 1998
  • 博客等级: 上尉
  • 技术积分: 486
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-23 13:48
文章分类

全部博文(36)

文章存档

2012年(11)

2011年(13)

2010年(12)

分类: 系统运维

2011-06-12 11:34:51

      最近发现自己是个干杂活儿的人,因此把本博的名字都改成了“不求甚解”,纯粹都为了解决眼前的问题,这样的工作方式已经完完全全背离了自己的习惯。废话少说,切入正题,最近对Apache中的一些参数做了些了解,下面就记录一下我的理解。

  1. # worker MPM
  2. # ThreadLimit: maximum setting of ThreadsPerChild
  3. # ServerLimit: maximum setting of StartServers
  4. # StartServers: initial number of server processes to start
  5. # MaxClients: maximum number of simultaneous client connections
  6. # MinSpareThreads: minimum number of worker threads which are kept spare
  7. # MaxSpareThreads: maximum number of worker threads which are kept spare
  8. # ThreadsPerChild: constant number of worker threads in each server process
  9. # MaxRequestsPerChild: maximum number of requests a server process serves
  10. <IfModule worker.c>
  11. ThreadLimit 125
  12. ServerLimit 320
  13. StartServers 5
  14. MaxClients 8000
  15. MinSpareThreads 125
  16. MaxSpareThreads 1250
  17. ThreadsPerChild 125
  18. MaxRequestsPerChild 1000
  19. </IfModule>
其中最重要的参数是 ThreadsPerChild和 MaxClients:
  1. ##ThreadsPerChild 每个子进程建立的线程数,子进程在启动时建立这些线程后就不再建立新的线程了
  2. ##MaxClients 允许同时伺服的最大接入请求数量(在worker下就是最大线程数量)
    1. ##ServerLimit:对最大子进程数的上限,该值必须大于等于MaxClients/ThreadsPerChild
    2. ##ThreadLimit:对ThreadsPerChild的上限,该值必须大于等于 ThreadsPerChild,如果将ThreadLimit设置成一个高出实际需要很多的ThreadsPerChild值,将会有过多的共享内存被 分配,应当和ThreadsPerChild可能达到的最大值保持一致.
    3. ##StartServers:服务器启动时的服务进程数目,该值肯定小于等于ServerLimit
    4. ##MinSpareThreads和MaxSpareThreads:通过新建或结束子进程的方式,将空闲线程的总数维持在这个范围内
    5. ##MaxRequestsPerChild:用于控制服务器建立新进程和结束旧进程的频 率,其实是一个为了防止内存溢出的参数,每个子进程在其生存期内允许伺服的最大请求数量。到达MaxRequestsPerChild的限制后,子进程将 会结束。对于KeepAlive链接,只有第一个请求会被计数。事实上,它改变了每个子进程限制最大链接数量的行为。
    可以通过检查HTTPServer/logs/error_log日志,判断MaxClients是否需要增加,如果有下面的报错,就说明apache自上次重启至今,曾经发生过达到MaxClients的情况:

    1. Tue Jun 07 16:36:03 2011] [error] server reached MaxClients setting, consider raising the MaxClients setting
需要注意的是,这样的报错并不会出现多次,当第二次达到MaxClients时,error_log不会记录。
还有一种可以实时看到连接数的方法,就是打开 server-status页面,设置方法如下:
1. 去掉以下部分的注释
  1. LoadModule status_module modules/mod_status.so
  2. <IfModule mod_status.c>
  3. ExtendedStatus On
  4. </IfModule>
2.修改以下部分
  1. <Location /server-status>
  2.     SetHandler server-status
  3.   # Order deny,allow
  4.   # Deny from all
  5.     Allow from all
  6. </Location>
重启ihs
使用: 可以进入监控页面
如果浏览器支持刷新,可以 以便每 5 秒钟刷新一次

在打开的监控页面中:"." Open slot with no current process,这里面的单个进程的“.”的数量其实对应与ThreadLimit这个值。
  1. <IfModule worker.c>
  2. ThreadLimit 10
  3. ServerLimit 2
  4. StartServers 1
  5. MaxClients 2
  6. MinSpareThreads 1
  7. MaxSpareThreads 2
  8. ThreadsPerChild 1
  9. MaxRequestsPerChild 1
  10. </IfModule>
httpd.conf的MPM配置如上例,在监控页面中的输出如下,其中有2个进程,各10个ThreadLimit,但由于ThreadsPerChild的限制,其实很多.是没有用的。
  1. W........._.........
阅读(2371) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~