实际上前文中关于CPU使用率过高如何通过各种工具获得相关的热点进程。那么进程有了,那得疑惑到底哪个哪段代码导致了这个进程成为热点呢?

  如果在调试阶段,可以使用gdb中断运行,但是在生产环境肯定不行。Linux提供了一个工具perf

    

  安装它即可,然后man perf查看其使用说明。

    

  常用的一种,统计分析结果输出到屏幕:perf top

    

    symbol列下即为待选的热点函数。

  第二种常见用法,也就是 perf record 和 perf report。 perf top 虽然实时展示了系统的性能信息,但它的缺点是并不保存数据,也就无法用于离线或者后续的分析。而 perf record 则提供了保存数据的功能,保存后的数据,需要perf report 解析展示。有兴趣可以自行实践,此处不再演示。

  找到热点函数了,那就得进行CPU优化了。

  CPU 优化 我们接下来从应用程序和系统的角度,分别来看看 如何才能降低 CPU 使用率,提高 CPU 的并行处理能力。  

  一、应用程序优化

    首先,从应用程序的角度来说,降低 CPU 使用率的最好方法当然是,排除所有不必要的工作,只保留最核心的逻辑。比如减少循环的层次、减少递归、减少动态内存分配等等。
      1、编译器优化:很多编译器都会提供优化选项,适当开启它们,在编译阶段你就可以获得 编译器的帮助,来提升性能。
      2、算法优化:使用复杂度更低的算法,可以显著加快处理速度。
      3、异步处理:使用异步处理,可以避免程序因为等待某个资源而一直阻塞,从而提升程序 的并发处理能力。比如,把轮询替换为事件通知,就可以避免轮询耗费 CPU 的问题。
      4、多线程代替多进程:相对于进程的上下文切换,线程的上下文切换并不切换进程地址空间,因此可以降低上下文切换的成本。
      5、善用缓存:经常访问的数据或者计算过程中的步骤,可以放到内存中缓存起来,这样在 下次用时就能直接从内存中获取,加快程序的处理速度。
  二、系统优化
    从系统的角度来说,优化 CPU 的运行,一方面要充分利用 CPU 缓存的本地性,加速缓存访问;另一方面,就是要控制进程的 CPU 使用情况,减少进程间的相互影响。 具体来说,系统层面的 CPU 优化方法也有不少。
      1、CPU 绑定:把进程绑定到一个或者多个 CPU 上,可以提高 CPU 缓存的命中率,减少跨 CPU 调度带来的上下文切换问题
      2、CPU 独占:跟 CPU 绑定类似,进一步将 CPU 分组,并通过 CPU 亲和性机制为其分配进程。这样,这些 CPU 就由指定的进程独占,换句话说,不允许其他进程再来使用这些 CPU。
      3、优先级调整:使用 nice 调整进程的优先级,正值调低优先级,负值调高优先级。
      4、为进程设置资源限制:使用 Linux cgroups 来设置进程的 CPU 使用上限,可以防止由 于某个应用自身的问题,而耗尽系统资源。
      5、中断负载均衡:无论是软中断还是硬中断,它们的中断处理程序都可能会耗费大量的 CPU。开启 irqbalance 服务或者配置 smp_awinity,就可以把中断处理过程自动负载均衡到多个 CPU 上。

    以上关于如何进行CPU性能调优都是方法论,没有具体的案例,如果以后实践再添补上。

  

    

最新文章

  1. 【原】关于Python中setuptools安装的问题
  2. 了解HTML图像
  3. Sort Methods
  4. HttpClient中转上传文件
  5. 深入探讨在集群环境中使用 EhCache 缓存系统
  6. 一份不错的vue.js基础笔记!!!!
  7. TCP/IP详解学习笔记(13)-TCP坚持定时器,TCP保活定时器
  8. ASP和ASP.NET发送邮件笔记
  9. Unit Of Work--工作单元(二)
  10. Ado Recordset.open
  11. 命令行利用KVM创建虚拟机
  12. TreeNode.trage的使用
  13. hdfs创建删除文件和文件夹
  14. C# .Net String字符串效率提高-字符串拼接
  15. js中的this指向问题(小计)
  16. 关于linux系统CPU篇--->不容易发现的占用CPU较高进程
  17. hbase-0.92.1集群部署
  18. Maven - 在Eclipse中创建Maven项目
  19. 安装 xadmin 报错: Command "python setup.py egg_info" failed with error code 1 in C:\Users\Python\AppData\Local\Temp\pip-install-1k1byg0p\xadmin\
  20. python-day76--django-中间件

热门文章

  1. 关于 cannot create Parameters: [] 报错问题的解决方法
  2. MySQL使用时间作为判断条件
  3. 函数实现将 DataFrame 数据直接划分为测试集训练集
  4. kibana7.x安装配置操作elasticsearch
  5. 使用NSSM把任意exe程序注册成Windows服务
  6. linux下玩转磁盘管理与挂载硬盘
  7. 【刷题-LeetCode】150 Evaluate Reverse Polish Notation
  8. 【记录一个问题】linux+opencv+cuvid解码1080P视频,当使用CUDA核函数的时候,必然崩溃
  9. 第02讲:Flink 入门程序 WordCount 和 SQL 实现
  10. 微服务架构 | *2.3 Spring Cloud 启动及加载配置文件源码分析(以 Nacos 为例)