总结了一些关于 Java Web 项目性能提升的意见(很多是前人总结出来的,也有有自己摸索出来的,还有同事帮忙指点到的,谢谢他们),欢迎网友们进来补充,也欢迎各种板砖。本文已同步到 CSDN 博客,地址是:http://blog.csdn.net/defonds/article/details/17304931。
废话少说,上些干货:
使用 Nginx 作为前端接入
用 Nginx 进行动静分离。这个不用多讲,新浪、网易、淘宝、腾讯等巨头的使用已经说明了一切。
保持最简单的架构
遵守 KISS 原则(Keep it simple and stupid)。尽量不要考虑项目外的重用。过多的考虑项目外的重用,必然会增加项目的复杂度。避免过度集成,让每个模块只做自己的事,这对于日后的维护和模块复用都有好处。
精心设计缓存处理、毫不吝啬代码(对象、列表、片段)
对于门户网站的首页来说,往往可能会有近百个 SQL。用户并发上去以后,光首页就足以让服务器 down 掉。缓存不有利于降低负载,而且还能提高响应速度。
调整使用聚集索引
对于每个表来讲,聚集索引只有一个,利用好了,查询速度会有意想不到的提升效果。
使用 /dev/shm 来存储缓存的磁盘文件
在网站运维中,利用好了这一点,往往有意想不到的收获。以 tomcat 为例,可以通过修改 catalina.sh 中的 CATALINA_TMPDIR 值的路径来将缓存设置为 /dev/shm。
以 OSC 为例,他们就是纯 Java 写的,部署在 tomcat 下。在长时间的在线运行之后,管理员发现网站响应速度奇慢,服务器负载正常,又找不出是哪里的问题。后来 df 一下,发现 tomcat 临时目录下的文件足足有 8G 之多,原来是 CPU 等待磁盘操作造成响应速度加长。于是他们将临时目录映射到 /dev/shm,网站响应速度从此奇快。
分析系统中每一个 SQL 的执行效率
以 MySql 为例,对于每个 SQL 最好都 explain 一下。对于有明显效率问题的,通过 sql 优化、调索引等方法进行改进。
健康慢查询日志,检查所有执行超过 100 毫秒的 SQL
对于上线了的项目,健康慢查询日志,检查所有执行超过 100 毫秒的 SQL,看看有没有优化余地。对于没有上线的项目,可以进行场景模拟对嫌疑 SQL,或者对频繁使用的 SQL 进行性能测试,统计它们执行时间,得出平均值,画出曲线分析图,对于单表千万数据,执行时间超过 50ms 的 SQL 要重点关注。参考《sql 性能测试例子》。
末了,帮自己的 CSDN 博客之星拉个选票。页面是http://vote.blog.csdn.net/blogstaritem/blogstar2013/defonds
进入这个页面后,点击“投他一票”按钮就可以啦。在此先谢谢啦!
------解决方案--------------------
我感觉一般吧,每个人不一样的。
------解决方案--------------------
恩,感觉还行
------解决方案--------------------
nginx在linux下那是没得说,如果在windows下,我测试过,性能不如apache httpd。
------解决方案--------------------
有点意思。 针对linux平台的。。
------解决方案--------------------
从宏观上讲解了下,如果针对每个进行讲解就更好了!学习!
------解决方案--------------------
学习了
------解决方案--------------------
不错,学习了
------解决方案--------------------
不错呀,看看
------解决方案--------------------
我觉得我现在最需要的就是思考
------解决方案--------------------
learning.
------解决方案--------------------
学习,学习,谢谢
------解决方案--------------------
楼主说的好!非常精彩!支持楼主!!!为了混点分我容易么?
------解决方案--------------------