免费注册 查看新帖 |

Chinaunix

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

[Web] 使用worker后,系统消耗剧增许多。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-30 21:46 |只看该作者 |倒序浏览
诸位大侠,我对apache不太熟,遇到了一个问题,这里向诸位大侠请教。
案例是一个高峰时四五百人在线的论坛。
硬件环境:CPU Intel(R) Xeon(TM) CPU 2.80GHz ,内存2G
软件环境,内核 2.6.15-dcc-smp
之前使用的apache是系统自带的,prefork,load average一般都在1以下,甚至很多时候在0.4以下,CPU占用率通常超不过20%,大多数时候都是10%以下。
编译进核内的有:
  1. Compiled in modules:
  2.   core.c
  3.   mod_access.c
  4.   mod_auth.c
  5.   mod_log_config.c
  6.   mod_logio.c
  7.   mod_env.c
  8.   mod_setenvif.c
  9.   prefork.c
  10.   http_core.c
  11.   mod_mime.c
  12.   mod_status.c
  13.   mod_autoindex.c
  14.   mod_negotiation.c
  15.   mod_dir.c
  16.   mod_alias.c
  17.   mod_so.c
复制代码


动态加载的模块有:
  1. auth_pam.load     dav_fs.load      layout.load  php4.conf     userdir.load
  2. auth_shadow.load  dav.load         ntlm.load    php4.load
  3. cgi.load          file_cache.load  perl.conf    rewrite.load
  4. dav_fs.conf       include.load     perl.load    userdir.conf
复制代码


prefork相关配置是:
  1. <IfModule prefork.c>
  2. StartServers 20
  3. MinSpareServers 20
  4. MaxSpareServers 100
  5. ServerLimit 1000
  6. #MaxClients 300
  7. MaxClients 400
  8. MaxRequestsPerChild 0
  9. </IfModule>
复制代码



因为要用的某些模块没法加进来,所以我另外编译了一个apache,在这里看到prefork和worker的介绍,就决定使用worker。
但是今天换用后,发现系统消耗比从前用prefork高了很多, load average:绝大多数时候都在1以上,刚才我甚至看到 load average:到了19,吓我一跳。
而CPU资源的消耗也比用prefork时多了很多,大多数时候都是30%,最多到50%,内存消耗倒是没变化。
我知道CPU和内存买回来就是要用的,但是现在论坛人数没有增加,换用worker系统消耗就忽然多了这么多,我觉得很奇怪。
另外,我担心如果人数再增加,或者上别的应用,系统会吃不消。

目前用top看到的情况是:
  1. top - 21:38:04 up 72 days, 12:39,  1 user,  load average: 1.31, 1.25, 1.51
  2. Tasks:  79 total,   3 running,  76 sleeping,   0 stopped,   0 zombie
  3. Cpu(s): 45.4% us,  4.5% sy,  0.0% ni, 48.9% id,  0.2% wa,  0.0% hi,  1.0% si
  4. Mem:   2073532k total,  2016800k used,    56732k free,    42984k buffers
  5. Swap:  3108856k total,     1516k used,  3107340k free,  1302328k cached

  6.   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
  7.   7850 www-data  16   0  511m  86m 4396 S 37.6  4.3  10:19.14 httpd               
  8.   6402 www-data  18   0  508m  80m 4524 S 23.0  4.0  63:47.19 httpd               
  9.   7966 www-data  17   0  507m  80m 4240 S 12.3  4.0   9:56.60 httpd               
  10.   8022 www-data  17   0  514m  86m 4400 S 11.3  4.3   9:07.98 httpd               
  11.   6371 www-data  17   0  511m  82m 4568 S  7.7  4.1  63:32.37 httpd   

复制代码



httpd内核情况:
  1. # ./httpd -l
  2. Compiled in modules:
  3.   core.c
  4.   worker.c
  5.   http_core.c
  6.   mod_so.c
复制代码



模块,好像多了一点,但似乎也没法减少:
  1. LoadModule authn_default_module modules/mod_authn_default.so
  2. LoadModule authz_host_module modules/mod_authz_host.so
  3. LoadModule authz_default_module modules/mod_authz_default.so
  4. LoadModule auth_basic_module modules/mod_auth_basic.so
  5. LoadModule auth_digest_module modules/mod_auth_digest.so
  6. LoadModule include_module modules/mod_include.so
  7. LoadModule filter_module modules/mod_filter.so
  8. LoadModule deflate_module modules/mod_deflate.so
  9. LoadModule log_config_module modules/mod_log_config.so
  10. LoadModule logio_module modules/mod_logio.so
  11. LoadModule env_module modules/mod_env.so
  12. LoadModule headers_module modules/mod_headers.so
  13. LoadModule setenvif_module modules/mod_setenvif.so
  14. LoadModule mime_module modules/mod_mime.so
  15. LoadModule autoindex_module modules/mod_autoindex.so
  16. LoadModule vhost_alias_module modules/mod_vhost_alias.so
  17. LoadModule negotiation_module modules/mod_negotiation.so
  18. LoadModule dir_module modules/mod_dir.so
  19. LoadModule alias_module modules/mod_alias.so
  20. LoadModule rewrite_module modules/mod_rewrite.so
  21. LoadModule php5_module        modules/libphp5.so
  22. LoadModule limitipconn_module modules/mod_limitipconn.so
