进程数

当单进程cpu 消耗接近80%时, 代表达到单进程处理的上限;业务上尽量保证单进程cpu <75%, 以应对突发情况;

  1. 多进程的优点和弊端
    优点:

    • 提高业务系统的处理能力
    • 充分利用多核CPU

    弊端:

    • 进程越多,占用资源越多,内存(忽略), redis,mysql 连接数会乘数级别增高
    • 进程间通信效率不如进程内通信的效率;
  2. 如何评估进程数量?
    a. 评估单进程的处理能力

    • 评估时,保证单进程CPU 占用率70%,此时的业务处理能力就是我们的一个标尺,比如单进程能处理30个路口;
    • 业务上,如果使用多线程,通过合适的调整多线程数量,解决IO操作问题,提升单进程CPU 使用率;

      • 线程数不宜过多,否则都是线程切换开销,如果线程超过50个(个人主观),应该重点关注是否影响性能;
      • 线程调整过程中, 每次应该适量调整,进行观察;
    • 业务上,如果使用协程,因为协程数量增加,基本不会影响性能(协程的优势就在于此),协程数量可随意配置,通过观察CPU 使用率,得到一个主观的评估;

    b. 进程数量的计算

     通过单进程的业务处理能力,根据业务大小,可计算出进程数量

线程数(协程同理)

 因为单进程只能利用一个CPU, 因此线程数的调整,旨在解决IO 密集(网络IO)问题;
  1. 如何优化线程数量;
    a. 基本条件:

     * 每秒需要处理的处理的业务数为 a 条, 假设业务数是均匀产生
     * 业务函数处理时长(包含IO) 为  X s
     * 业务允许的处理延时为                Y s (Y > X)

    b. 横向并发优化:

     * 将业务函数运行在等价的多线程里;
     * 考虑业务不积压,不考虑延时,多线程数n = a * (1/X) = a * X
     * 考虑业务不积压,延时符合要求,情况复杂,暂时没有碰到此种情况,且主要是争对业务非均匀产生的情况,比如一一分钟一次产生N 条业务数;

    c. 纵向并发优化:

     * 因特殊原因,业务函数无法横向并发优化(保证时序性), 可进行纵向优化;
     * 将业务函数拆分多个前后依赖的小函数,将小函数运行在多线程里;
     * 最终业务函数的处理时长(包含IO)由 X 缩减为 max(X1, X2,...)
    

zed2015
15 声望2 粉丝