转自: https://www.cnblogs.com/Jimmy104/p/5258205.html

针对自己写的一个服务器网络引擎Engine 文章后面附上源码

使用epoll  刚刚开始时候发现占用CPU 特别高,但是网络引擎里面基本没干什么事,不应该有这么高的CPU,一直不解,

于是自己慢慢的分析服务器工作线程,发现主要的性能消耗应该是处理IO 时候,

int nEventNum = epoll_wait(m_nEpId, arrEvents, default_epoll_size, 0);

原来是 epoll_wait的最后一个参数的问题

int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);
等待事件的产生,类似于select()调用。

参数events用来从内核得到事件的集合,maxevents告之内核这个events有多大,

这个 maxevents的值不能大于创建epoll_create()时的size,

参数timeout是超时时间(毫秒,0会立即返回,-1将不确定,也有说法说是永久阻塞)。

该函数返回需要处理的事件数目,如返回0表示已超时。

于是我把参数timeout改成 1 毫秒,CPU 就降下来了,

int nEventNum = epoll_wait(m_nEpId, arrEvents, default_epoll_size, 1);

体会:

如果超时时间为0,必然导致内核不停的调用epoll_wait函数,频率应该是内核的最小时间粒度,其结果是

相当于一个死循环调用了,所以导致CPU消耗过高,

Epoll 的time_out参数引发的cpu占用问题相关推荐

  1. 3个坏代码导致的性能问题案例:CPU占用飙到了900%

    读过<重构 - 改善既有代码的设计>一书的同学们应该都很了解"代码的坏味道".当然确定什么是代码"坏味道"是主观的,它会随语言.开发人员和开发方法的 ...

  2. 织梦mysql占用资源_解决一个 MySQL 服务器进程 CPU 占用 100%的技术笔记

    早上帮朋友一台服务器解决了Mysql cpu 占用 100%的问题.稍整理了一下: 朋友主机(Windows 2003 + IIS + PHP + MYSQL )近来 MySQL 服务进程 (mysq ...

  3. show-busy-java-threads查找CPU占用高

    背景:需要查找线上CPU占用过高的Java线程在做什么. 可以使用top命令找出占CPU高的进程 #top 然后按shift+C 按CPU占比排序 然后把进程中占比高的线程id找出来,这个是常见的套路 ...

  4. php mysql cpu100_MySQL服务器进程CPU占用100%的解决方法

    早上帮朋友一台服务器解决了 Mysql cpu 占用 100% 的问题.稍整理了一下,将经验记录在这篇文章里. 朋友主机(Windows 2003 + IIS + PHP + MYSQL )近来 My ...

  5. 多线程程序 怎样查看每个线程的cpu占用

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

  6. 一次单核CPU占用过高问题的处理

    客户现场反馈,top的检查结果中,一个CPU的占用一直是100%.实际上现场有4个CPU,而且这个服务器是mysql专属服务器. 我的第一反应是io_thread一类的参数设置有问题,检查以后发现re ...

  7. linux getty进程 cpu占用过高 解决办法

    今天突然发现服务器CPU占用过高,查看了下是getty这个进程占用过高. 原因: 在使用docker run运行容器时使用了 /sbin/init和--privileged参数. 使用/sbin/in ...

  8. 面试必问:CPU 占用高,如何一击即中!

    来源丨Linux云计算网络 mp.weixin.qq.com/s/7AQNhK4AO3QIkGR3OPszgg 比较常用的是两种方法:使用 top 命令和 ps 命令,其中 top 命令更好用一些,大 ...

  9. 【必看】 一篇 CPU 占用高,导致请求超时的故障排查

    一.发现问题的系统检查 一个管理平台门户网页进统计页面提示请求超时,随进服务器操作系统检查load average超过4负载很大,PID为7163的进程占用到了800%多. 二.定位故障 根据这种故障 ...

  10. linux查看内存、CPU占用资源最多的进程

    [内存占用] #利用ps命令,默认使用ps参数会显示的结果 ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 ...

最新文章

  1. C#之Action和Func的用法
  2. Pandas初学者代码优化指南
  3. Android Handler消息传递机制
  4. python3 json解析_Python3 JSON编码解码方法详解
  5. HTML5实践 -- 三步实现响应式设计
  6. 正则匹配承兑的html,正则匹配闭合HTML标签(支持嵌套)
  7. Evernote 全球开发者大赛最终入围作品介绍
  8. ❤️java多线程并发编程入门 教程合集❤️
  9. 数据库课程设计——学生选课管理系统
  10. 欺骗的艺术——谈谈社会工程学
  11. org.apache.commons.fileupload.DiskFileUpload
  12. Java8新特性之双冒号(::)
  13. 怎么添加网络扫描仪到计算机,MAC如何添加网络扫描仪
  14. 292 炮兵阵地(状态压缩dp)
  15. 判断某整数是正整数、负整数还是零
  16. 如何通过局域网共享本机网页
  17. 说说Hibernate
  18. 习题3-5 三角形判断 (15 分)-PTA浙大版《C语言程序设计(第4版)》
  19. WLST 命令和变量
  20. linux 起网口up_【Linux】ubuntu或linux网卡配置/etc/network/interfaces

热门文章

  1. 仿真器连接出现NO TARGET CONNECTED解决方法及cube配置方法
  2. L1-1 PTA使我精神焕发 (5 分)
  3. L1-051 打折 (5 分)—团体程序设计天梯赛
  4. ubuntu系统无法连接识别到adb设备和fastboot设备解决方法
  5. 开源协议的几种类型认识
  6. JS判断字符串包含的方法
  7. 关于《PHP任务学习》的说明
  8. sudo: must be setuid root错误解决方法.
  9. 对某目录下的文件按照日期进行排序
  10. OSI七层模型中的网络层与传输层