Go语言中文网,致力于每日分享编码、开源等知识,欢迎关注我,会有意想不到的收获!

问题

在这里,假设 userCount 是一个外部传入的参数(不可预测,有可能值非常大),有人会全部丢进去循环。想着全部都并发 goroutine 去同时做某一件事。觉得这样子会效率会更高,对不对!

那么,你觉得这里有没有什么问题?

噩梦般的开始

当然,在特定场景下,问题可大了。因为在本文被丢进去同时并发的可是一个极端值。我们可以一起观察下图的指标分析,看看情况有多 “崩溃”。下图是上述代码的表现:

输出结果

...go func: 5839go func: 5840go func: 5841go func: 5842go func: 5915go func: 5524go func: 5916go func: 8209go func: 8264signal: killed

如果你自己执行过代码,在 “输出结果” 上你会遇到如下问题:

  • 系统资源占用率不断上涨
  • 输出一定数量后:控制台就不再刷新输出最新的值了
  • 信号量:signal: killed

系统负载

CPU

短时间内系统负载暴增

虚拟内存

短时间内占用的虚拟内存暴增

top

PID COMMAND %CPU TIME #TH #WQ #PORT MEM PURG CMPRS PGRP PPID STATE BOOSTS...73414 test 100.2 01:59.50 9/1 0 18 6801M+ 0B 114G+ 73403 73403 running *0[1]

小结

如果仔细看过监控工具的示意图,就可以知道其实我间隔的执行了两次,能看到系统间的使用率幅度非常大。当进程被杀掉后,整体又恢复为正常值

在这里,我们回到主题,就是在不控制并发的 goroutine 数量 会发生什么问题?大致如下:

  • CPU 使用率浮动上涨
  • Memory 占用不断上涨。也可以看看 CMPRS,它表示进程的压缩数据的字节数。已经到达 114G+ 了
  • 主进程崩溃(被杀掉了)

简单来说,“崩溃” 的原因就是对系统资源的占用过大。常见的比如:打开文件数(too many files open)、内存占用等等

危害

对该台服务器产生非常大的影响,影响自身及相关联的应用。很有可能导致不可用或响应缓慢,另外启动了复数 “失控” 的 goroutine,导致程序流转混乱

解决方案

在前面花了大量篇幅,渲染了在存在大量并发 goroutine 数量时,不控制的话会出现 “严重” 的问题,接下来一起思考下解决方案。如下:

  1. 控制/限制 goroutine 同时并发运行的数量
  2. 改变应用程序的逻辑写法(避免大规模的使用系统资源和等待)
  3. 调整服务的硬件配置、最大打开数、内存等阈值

控制 goroutine 并发数量

接下来正式的开始解决这个问题,希望你认真阅读的同时加以思考,因为这个问题在实际项目中真的是太常见了!

问题已经抛出来了,你需要做的是想想有什么办法解决这个问题。建议你自行思考一下技术方案。再接着往下看 :-)

尝试 chan

