一些老掉牙的经验之谈

今天整理手机相册的时候发现了一些以前总结的经验,为了给手机腾出更多空间就记录在这里吧。这些经验已经不可追溯且没有更多的论据,姑且就当作死记硬背的知识点吧。

GC篇

1.8以后GC停顿不应该超过3ms,当前1.12大部分GC停顿在500us以下(这个版本在写下这篇文章时也算老古董级别了,但其指标还是可以作为参考)。太过频繁的GC可能会影响10%-20%的性能。

很多存活小对象时,比如大量缓存数据,GC mark指针会消耗较多CPU,大概标记1百万个指针,消耗1s的CPU时间

如果没有用大的缓存或内存泄漏,Go服务占用内存一般都很小,比如一百M、几百M

性能篇

协程的数量看服务量级,没有太多RPC调用的话,千QPS级别的服务,协程大概在几百到1000。如果3000qps,协程可能2000-3000个

如果没有较多的cgo调用或者写文件的话,go的服务线程数应该稍比机器核数多一点,不会多太多。比如4核10-20线程,8核20多条线程。cgo较多的话,量大的服务可能有50-100线程,也比较正常

不同人写出来的Go业务服务,性能可能不会相差太多

Go的服务不会因为协程数量太多或CPU消耗高而出现性能急剧下降,一般是QPS缓慢增加后不变,延时缓慢增加

对Go服务跑pprof,性能消耗小于2%,所以放心跑

网络篇

4核虚拟机,空的http服务QPS在3-4万左右

  • 如果服务里调用一个50ms的业务RPC(回包较小)
    • 使用keepalive,QPS大概最高1.2万
    • 不使用keepalive,QPS大概最高9500,如果回包8K大小,此时性能会降到7000
    • 不使用keepalive,再加一个RPC,QPS大概最高7500

最后,衷心希望本文能够对各位读者有一定的帮助。

原文始发于微信公众号(Gopher指北):一些老掉牙的经验之谈

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/29527.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!