性能调优学习

性能调优攻略

  • 测试:两个关键指标:吞吐量,延迟

  • 测试之后,定位性能瓶颈

查看操作系统负载

​ 看看操作系统的CPU利用率,看看内存使用率,看看操作系统的IO,还有网络的IO,网络链接数,等等

​ 比如linux系统:top命令

  1. 如果cpu利用率不高,但是两个关键指标上不去了,说明可能IO耗时较大,就看一下IO大不大(磁盘文件IO,驱动程序IO,内存换页率)
  2. 然后查看网络带宽情况,可以使用tcpdump查看
  3. 如果上面所说的都没问题,说明是程序问题(锁,资源获取等待,切换上下文等等)

一般的非程序问题都可以通过配置硬件或操作系统的配置来解决(带宽,内存,tcp缓冲区)

使用profiler测试(性能检测工具)

可查看程序中各个模块函数和指令的运行时间,调用次数,cpu利用率

重点观察那些运行时间最长,调用次数最多的函数和指令,对于调用次数很多但是耗时很短的函数,如果缩短10ns的时间,性能提升也会非常大

常见的系统瓶颈

  • 空间换时间:缓存
  • 时间换空间:网络传输时所用的压缩算法,虽然耗时,但是此时的系统瓶颈在于网络io,用时间换空间反倒节省时间
  • 简化代码

二八原则,20%的代码消耗了80%的性能,优化那20%的代码

算法调优

  • 过滤算法
  • hash算法
  • 分治法,预处理

代码调优

  • 字符串操作
  • 多线程调优
  • 内存分配
  • 异步操作
  • 语言和代码库

网络调优

  • TCP调优

会产生开销:占用文件描述符和缓存

会有很多timewait链接在HTTP服务器上,下面是相关的两个参数:前者表示重用timewait,后者表示回收

net.ipv4.tcp_tw_reuse=1
net.ipv4.tcp_tw_recycle=1
  • UDP调优

MTU----最大传输单元,要设置达到带宽资源的充分利用

UDP最大的一个好处是多播,对于在内网中通知多台节点时非常方便和高效

  • 网卡调优

把Buffer调大对于需要大数据量的网络传输非常有效。

系统调优

  • IO模型
  • 多核CPU调优:cpu0是很关键的,它被用的过狠的话别的cpu性能也会下降,所以我们可以手动为程序分配cpu核
  • NUMA技术:传统的多核运算是使用SMP(Symmetric Multi-Processor对称多处理器)模式,多个处理器共享一个存储器和IO总线,就会出现数据一致性问题。但是NUMA模式下,处理器被划分成多个node, 每个node有自己的本地存储器空间。
  • 文件系统调优

数据库调优

摘选自酷壳 RSS:https://coolshell.cn/feed

posted @ 2023-05-22 16:14  山野村夫01  阅读(27)  评论(0编辑  收藏  举报