首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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
V2EX  ›  Python

nginx work 绑定 cpu 24 核的

  •  
  •   zzlyzq · 2015-12-02 02:13:53 +08:00 · 2646 次点击
    这是一个创建于 1024 天前的主题,其中的信息可能已经有所发展或是发生改变。
    搞了一个脚本,因为系统负载过高,听得高人意见,把 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 回复  |  直到 2015-12-03 03:07:47 +08:00
        1
    msg7086   2015-12-02 04:42:36 +08:00
    小学知识,数字前面的零可以省略。
    所以 24 核的话拿 ruby 跑可以这样写:
    24.times.map{|i| '1'+'0'*i}.join(' ')

    顺便 python 里也可以用 '0'*i 这种写法,没必要开 for 循环。
        2
    lhbc   2015-12-02 06:00:08 +08:00 via Android
    直接 auto 就行了, nginx 自己会处理,除非你用的是多年前的版本。
        3
    Andy1999   2015-12-02 08:06:38 +08:00 via iPhone
    nginx 不是会动态分配 CPU 核心数吗。。。
    不过我 128 核貌似一直分不到 3 核
        4
    zzlyzq   2015-12-02 08:27:42 +08:00 via Android
    @msg7086 乘法不错 当时没想起来
        5
    zzlyzq   2015-12-02 08:28:09 +08:00 via Android
    @lhbc 就是为了防止 auto 带来的性能损失
        6
    msg7086   2015-12-02 08:51:13 +08:00
    @lhbc
    @Andy1999
    看了一下 1.9.6 的源码没看到支援。
        7
    lerry   2015-12-02 10:03:19 +08:00
    http://tengine.taobao.org/
    这个支持 自动根据 CPU 数目设置进程个数和绑定 CPU 亲缘性
        8
    dreampuf   2015-12-02 10:17:48 +08:00
    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
        9
    msg7086   2015-12-02 11:14:31 +08:00
    @lerry tengine 在 nginx 改动太大,不太敢用……
    自动 Affinity 倒是实现了,感觉可以 back port 回去(?
        10
    lerry   2015-12-02 11:20:17 +08:00
    @msg7086 没什么不敢用的,配置都兼容, 我一直在用
        11
    lhbc   2015-12-02 11:59:47 +08:00
        12
    ryd994   2015-12-02 12:44:28 +08:00
    我不相信你有能让 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 上。
        13
    lhbc   2015-12-02 12:48:29 +08:00
    @ryd994 赞同
    24 核的 CPU ,如果单纯跑 nginx+静态,配置没有问题的话(不加一堆 if 之类的 dirty 的东西), 40G 带宽都能跑满吧
    负载高的原因应该不是 nginx
        14
    zzlyzq   2015-12-03 03:07:47 +08:00
    @lhbc 负载高因为 nginx 的日志落盘,目前我发现的是这个原因。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3012 人在线   最高记录 3762   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 25ms · UTC 09:37 · PVG 17:37 · LAX 02:37 · JFK 05:37
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1