nginx work 绑定 cpu 24 核的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zzlyzq

nginx work 绑定 cpu 24 核的

  •  
  •   zzlyzq Dec 2, 2015 5175 views
    This topic created in 3799 days ago, the information mentioned may be changed or developed.
    搞了一个脚本,因为系统负载过高,听得高人意见,把 work 跟 cpu 核绑定起来,但是 24 个这东西,该咋写来,搞了一个脚本

    #!/bin/env python

    import os,sys,re

    print "worker_cpu_affinity",
    length = 24
    for i in range(1,length+1):
    result=[]
    num0 = length - 1 - i
    num2 = i
    for a in range(0,num0+1):
    result.append("0")
    result.append("1")
    for b in range(0,num2-1):
    result.append("0")
    #print result
    print ''.join(result),
    print ";"

    worker_cpu_affinity 000000000000000000000001 000000000000000000000010 000000000000000000000100 000000000000000000001000 000000000000000000010000 000000000000000000100000 000000000000000001000000 000000000000000010000000 000000000000000100000000 000000000000001000000000 000000000000010000000000 000000000000100000000000 000000000001000000000000 000000000010000000000000 000000000100000000000000 000000001000000000000000 000000010000000000000000 000000100000000000000000 000001000000000000000000 000010000000000000000000 000100000000000000000000 001000000000000000000000 010000000000000000000000 100000000000000000000000 ;

    大家有何高见来~ 请教一下~
    14 replies    2015-12-03 03:07:47 +08:00
    msg7086
        1
    msg7086  
       Dec 2, 2015
    小学知识,数字前面的零可以省略。
    所以 24 核的话拿 ruby 跑可以这样写:
    24.times.map{|i| '1'+'0'*i}.join(' ')

    顺便 python 里也可以用 '0'*i 这种写法,没必要开 for 循环。
    lhbc
        2
    lhbc  
       Dec 2, 2015 via Android
    直接 auto 就行了, nginx 自己会处理,除非你用的是多年前的版本。
    Andy1999
        3
    Andy1999  
       Dec 2, 2015 via iPhone
    nginx 不是会动态分配 CPU 核心数吗。。。
    不过我 128 核貌似一直分不到 3 核
    zzlyzq
        4
    zzlyzq  
    OP
       Dec 2, 2015 via Android
    @msg7086 乘法不错 当时没想起来
    div id="r_2683865" class="cell">
    zzlyzq
        5
    zzlyzq  
    OP
       Dec 2, 2015 via Android
    @lhbc 就是为了防止 auto 带来的性能损失
    msg7086
        6
    msg7086  
       Dec 2, 2015
    @lhbc
    @Andy1999
    看了一下 1.9.6 的源码没看到支援。
    lerry
        7
    lerry  
       Dec 2, 2015
    http://tengine.taobao.org/
    这个支持 自动根据 CPU 数目设置进程个数和绑定 CPU 亲缘性
    dreampuf
        8
    dreampuf  
       Dec 2, 2015
    In [1]: for i in xrange(0, 24):
    print "{0:024b}".format(1<<i)
    ....:
    000000000000000000000001
    000000000000000000000010
    000000000000000000000100
    000000000000000000001000
    000000000000000000010000
    000000000000000000100000
    000000000000000001000000
    000000000000000010000000
    000000000000000100000000
    000000000000001000000000
    000000000000010000000000
    000000000000100000000000
    000000000001000000000000
    000000000010000000000000
    000000000100000000000000
    000000001000000000000000
    000000010000000000000000
    000000100000000000000000
    000001000000000000000000
    000010000000000000000000
    000100000000000000000000
    001000000000000000000000
    010000000000000000000000
    100000000000000000000000
    msg7086
        9
    msg7086  
       Dec 2, 2015
    @lerry tengine 在 nginx 改动太大,不太敢用……
    自动 Affinity 倒是实现了,感觉可以 back port 回去(?
    lerry
        10
    lerry  
       Dec 2, 2015
    @msg7086 没什么不敢用的,配置都兼容, 我一直在用
    lhbc
        11
    lhbc  
       Dec 2, 2015
    ryd994
        12
    ryd994  
       Dec 2, 2015
    我不相信你有能让 nginx 占满核的吞吐量
    affinity 打破了操作系统的 scheduling ,除非你有明确了解 affinity 的意义(而不是“高人指点”),否则你应该首先考虑这些选项:

    纯静态开 sendfile
    大量新连接关 accept_mutex 开 multiaccept
    降低 gziplevel ,因为即使 level1 也有近半的压缩率,而计算量可以减少好几倍
    用正则开 pcre_jit
    适当增加系统的 send buffer
    ssl session cache 或者硬件加速

    即使开 affinity , 24 个 worker 各自绑定 1 个 cpu 也不是个好主意。很多系统上 cpu0 地位特殊,必须处理一些硬件中断,因此用户可用的性能不如其他 CPU 。 affinity 主要是希望减少上下文切换,增加缓存命中,上面的选项基本足够。如果你有其他服务,特别是后端也在跑,那 nginx 就更不该使用所有的 cpu ,而应该尽量占满其中几个,同时把其他服务集中在其他 cpu 上。
    lhbc
        13
    lhbc  
       Dec 2, 2015
    @ryd994 赞同
    24 核的 CPU ,如果单纯跑 nginx+静态,配置没有问题的话(不加一堆 if 之类的 dirty 的东西), 40G 带宽都能跑满吧
    负载高的原因应该不是 nginx
    zzlyzq
        14
    zzlyzq  
    OP
       Dec 3, 2015
    @lhbc 负载高因为 nginx 的日志落盘,目前我发现的是这个原因。
    About     Help     Advertise     Blog     API     FAQ     Solana     921 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 22:34 PVG 06:34 LAX 15:34 JFK 18:34
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86