加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 人物访谈 > 专访 > 正文

LinuxCPU达到瓶颈,怎样优化?

发布时间:2019-12-23 13:09:02 所属栏目:专访 来源:站长网
导读:副标题#e# 1. 分析手段 在理解平均负载之前,先要理清楚 Linux 下的进程状态。 1.1. 进程状态 1.1.1. R (TASK_RUNNING),可执行状态 只有在该状态的进程才可能在 CPU 上运行。而同一时刻可能有多个进程处于可执行状态,这些进程的 task_struct 结构(进程控

· 更快。小对象几乎无锁, >32KB 的对象从 CentralCache 中分配使用自旋锁。 并且>32KB 对象都是页面对齐分配,多线程的时候应尽量避免频繁分配,否则也会造成自旋锁的竞争和页面对齐造成的浪费。

2.6 思维导图

LinuxCPU达到瓶颈,怎样优化?

3. 分析工具

从 CPU 的性能指标出发。当你要查看某个性能指标时,要清楚知道哪些工具可以做到。

4. 思路

性能优化并不是没有副作用的,通常情况下 Linux 系统是不需要特意调整某些指标。往往性能优化会带来整体系统的复杂度的上升,降低了可移植性,也可能在调整某个指标的时候导致其他指标异常。

并不是所有的性能问题都需要去优化,需要对瓶颈点进行优化。比如当前系统有瓶颈,用户 CPU 使用率升高了 10%,而系统系统 CPU 使用率却升高了 50%,这个时候就应该首先优化系统 CPU 使用率。

4.1 应用程序优化

从应用程序的角度来说,降低 CPU 使用率最好的方法是,排除所有不必要的工作,只保留最核心的逻辑。比如减少循环层次、减少递归、减少动态内存分配等等。

常见的几种应用程序的性能优化方法:

编译器优化:很多编译器都会提供优化选项,适当开启它们,在编译阶段你就可以获得编译器的帮助,来提升性能。目前设备采用的优化选项为 Os,相当于 O2.5

算法优化:使用异步处理,可以避免程序因为等待某个资源而一直阻塞,从而提升程序的并发处理能力。

多线程代替多进程:线程的上下文切换并不切换进程地址空间,因此可以降低上下文切换的成本。目前设备采用的是多线程模式。

使用 buffer:经常访问的数据,可以放在内存中缓存起来,这样在下次用时可以直接从内存中获取,加快程序的处理速度。

小内存使用:小内存的申请,在保证栈空间不溢出的情况下,尽量采用栈上申请,少使用动态内存申请,提高程序运行效率。

4.2 系统优化

从系统的角度来说,优化 CPU 的运行,一方面要充分利用 CPU 缓存的本地性,加速缓存访问;另一方面,就是要控制进程的 CPU 使用情况,减少进程间的相互影响。

常见的方法:

CPU 绑定:把进程绑定到一个或者多个 CPU 上,可以提高 CPU 缓存的命中率,减少跨 CPU 调度带来的上下文切换问题。

优先级调整:使用 nice 调整进程的优先级,正值调低优先级,负值调高优先级。

中断负载均衡:无论是软中断还是硬中断,它们的中断处理程序都可能消耗大量的 CPU。

配置 smp_affinity,就可以把中断处理过程自动负载均衡到其他 CPU 上

替换 ptmalloc:当前使用的 gblic 库,其动态内存管理采用就是 ptmalloc。当前应用程序大量使用小尺寸动态内存,可以采用 tcmalloc,在小内存上更快,几乎无锁。

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读