java服务端性能优化_[读书笔记] 大型网站性能优化实战-服务端性能优化

1 QPS (吞吐量)

1.1 RT(ResponseTime,响应时间)

服务器端 RT+网络开销 ≈ 客户端 RT。对于网络来讲,常见的优化方式有 CDN、 AND和专线, 分别适用于不同的场景。

服务器端 RT = Thread CPU Time + Thread Wait Time。

单线程 QPS = 1000ms / RT。

多线程情况下,最佳线程数 = ( RT / CPU Time ) x CPU 核数 × CPU 利用率。多线程 QPS = 最佳线程数 × 单线程 QPS = 1000ms / CPU Time  x CPU 核数 × CPU 利用率。

以上推理宏观上正确,因为多线程下的 CPU Time(比如高并发下的GC次数增加消耗更多的CPUTime、 线程上下文切换等)和单线程下的 CPUTime是不一样的。尤其是在同步模型下的相同业务逻辑中,单线程时的 CPU Time 肯定会比大量多线程 的 CPU Time小,但是对于异步模型来说切换的开销会变小。

CPU Time 不只是业务逻辑所消耗的 CPU 时间,而是一次请求中所有环节上消耗的 CPU 时 间之和。比如在 Web 应用中,一个请求过来的 HTTP 的解析所消耗的 CPU 时间, 是 CPU Time 的一部分,另外,这个请求中请求 RPC 的 encode和 decode所消耗的 CPU 时间也是 CPU Time 的一部分。

CPU Time 是由哪些因素决定的呢?两个关键字: 数据结构+算法。

影响 CPU 利用率的因素有:

I/O 能力:分磁盘I/O和网络I/O(网络I/O又分带宽或网络链路等)。

数据库连接池(并发能力= PoolWaitTime  /RT ( client ) x Poo!Size)。

内存不足,GC 大量占用 CPU,导致给业务逻辑使用的 CPU 利用率下降,而且 GC 时压满足 Amdahl定律锁定义的场景。

共享资源的竞争,比如各种锁策略(读写锁 、 锁分离等),各种阻塞队列,等等 。

所依赖的其他后端服务 QPS 低造成瓶颈 。

线程数或者进程数,乃至编程模型(同步模型、异步模型,某些场景适合同步模型, 某些场景适合异步模型) 。

1.2 相关定律

Amdahl 定律是用来描述可伸缩性的。可伸缩性是指,当增加计算资源的时候,如 CPU、内存、带宽等,QPS 能够相应地进行改进。

Amdahl在自己的论文中指出,可伸缩性是指在一个系统中,基于可并行化和串行化的组件各自所占的比例,当程序获得额外的计算资源(如 CPU 或者内存等)时, 系统理论上能够获得的加速值(QPS 或者其他指标可以翻几倍)。

Gustafson 定律,是 Amdahl 定律的补充 : S(P) = P - α · (P 一 1),其中P是处理器个数,α 是串行时间占总执行时间的比例 。

两个定律有关系吗?有,它们是相辅相成的关系。 前者从串行和并行执行时间的角度来推导,后者从串行和并行的计算量角度来推导, 不管哪个角度,最终的结果是一样的。

6ce076a379a0d844dd87187d005cb61a.png

当计算资源(处理器数量)增加时,在串行比例不变的情况下,CPU利用率下降。

但计算资源(处理器数量)增加时,串行的比例越大,CPU利用率下降得越多。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值