《构建高性能web站点》笔记
一 服务器并发处理能力
Apache ab进行压力测试
ab -n1000 -c10 http://localhost/test.com 总请求次数1000,并发用户10
列出几个重要的字段:
Time token for tests 表示所有这些请求处理完成所花费的时间。
Document length 表示HTTP响应数据的正文长度
Request per second 这是我们关注的吞吐率
Time per request 用户平均请求等待时间
Time per request(across all concurrent requests) 服务器平均请求处理时间
cat /proc/loadavg
列出当前系统进程的运行队列:0.00 0.04 0.00 1/768 31940
1表示此事运行队列中的进程个数,768代表此时进程总数。31940表示目前为止,最后创建的进程ID
0.00 0.04 0.00 表示系统负载,负载越高,cpu越忙。三个值表示最近1分钟,5分钟,15分钟的统计,top和w等工具也可查看。
二 动态内容缓存
三 浏览器缓存
IE直接存储了临时文件。
Chrome和Firefox是采用二进制进行存储的,Chrome用chrome://cache、Firefox用about:cache进行查看。
1. Last-Modified 机制
启用缓存是服务器端处理的,在response消息头中加入Last-Modified:xxxx,这个时间会保存在缓存中,这样浏览器下次请求同样的内容时
消息头里面带If-Modified-Since:xxx发送给服务器,对于静态文件,服务器直接判断是否有改动,没有的话直接返回消息头304 Not Modified
让浏览器直接使用本地缓存,不会传输正文给浏览器。、
2. ETag 简单采用md5值
采用一串编码来标记内容,如果标记没有修改则表示内容没有改动。
启用缓存是服务器端处理的,在response消息头中加入ETag:‘xxxx’,浏览器下次请求同样的内容时带If-None-Match: “xxxx”,xxxx一致就返回
304.
静态内容和动态内容缓存不同,动态内容需要自己控制。
3. Expires机制。 Last-Modified 机制还是需要每次请求服务器查询文档是否有改动,Expires机制在response中直接告诉内容何时过期,在未过期
时效内直接使用缓存即可,无需再询问服务器。
格式如:Expires Sun,19 Feb 2002 16:00:00 GMT.
Ctrl+F5强制刷新,即不使用缓存。
F5,可让Last-Modified发挥效果,对Expires无效
如果服务器和本地不同,会导致Expires不准确,利用Cache-Control来弥补,
格式Cache-Control:max-age=<second> max-age指明缓存过期的相对时间,时间是相对于浏览器的本地时间而言的。
当Expires和Cache-Control同时存在,以Cache-Control优先。
四 web服务器缓存
五 web组件分离
浏览器并发数,浏览器会为每个域名维护不同的下载队列,wen组件分离后(不同域名)导致下载并发数增多,整体性能提高。
六 分布式缓存
七 数据库性能优化
索引:一般来说,如果一个字段出现在查询语句中基于行的选择、过滤或者排序条件中,那么为该字段建立索引便是有价值的。
like不能使用索引
组合索引:一次查询对于一个数据表只能使用一个索引,比如 ... where a=1 and b=2 即使a、b都建立的索引,无法进行叠加。
非顺序索引类型(如hash),对于order by是无效的。
慢查询日志
MySql在my.cnf添加配置:
long_query_time=1
long-slow-queries=/data/var/mqsql_slow.log
log-queries-not-using-indexes
这样随着MySql运行,会收集查询日志,以便分析。
八 web负载均衡