性能瓶颈

Catalogue
  1. 1. 常见的性能瓶颈
    1. 1.1. 不恰当的同步导致的资源占用
    2. 1.2. 不恰当的线程模型
    3. 1.3. 效率低下的SQL或者不恰当的数据库设计
    4. 1.4. 不恰当的GC参数
    5. 1.5. 线程数量不足
    6. 1.6. 内存泄露导致的频繁GC
  2. 2. 通过线程堆栈识别性能瓶颈
    1. 2.1. 典型的堆栈特征

一个好的程序,应该是能够充分利用CPU。如果一个程序在单CPU的机器上无论在多大的压力下都无法令CPU的使用率接近100% ,说明这个程序设计地有问题。

常见的性能瓶颈

不恰当的同步导致的资源占用

  • 锁加得不恰当

  • 锁粒度过大

    不恰当的线程模型

效率低下的SQL或者不恰当的数据库设计

不恰当的GC参数

线程数量不足

内存泄露导致的频繁GC

通过线程堆栈识别性能瓶颈

典型的堆栈特征

  1. 绝大多数线程的堆栈表现在同一个调用上下文上,且只剩下非常少的空闲线程
  2. 绝大多数线程处于等待状态,只有几个工作的线程,总体性能上不去。可能的原因是,系统存在关键路径,在该关键路径上没有足够的能力给下个阶段输送大量的任务,导致其 它地方空闲。如在消息分发系统,消息分发一般是一个线程,而消息处理是多个线程,这 时候消息分发是瓶颈的话,那么从线程堆栈就会观察到上面提到的现象:即该关键路径 没有足够的能力给下个阶段输送大量的任务,导致其它地方空闲
  3. 线程总的数量很少。这个一般与线程池的设计有关。