linux 优化程序尺寸,Linux性能优化从入门到实战:22 综合篇:性能问题的分析与优化总结、工具速查...

一、分析总结

系统是应用的运行环境,系统的瓶颈会导致应用的性能下降;

而应用的不合理设计,也会引发系统资源的瓶颈。

(1)CPU 性能分析

981740f8fab6fd995f76ab47b4bd6439.png

(2)内存性能分析

8d1906af0ac4170ff958817d8afbcb2c.png

(3)磁盘和文件系统 I/O 性能分析

b8b96055527749265b10e39ed90edd4c.png

(4)网络性能分析

3a5dfe4fd828047cd06823e7a774bad8.png

(5)应用程序瓶颈分析

1)strace,观察系统调用;

2)perf 和火焰图,分析热点函数;

3)动态追踪技术,来分析进程的执行状态。

二、优化总结

(1)CPU 优化

核心在于排除所有不必要的工作、充分利用 CPU 缓存并减少进程调度对性能的影响。

1)把进程绑定到一个或者多个 CPU 上,充分利用 CPU 缓存的本地性,并减少进程间的相互影响。

2)为中断处理程序开启多 CPU 负载均衡,以便在发生大量中断时,可以充分利用多 CPU 的优势分摊负载。

3)使用 Cgroups 等方法,为进程设置资源限制,避免个别进程消耗过多的 CPU。同时,为核心应用程序设置更高的优先级,减少低优先级任务的影响。

(2)内存优化

核心是解决内存使用的问题,如 可用内存不足、内存泄漏、Swap 过多、缺页异常过多以及缓存过多等。

1)除非有必要,Swap 应该禁止掉。这样就可以避免 Swap 的额外 I/O ,带来内存访问变慢的问题。

2)使用 Cgroups 等方法,为进程设置内存限制。这样就可以避免个别进程消耗过多内存,而影响了其他进程。对于核心应用,还应该降低 oom_score,避免被 OOM 杀死。

3)使用大页、内存池等方法,减少内存的动态分配,从而减少缺页异常。

(3)磁盘和文件系统 I/O 优化

1)通过 SSD 替代 HDD、或者使用 RAID 等方法,提升 I/O 性能。

2)针对磁盘和应用程序 I/O 模式的特征,选择最适合的 I/O 调度算法。比如,SSD 和虚拟机中的磁盘,通常用的是 noop 调度算法;而数据库应用,更推荐使用 deadline 算法。

3)优化文件系统和磁盘的缓存、缓冲区,比如优化脏页的刷新频率、脏页限额,以及内核回收目录项缓存和索引节点缓存的倾向等。

4)使用不同磁盘隔离不同应用的数据、优化文件系统的配置选项、优化磁盘预读、增大磁盘队列长度等。

(4)网络优化

从内核资源角度来说:

1)增大套接字缓冲区、连接跟踪表、最大半连接数、最大文件描述符数、本地端口范围等内核资源配额;

2)减少 TIMEOUT 超时时间、SYN+ACK 重传数、Keepalive 探测时间等异常处理参数;

3)开启端口复用、反向地址校验,并调整 MTU 大小等降低内核的负担。

从网络接口的角度来说:

1)将原来 CPU 上执行的工作,卸载到网卡中执行,即开启网卡的 GRO、GSO、RSS、VXLAN 等卸载功能;

2)开启网络接口的多队列功能,这样,每个队列就可以用不同的中断号,调度到不同 CPU 上执行;

3)增大网络接口的缓冲区大小以及队列长度等,提升网络传输的吞吐量。

在极限性能情况(如C10M)下,内核的网络协议栈是性能瓶颈,一般会考虑绕过内核协议栈:

1)使用 DPDK 技术,跳过内核协议栈,直接由用户态进程用轮询的方式,来处理网络请求。同时,再结合大页、CPU 绑定、内存对齐、流水线并发等多种机制,优化网络包的处理效率。

2)使用内核自带的 XDP 技术,在网络包进入内核协议栈前,就对其进行处理。这样,也可以达到目的,获得很好的性能。

(5)应用程序优化

1)从 CPU 使用的角度来说,简化代码、优化算法、异步处理以及编译器优化等,都是常用的降低 CPU 使用率的方法,这样可以利用有限的 CPU 处理更多的请求。

2)从数据访问的角度来说,使用缓存、写时复制、增加 I/O 尺寸等,都是常用的减少磁盘 I/O 的方法,这样可以获得更快的数据处理速度。

3)从内存管理的角度来说,使用大页、内存池等方法,可以预先分配内存,减少内存的动态分配,从而更好地内存访问性能。

4)从网络的角度来说,使用 I/O 多路复用、长连接代替短连接、DNS 缓存等方法,可以优化网络 I/O 并减少网络请求数,从而减少网络延时带来的性能问题。

5)从进程的工作模型来说,异步处理、多线程或多进程等,可以充分利用每一个 CPU 的处理能力,从而提高应用程序的吞吐能力。

6)从应用的架拉来说,使用消息队列、CDN、负载均衡,将原来单机要承担的任务,调度到多台服务器中并行处理。这样也往往能获得更好的整体性能。

三、工具速查

Brendan Gregg 整理的性能工具谱图

9315f1d3ec66fdc91b3bdd476b3562e0.png

(1) CPU 性能工具

3922bee5f77f10a041ee90a0e5fafb6d.png

ec2a134c6ae9da2ee67f3d1ebf055a5e.png

(2) 内存性能工具

21a3fa77683aa1735e070df72db8652e.png

8d4bc5861c44a2bba2575be0cb74981b.png

(3) 磁盘 I/O 性能工具

22b214e8644c71072d470d06c1f42fe1.png

d8a6ef3134210b92846791abec432c4f.png

(4) 网络性能工具

90a445b03cdffe946c844367ebfb5338.png

a98f1796ac5d149193bfa9c04cf94576.png

(5) 基准测试工具

对文件系统和磁盘 I/O 使用 fio 工具;

对网络使用 iperf、pktgen;

对 Nginx 使用 ab、wrk。

63ab025332edeb821e9b60881d76b76b.png

Linux 内核函数速查网

BCC 速查网

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值