计算机的资源有限,各种资源均可造成性能瓶颈,包括CPU、内存、硬盘、网络、数据库、线程等,此外还有其他缓解方法,下面一一说明。
一、CPU
1.检查程序逻辑,是否有CPU浪费。
2.空间换时间,常用的东西存储在内存里,不要每次都计算;
3.动态页静态化,空间换时间的一种,当然,如果你的动态页生成很简单很快很快,页面静态化反而慢了。
4.性能敏感处尽量不要用stl,用数组代替可大大提高效率。
5.优化数据结构,减少基本操作时间,如插入删除、遍历,用正确的数据结构;
6.memcached,空间换时间的一种,这种方法还可以在多个服务器之间共享数据,缺点是依赖网络,比内存慢。
二、内存
1.时间换空间
2.优化算法,比如广度优先换成深度优先,可减少内存使用量。
3.memcached,缺点是比内存慢
4.使用磁盘文件存储,缺点是需要磁盘读写,比内存速度慢。
三、硬盘
1.异步IO
2.文件内容加载进内存,以后不再读文件;
四、网络
1.时间换带宽,比如压缩后传输
2.UDP代替TCP,如果允许丢包,用UDP可适当提高性能。
3.代理缓存
4.负载均衡
五、数据库
1.减少数据库查询次数,尽量一次查出所有所需数据;
2.分表,一个表数据量过大会导致性能明显下降,适当分表减少单表数据量;
3.sql语句优化,分析sql语句写法,提高效率;
4.正确使用索引,注意,索引过多也会导致插入性能降低。
5.用load data infile代替单条insert;
6.关于数据库优化,这两篇文章也值得参考
http://hi.baidu.com/zhanglei_186/blog/item/0b074cc8bbcaa41f7e3e6f46.html
http://hi.baidu.com/xytel/blog/item/d74d4c1204e4d959f919b827.html
六、线程、同步、进程
1.多线程改成单线程异步IO,不但降低同步带来的复杂度,而且降低线程数,避免IO等待;
2.使用多线程处理并发请求,这一条和上一条不矛盾,充分利用多核优势;
3.共享内存可能是最快的一种IPC方式。
七、其他
1.分布式可能是最有效的优化方法,但分布式会造成整个系统的复杂度明显上升,建议充分考虑低耦合、高内聚的基础上执行分布式设计。
2.代理缓存,squid等,减少访问量也就缓解了整个系统的资源,缺点是仅适合静态页。
3.负载均衡,分布式的一种。
4.使用专门的服务器处理分担页面中的静态部分,如图片等
5.如果频繁创建TCP连接的话,需要使用连接池