复制代码



mpm的设置
  1. <IfModule mpm_worker_module>
  2.     StartServers          3
  3.     MaxClients          1500
  4.     MinSpareThreads      25
  5.     MaxSpareThreads      200
  6.     ServerLimit         40
  7.     ThreadLimit         200
  8.     ThreadsPerChild      50
  9.     MaxRequestsPerChild   0
  10. </IfModule>

复制代码







请诸位大侠帮我分析一下问题出在哪里。
多谢指点。

[ 本帖最后由 siyeclover 于 2006-11-30 21:56 编辑 ]

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
2 [报告]
发表于 2006-11-30 22:00 |只看该作者
worker模式使用的进程少,perfork模式进程多一些,你要把他们全部一起对比。

不过php在worker模式并不是所推荐的。

论坛徽章:
0
3 [报告]
发表于 2006-11-30 22:05 |只看该作者
多谢HonestQiao回贴。
但是200多个prefork httpd加一起消耗的cpu资源,也没有4个worker httpd消耗的多,而且是差很多。
我觉得,不该这样啊,负载并没有增加。
我是比较担心如果负载增加,系统就吃不消。

php使用的是5.1.6。

论坛徽章:
0
4 [报告]
发表于 2006-12-01 10:28 |只看该作者
max client一个是400,一个是1500,在400的时候是不是你已经拒绝掉许多流量从而性能看起来就比较好呢?

论坛徽章:
0
5 [报告]
发表于 2006-12-01 23:43 |只看该作者
多谢您的回复,我把MaxClients改到400以后,情况没有变化。

论坛徽章:
0
6 [报告]
发表于 2006-12-03 19:04 |只看该作者
StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadsPerChild      25
    MaxRequestsPerChild  2000
你按上面的worker配置试一下,这个一个双xeon 3.0 ht 6Gram 机子的配置,ip 3万/天
apache说明里说到过使用worker会影响负载
另外我通过ab测试发现 worker模式没有perfork的效率好,最近也在犹豫是不是转回perfork.希望可以多多交流相关信息。

最后希望HonestQiao兄可以针对“不过php在worker模式并不是所推荐的。” 这个多说两句。谢

论坛徽章:
0
7 [报告]
发表于 2006-12-04 13:24 |只看该作者
WORK是线程模式,对于线程不安全的模块,不建议使用WORK方式,看使用的情况用ps -axfm

论坛徽章:
0
8 [报告]
发表于 2006-12-04 13:47 |只看该作者
原帖由 乔苏 于 2006-12-3 19:04 发表
StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadsPerChild      25
    MaxRequestsPerChild  2000
你按上面的worker配置试一下 ...



“不过php在worker模式并不是所推荐的。”如果使用worker模式就要加Zend,因此PHP不建议使用worker模式

论坛徽章:
0
9 [报告]
发表于 2006-12-04 13:52 |只看该作者
LZ:要把ServerLimit和ThreadLimit放在最前面,想这样    :
<IfModule worker.c>
ServerLimit         20
ThreadLimit         200
StartServers        10
MaxClients          1800
MinSpareThreads     75
MaxSpareThreads     200
ThreadsPerChild     150
MaxRequestsPerChild  0
</IfModule>
以上是我的配置,top如下:
13:52:39  up 12 days, 23:31,  1 user,  load average: 0.64, 0.64, 0.55
492 processes: 487 sleeping, 5 running, 0 zombie, 0 stopped
CPU states:  cpu    user    nice  system    irq  softirq  iowait    idle
           total   28.6%    0.0%    3.2%   0.1%     0.5%    0.0%   67.2%
           cpu00   27.0%    0.0%    3.3%   0.3%     0.9%    0.0%   68.1%
           cpu01   30.2%    0.0%    3.1%   0.0%     0.1%    0.0%   66.4%
Mem:  1024628k av,  912932k used,  111696k free,       0k shrd,   85172k buff
                    503584k actv,  182920k in_d,   14676k in_c
Swap: 1534196k av,   92064k used, 1442132k free                  427336k cached

机器配置1Gram
cpu   2.8志强

论坛徽章:
0
10 [报告]
发表于 2006-12-04 16:33 |只看该作者
就我的经验如果按楼上的把
StartServers        10
MaxClients          1800
这些值设的比较高,访问量比较高的主机负载会很高。当遇到访问量突然加大(或攻击)的情况,就会拖垮主机。
不知道我说的对不对。
另外谢谢7,8楼的解释,我在apache2的手册里也找到了类似的话,看来网上流传的“worker”学说真是害人不浅。

[ 本帖最后由 乔苏 于 2006-12-4 16:35 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP