V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
kslr

Go 的性能真是高到爆炸,不过快速增长也带来了一些问题

  •  
  •   kslr · Apr 7, 2018 · 9790 views
    This topic created in 2948 days ago, the information mentioned may be changed or developed.
    用自带的 Http 写了一个简单 api 服务器,在一个简陋的 512Mvps 上跑到了每天 60 多万次调用.
    系统用的 ubuntu 16.04 lts 没有任何优化
    现在知道调整 socket limit 和 open file limit 优化

    但是如何发现问题然后解决呢?而不是做了这些事情就可以避免。
    比如读取系统日志分析问题?我该从哪里下手分析呢?
    请求各位帮助
    Supplement 1  ·  Apr 7, 2018
    没有帮助一味捧 GO 的就没必要回复了
    Supplement 2  ·  Apr 7, 2018
    已经找到问题了,CloudFlare 部分城市故障

    p.s
    我只是提到了 GO 不知道怎么回事视线全转移到语言上面了。
    我想讨论的是随着请求量的增加如何调整系统参数,该从哪里下手。
    “这不是很容易实现吗” 搞不懂和主题有什么关系
    38 replies    2018-04-08 17:22:51 +08:00
    gamexg
        1
    gamexg  
       Apr 7, 2018 via Android
    go pprof
    msg7086
        2
    msg7086  
       Apr 7, 2018   ❤️ 5
    每秒不到 10 次,估计对 Go 来说就像挠痒痒。
    kslr
        3
    kslr  
    OP
       Apr 7, 2018
    @gamexg #1
    @msg7086 #2 我指的是 linux 上面的 socket 等等
    bottleimp
        4
    bottleimp  
       Apr 7, 2018   ❤️ 4
    你说个支持不了每天 60 万次请求的语言吧.
    zenio
        5
    zenio  
       Apr 7, 2018 via Android
    带来了什么问题?
    cloverstd
        6
    cloverstd  
       Apr 7, 2018
    pprof 和火焰图
    hiboshi
        7
    hiboshi  
       Apr 7, 2018
    我感觉这点量 lnmp 架构也没问题
    webjin1
        8
    webjin1  
       Apr 7, 2018 via Android
    rust 更屌
    pymumu
        9
    pymumu  
       Apr 7, 2018
    我看成每秒 60 万了,每天 60 万,也太少了。
    neoblackcap
        10
    neoblackcap  
       Apr 7, 2018
    哪怕是 8 个小时,也是一秒 21 个请求,我想我用 Python 都能实现这样的水平
    boyxupers
        11
    boyxupers  
       Apr 7, 2018 via iPhone
    你 golang 党水平不错…
    binbinyouliiii
        12
    binbinyouliiii  
       Apr 7, 2018
    “ Go 的性能真是高到爆炸”这句话很明显的就是夸 Go 啊,可不是“只是提到了 Go ”
    kslr
        13
    kslr  
    OP
       Apr 7, 2018
    @binbinyouliiii #12
    @boyxupers #11 所以我就搞不懂了,好端端的帖子,最后变成了优越感了。没有人愿意坐下来讨论
    stzz
        14
    stzz  
       Apr 7, 2018 via Android
    @kslr 你的标题内容把 go 拿掉,他们就会和你好好讨论问题了。
    widewing
        15
    widewing  
       Apr 7, 2018 via Android
    问题是每秒十来个请求还没到需要调优的地步吧。。
    kslr
        16
    kslr  
    OP
       Apr 7, 2018
    @widewing #15 以快速增长的业务抛出来论点,现在的请求是这几个星期增长的,并且一马奔腾。迟早都要面对这个问题,所以现在来讨论一下。
    不过看来凉了,我还是多研究文档吧,这里还是灌水生活琐事居多。
    binbinyouliiii
        17
    binbinyouliiii  
       Apr 7, 2018
    @kslr #13 这么夸张的修辞手法,引不起战才不正常。所以楼主你还没认识到问题所在吗?
    lights
        18
    lights  
       Apr 7, 2018 via iPhone
    原谅我没 get 到楼主的问题在哪里
    6ufq0VLZn0DDkL80
        19
    6ufq0VLZn0DDkL80  
       Apr 7, 2018
    还以为是 60w qps。。。
    goodryb
        20
    goodryb  
       Apr 7, 2018
    从楼主的标题以及描述来看,楼主是个新手 go 程序员吧

    性能好轮不到 go 称第一
    请求频率一般是 QPS,而不是每天 xx 万
    carlclone
        21
    carlclone  
       Apr 7, 2018
    每天。。。还有以天为单位的吗
    fuxiaohei
        22
    fuxiaohei  
       Apr 7, 2018   ❤️ 1
    “现在知道调整 socket limit 和 open file limit 优化”

    其实我觉得你理解的优化和一般做的 linux 优化不是一回事。ulimit 和 open file 这些都是基本系统配置问题,修改了就可以了。

    更多的优化是修改系统内核参数,比如 /etc/sysctl.conf 里的 net.core 和 net.ipv4 一类的,修改可能造成内核的不稳定。

    随着业务量的增加,多搞几台机器更保险。随便修改内核的东西,危险性很大。
    pathbox
        23
    pathbox  
       Apr 7, 2018 via iPhone
    标题有点浮夸,还是要低调
    murmur
        24
    murmur  
       Apr 7, 2018
    每天 60 万次 按照 12 个小时高峰跑的话 就是一小时 5 万次 一秒 10-20 次 别说 go 了 稍微好的设计跑带 SQL 的 CURD 都做的到吧
    Dart
        25
    Dart  
       Apr 7, 2018 via Android
    我的 ruby python php 看起来也性能好
    Kabie
        26
    Kabie  
       Apr 7, 2018
    ...最好还是说峰值的 QPS。。。不然根本体现不出“性能搞到爆炸”…………

    另外你以前用的都是啥才会觉得这个性能就爆炸了…………
    denggj28
        27
    denggj28  
       Apr 7, 2018
    话说到了 1000qps 再说说调优吧
    bolide2005
        28
    bolide2005  
       Apr 7, 2018
    呃,不是大家不配合,一方面你问的问题和 golang 本身没关系,另一方面,我估摸着大家都没太清楚你到底在问什么?

    试着给个建议,自己写的服务如果可靠性不是特别有把握的话,前面可以挂一个更加成熟的 server,比如 nginx,或者如果你用 aws 的话就放个 elb,阿里云我记得也有类似的负载均衡器,这些一般都有日志或者统计信息,假设这些前置的 server 不出问题,那么就能正常记录你自己写的 server 的错误信息,然后再根据错误信息做优化,是内存还是文件描述符或者别的什么原因,想一劳永逸除非服务特别简单,访问量很低,不然还是需要留有足够的日志信息
    lfzyx
        29
    lfzyx  
       Apr 7, 2018
    @msg7086
    @bottleimp
    @pymumu
    @neoblackcap

    按照 24 小时来获取每秒值明显是个错误的想法,大量的用户会集中在某一个时段去调用 api,而不是分散在不同时段。
    tempdban
        30
    tempdban  
       Apr 8, 2018 via Android   ❤️ 1
    啥叫性能优化?
    tlb miss 多了就上巨页
    cache miss 多了就减少上下文切换
    兄弟你开个 open file limit 就觉得发现了一片天么
    这都不叫调优啊兄弟。
    moult
        31
    moult  
       Apr 8, 2018 via iPhone
    laravel:吓我一跳
    ql562482472
        32
    ql562482472  
       Apr 8, 2018
    每天 60w,等你什么时候达到了 50QPS 再来讨论优化吧,遇到了才知道是什么问题
    Dart
        33
    Dart  
       Apr 8, 2018 via Android
    发现一只菜鸟
    junweiyang
        34
    junweiyang  
       Apr 8, 2018
    我们公司的 golang 服务,每台机器的 qps 是 500 !
    Felldeadbird
        35
    Felldeadbird  
       Apr 8, 2018
    我以为楼主说每秒 60W。建议楼主补充一下帖子关于一天 60W 内, 峰值期间每秒的请求数。这样才可以体验到 GO 性能真的很爽。
    vjnjc
        36
    vjnjc  
       Apr 8, 2018
    我也以为是好几万的 qps。。。
    msg7086
        37
    msg7086  
       Apr 8, 2018
    @lfzyx 每秒本来就是说的平均,大量用户集中在某一时段去调用 API 也是你一厢情愿的想法,具体分布需要楼主自己提供。如果是面向服务器的监控 API 呢,服务器会白天多调用晚上少调用吗?如果面向的是全世界的人呢,调用分布不也平均吗。楼主只提供了 24 小时的访问量,除以 24 小时得到每秒访问量算什么错误的想法。

    就算我们退一步,楼主的 API 一天只跑一个小时,剩下 23 小时打酱油,那就是一个小时 60 万,也只是一秒 170 个请求,不还是轻轻松松。
    WinMain
        38
    WinMain  
       Apr 8, 2018
    看来大公司喜欢招有高并发后台经验的人员是有道理的,哈哈哈。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1417 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 98ms · UTC 16:27 · PVG 00:27 · LAX 09:27 · JFK 12:27
    ♥ Do have faith in what you're doing.