-
一般重复请求一万次计算总响应时间然后除以一万得到单词响应时间。
-
测试程序并不是启动多线程然后不停发送请求,而是在两次请求之间加入一个随机等待时间。
-
吞吐量:每天通过收费站的车辆数目;并发数:正在行驶的车辆数目;响应时间:车速。TPS:每秒事务数;HPS:每秒请求数;QPS:每秒查询数。
-
性能计数器:System Load(系统负载,最理想为CPU数目)、对象与线程数、内存使用、CPU使用、磁盘与网络I/O等指标。
-
并发数逐渐增加阶段:性能测试-->负载测试-->压力测试、稳定性测试。
-
随着请求增加系统处理能力增加变缓达到最大值,这是系统最大负载点。继续加压系统处理能力反而下降,最后崩溃可看作系统崩溃点。
-
浏览器访问优化:1.减少HTTP请求(合并请求,CSS偏移响应);2.使用浏览器缓存(HTTP中Cache-Control和Expires属性,更改文件名逐步更新);3.启用压缩html、css、js启用GZip;4.Css放上面(下载后才渲染页面),js放最下面(下载后立马执行,所以可能阻塞);5.减少Cookie传输(静态资源可启用独立域名,不需要cookie)。
-
CND加速:对静态资源放入CDN极大改善网页打开速度。
-
反向代理:位于网站机房一侧,代理网站WEB服务器接收HTTP请求,可保护网站安全;可存放缓存;可实现自动负载均衡。
-
应用服务器性能优化:缓存、集群、异步。
-
网站性能优化第一定律:优先考虑使用缓存(访问速度高的存储介质,提高访问速度,无需重复计算)。计算KV对中Key的HashCode对应的Hash表索引,实现快速访问。
-
合理应用缓存的地方:频繁修改的数据(读写比例大于2:1)、没有热点的访问、数据不一致与脏读(接受超时后重新加载的时间间隔)、缓存可用性(缓存宕机不能对数据库产生很大影响)、缓存预热(提前加载数据放入缓存、LRU:最近最久未用算法)、缓存穿透(缓存无数据,直接访问数据库,最好将不存在的值缓存为null)。
-
分布式缓存:更新同步分布式(JBoss Cache,所有机器保存缓存内容相同)、互不通信的分布式(Memcached,内存:根据大小块分组,查找大于数据的最小chunk,采用LRU算法释放最近最久未被访问的空间,通过一致性哈希算法可无限制伸缩)。
-
异步操作:把用户请求直接访问数据库环节增加消息队列,请求发送到消息队列后直接返回,有消息队列操作数据库,从而达到削峰作用。
-
使用集群:使用负载均衡技术为一个应用构建一个由堕胎服务器组成的服务器集群,分散请求到多台服务器处理。
-
代码优化:多线程(启动线程数=[任务执行时间/(任务执行时间-IO等待时间)]*CPU内核数)、资源复用(数据库连接、网络通讯连接、线程、复杂对象等)、数据结构(字符-->MD5指纹-->hash计算-->hashcode)、垃圾回收。
-
存储性能优化:1.机械(快速顺序读写、慢速随机)vs固态 2.B+树vs LSM树 3.RAID vs HDFS
-
RAID:RAID0(同时读写多块,100%)、RAID1(同时写入2块,50%)、RAID10(同时结合1和0,50%)、RAID5((n-1)/n)、RAID6(可靠性比5高,(n-2)/N)。
-
HDFS:以块为单位,一个文件被分割成若干Block,当写完一个Block是自动复制到另外2台,保证有3个副本。通过MapReduce并发计算任务框架,同时读取多个Block并发处理,相当于RAID0并发。