应用层面的优化
性能通常的瓶颈是缓慢的查询,锁,CPU饱和,网络延迟和文件I/O寻找常见问题
1.各个机器上的CPU,磁盘,网络和内存资源的使用情况。注意检查配置文件
2.应用是否真正使用了所取得的数据
3.应用和数据库是否做了该由对方做的事情
4.应用里执行了太多的查询
5.应用无必要的连接到MySQL
6.连接到MySQL的次数太多
7.做了太多不必要的查询
8.是否使用了连接池
9.是否使用了永久性连接
10.是否在没有使用的时候,打开着连接
web服务器
Apache使用注意事项1.不要把Apache用作静态内容的服务,可以选择lighttpd和nginx
2.使用缓存代理服务器,squid和varnish,可以缓存大部分页面,可以通过ESL技术把页面上小块动态部分放在缓存的静态部分里
3.对动态,静态内容设置过期策略
4.开启gzip压缩
5.不把Apache上的长距离连接配置为Keep-Alive模式。可以用一个服务端的代理处理Keep-Alive的连接,在Apache与代理之间可以设置为Keep-Alive,因为代理只使用几个连接从服务器上读取数据
缓存
分为:主动缓存和被动缓存被动缓存只保存数据和返回数据,比如memcached
主动缓存找不到请求数据时,一般会把请求传递给应用的某一部分,生成所请求的内容,然后存储这部分数据,并返回给客户端,比如squid
应用层面的缓存:
本地缓存,比较小,只存在于请求处理时的进程内存空间里,避免对同一资源多次请求。只是应用程序代码里的一个变量或一个散列表
分布式内存缓存,memcached,有效的使用方法是“多取”操作
磁盘缓存,慢速,持久性对象适合做磁盘缓存。常用技巧用404错误处理过程来捕捉没命中的缓存
缓存控制策略
存活时间,每个缓存对象带有一个作废日期,用一个删除进程定时检查该数据的作废时间是否到达,可以删除或者更新
显式作废,当缓存里的数据过于陈旧,可以直接将该数据标志作废或者用新的数据替换旧缓存数据(保存对象到缓存时,还有保存数据所依赖的版本号或时间戳)
读时作废,保存一些信息来判断从缓存里读取的数据是否已经作废,随着时间的增长,开销是固定的