《构建高性能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负载均衡

相关推荐