一、不同视角下的网站性能
二、性能测试指标
1. 响应时间
定义:执行一个应用需要的时间,包括从发出请求开始到收到最后响应数据所需要的时间。反映系统快慢。
图1 常用系统操作响应时间表
2. 并发数
定义:系统能够同时处理请求的数目。反映系统负载特性。
网站系统用户数 >> 网站在线用户数 >> 网站并发用户数
3. 吞吐量
定义: 单位时间内系统处理的请求数量。反映系统的整体处理能力。
单位:TPS每秒事务数,HPS每秒HTTP请求数,QPS每秒查询数
并发数由小增大,服务器资源消耗逐渐增大,吞吐量先增大后下降,直至资源耗尽,吞吐量为零。
4. 性能计数器
定义:描述服务器或操作系统性能的一些数据指标。比如load、对象与线程数、内存、CPU、磁盘/网络IO。
三、性能测试方法
1. 性能测试
以系统设计规划的性能指标为预期目标,验证系统在资源可接受范围内是否能达到性能预期。
2. 负载测试
不断增大并发请求增加系统压力,直到系统某项或多项性能指标达到安全临界值。此时如果继续施压,系统处理能力不升反降。
3. 压力测试
对系统持续加压超过安全负载,直到系统崩溃,以此获得系统最大压力承受能力。
4. 稳定性测试
被测系统在特定硬件、软件、网络环境下,给系统加载一定业务压力,使系统运行一段较长时间,以此检测系统是否稳定。
图2 测试性能曲线
a-b是网站日常运行区间,c是系统最大负载点,d是系统崩溃点。
四、性能优化策略
1. Web前端性能优化
1.1. 浏览器访问优化
1.2. CDN加速:CDN本质是缓存,将数据(静态资源)缓存在离用户最近的地方。
1.3. 反向代理:缓存静态资源,加速请求响应速度、负载均衡,改善性能、安全
2. 应用服务器性能优化
2.1. 分布式缓存
网站性能优化第一定律:优先考虑使用缓存优化性能。
2.1.1. 缓存基本原理:Hash表
2.1.2. 合理使用缓存:
2.1.3. 分布式缓存架构:
2.2. 异步操作
使用消息队列将调用异步化,降低响应延时。
2.3. 使用集群
负载均衡,避免单一服务器压力过大而响应缓慢。
3. 代码优化
3.1. 多线程
启动线程数 = [任务执行时间/(任务执行时间-IO等待时间)] * CPU核数
注意线程安全问题:
3.2. 资源复用
尽量减少那些开销很大的系统资源的创建和销毁,比如数据库连接、网络通信连接、线程、复杂对象等。
两种模式:
3.3. 数据结构
3.4. 垃圾回收
理解垃圾回收机制,程序优化和参数调优,减少Full GC。
JVM垃圾回收:年轻代+老生代。年轻代包括Eden Space、From、To,进行Young GC;老生代进行Full GC。新对象从Eden Space创建,Eden满了以后YGC,将存活对象复制到From区。当Eden再次满后再次YGC,将Eden和From中的存活对象复制到To。当Eden再次满后再次YGC,将Eden和To中的存活对象复制到From。多次YGC未释放的对象进到老生代,老生代空间满时Full GC。
4. 存储性能优化
4.1. 机械硬盘升级为固态硬盘
4.2. B+树:文件系统或数据库系统通过B+数对数据排序后存储,加快数据检索速度。
4.3. RAID:可通过硬件或者软件实现。