性能优化

性能测试主要看哪几方面?

1. 响应时间 : 完成一个业务所需要的时间

2. 吞吐量: 单位时间处理的业务数量

3. 资源利用率 : 完成业务需要的开销 ( CPU, 内存,IO)

性能的难点

用户总希望发最小的代价取得最大的收益,实际上一旦确定了架构,性能也就确定了

  - 如果遵守规范体系能够达到默认架构的性能

  - 大多数的开发会违背架构,拖后腿

性能测试模型

1. 做单用户的业务串行测试 : 评估单独业务的相应时间

2. 多用户的并发测试:了解相应时间的转折点: 

  - 队列

  - 资源不足

  - 处理能力的峰值

模型结论:(所有系统都遵守)

1. 响应时间随着负载的上升先稳定后上升,并且越来越快

A点:响应时间开始变长的点

为什么响应时间开始变长? 当到达A点说明负载导致了队列的产生

B点: TPS开始下降

B点处理能力已经不能完全占用资源,开始下降了

C点: 响应时间超过用户接受范围

C点响应时间超时

系统在A点,说明负载小

系统在B点,说明达到系统最佳在线用户

系统在C点,说明系统不能用 

正常系统应该一直在A->B之间,最好不超过B

性能瓶颈:99%都是数据库

调优:ABC三点右移,说明调优成功


系统如果慢了,应该怎么处理?

有监控系统就看监控系统,没有监控系统就用命令,查看CPU, 内存,IO,network的信息

命令: top 

1. 查看cpu的使用情况

查看cpu详细情况,比如有几核

cat /proc/cpuinfo

top命令下按一下1,cpu有几核等信息也会出来

那么看到了cpu占用率比较高的进程,应该怎么定位代码呢?

    在top下用shift+h,把进程的线程信息显示出来, jstack 线程PID > info.txt,把线程pid转换为16进制,搜索info.txt,就可以看到信息了

jstack命令:每个线程的信息都会显示出来

2. 内存

vmstat 或top 

vmstat

vmstat 1 : 1秒中显示一次

free -g : 单位是G

free -m: 单位是m

buffer: 写优化

cache: 读优化

用top命令看,如果mem占比高的话,就要考虑是不是JVM的问题了

3. IO : 磁盘读写

iostat

%util : 查看IO占cpu时间比,可能超过5%就有问题了

怎么定位到IO问题? 只能看业务逻辑了

4. Network

nicstat

用jmeter压测某个url,就可以看到网络的使用情况

监控系统:

1. 硬件的监控

2. 服务的监控

 

原文地址:https://www.cnblogs.com/yintingting/p/11320424.html