func main() {userCount := 10ch := make(chan bool, 2)for i := 0; i < userCount; i++ {ch 

网站并发cpu占用率_来,控制一下 goroutine 的并发数量相关推荐

  1. java线程 cpu占用率_多线程程序 怎样查看每个线程的cpu占用

    可以用下面的命令将 cpu 占用率高的线程找出来: ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu 这个命令首先指定参数'H',显示线程相关的 ...

  2. window服务器cpu过高的排查_线上服务器发生CPU占用率过高应该如何排查并定位问题?...

    国外开发者平台 HankerRank 发布的 2018 年开发者技能调查报告中有一项关于"雇主最看重哪些核心能力"的调查,结果显示如下: 排名前几的比较受重视的能力分别为:解决问题 ...

  3. win10运行在哪里_升级!Win10 2004版即将推送,减少CPU占用率,旧电脑也运行如飞...

    现在,一转眼已经3月底了. 而微软之前所公布的Win10 2004版也即将推送,这是Win10系统的第九次重大更新,它在多方面进行了更改调整,尽可能地提高安全性和整体生产力. 说实话,win10系统自 ...

  4. java项目内存使用率过高排查_项目内存或者 cpu 占用率过高如何排查

    前言:小编总结了之前生产环境cpu 占用率过高等问题,小编功力不够深厚,文章如有不对的地方,还望各位大神指正. 排查原因:客服反馈说系统访问缓慢 一. 在排查问题的过程中针对 CPU 的问题, 使用以 ...

  5. netty cpu 占用率 高_交换机CPU使用率高问题定位

    诊断工具 display工具 log工具 报文冲击导致的CPU使用率高问题 CPU使用率高问题信息采集 诊断工具 display cpu-usage [ slot x ] display cpu-de ...

  6. window服务器cpu过高的排查_生产服务器CPU占用率过高排查过程

    一.问题详情 现象:API接口访问耗时过长,排查发现当前节点内存使用3.9G,CPU占用率295%. 当前节点已两周没发版,怀疑内存没有释放,可能是JVM垃圾回收的问题. 二.排查过程 1.定位问题进 ...

  7. win10内存占用率过高怎么办_如果你的CPU占用率过高 或跟Win10累积更新有关

    如果您近期发现电脑的CPU占用率过高,别着急,这可能并不是你应用程序的问题,而罪魁祸首可能处在你的系统端.源于 Windows 10 2019 五月(Version 1903)发布的累积更新. 根据微 ...

  8. Linux下如何查看高CPU占用率线程

    转于:http://www.cnblogs.com/lidabo/p/4738113.html 目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidst ...

  9. Linux 下杀毒软件 CPU 占用率为何持续升高?

    作者 | beyondma  责编 | 张文 来源 | CSDN 博客 头图 | CSDN 下载自视觉中国 最近笔者遇到这样一个相对比较疑难的事件,某个在 Linux 下运行的杀毒软件启动后,在某些情 ...

  10. Linux 下杀毒软件 CPU 占用率为何持续升高

    作者 | beyondma  责编 | 张文 来源 | CSDN 博客 头图 | CSDN 下载自视觉中国 最近笔者遇到这样一个相对比较疑难的事件,某个在 Linux 下运行的杀毒软件启动后,在某些情 ...

最新文章

  1. 每日一皮:新年好...
  2. 101PPT游戏化换肤遇到的问题
  3. 使用Maven管理的项目,如何设置Context Root
  4. OS- -操作系统概念
  5. SIP应答消息状态码与功能
  6. pythonpandas重复数据统计_python – 连续的pandas数据帧之间的重复计算
  7. 实现strSrt()
  8. Zabbix 监控 MongoDB
  9. vb.net 使用ftp协议上传、下载文件(Visual Studio 2019)
  10. 闪讯无线助手-Android端闪讯破解路由器拨号实现原理
  11. 支持向量机原理(超详细)
  12. pstl连接数据库时出现ORA-12154:TNS:could not resolve service name错误。
  13. 方舟原始恐惧mod生物代码_《暗黑地牢》《方块方舟》周末免费试玩,多款游戏历史新低特惠...
  14. BZOJ3772 精神污染
  15. Hinton 2006 science 文章 RBM 预训练 AutoEncoder
  16. cocos2dx iphoneX 游戏适配
  17. Privacy-Preserving Deep Learning via Additively Homomorphic Encryption
  18. nrm 的使用与主要命令(可能踩过的坑)详细剖析
  19. 深圳市有关事假、病假、婚假、丧假、产假、哺乳假、生育看护假的规定
  20. 20快速开发网站项目的工具和方法

热门文章

  1. 数据结构开发(22):二叉树的转换、深层特性与存储结构设计
  2. php utf8 gbk 数组 互转
  3. 随笔编号-15 重构--改善既有代码的设计--Day01--学习笔记
  4. 【LeetCode】81. Search in Rotated Sorted Array II (2 solutions)
  5. [转]Understanding Integration Services Package Configurations
  6. 【转载】ARX程序再VS2002中的调试初探
  7. 【Java必备技能一】支付宝手机网站支付对接
  8. String、StringBuilder、StringBuffer、StringConcatFactory
  9. 对于区块链在现实落地的一些技术业务关注点
  10. apollocaffe编译问题