性能优化的一些建议
提升性能的几个方式:
1、换框架,最直接效果最好(很多框架可以为项目节省很多时间开销和空间开销)建议大家使用框架开发。
2、根据项目,换具体实现方式(针对项目的重点,优化重点,采用对这个支持最好的技术)、代码解析方式(HHVM)。
3、直接修改项目源码(最麻烦、效果一般)。
注意点:网络、服务器配置、nginx、数据库、PHP、扩展;
分析这些现象是否正常以及是否有可优化的空间,最好掌握TCP/IP三本书的知识。
1、做性能优化之前,需要了解项目应用的技术,比如PHP的扩展,memcached、redis、Xcache等;
2、结合项目和扩展,了解扩展的优缺点,给出更好方案;比如有个nginx的优化项目,了解当时nginx版本的优缺点,然后根据nginx的第三方家在模块特点,编译新模块。发现对性能有了很大的优化;
3、梳理业务流程,一般来说,都是针对一个URL,看这个URL中涉及的流程,可以使用工具如xhprof对php调用方法次数,cpu,时间直观的查看;
通过这个过程,能够把握梳理项目的流程,代码等。起码知道sql什么样的,php写的怎么样。sql写的不好,直接改(当然你得熟悉)。还可以通过网络命令查看数据库是否是累赘。
4、梳理业务完毕,最简单的方式通过top查看你访问的这个URL消耗的CPU的情况,性能问题主要体现在CPU使用率及并发上。如果一个URL消耗cpu不到1%,问题就不大。要是cpu很高的时候,就可以着手适当修改PHP代码了。之后可以通过http_load压力工具对这个URL释放压力,看fps如何。这期间就不断的修改代码--释放压力--查看fps。提升到你觉得不行了,然后再换思路。通过查看linux端口,线程看下是否是数据库有影响,建索引,改结构,换引擎等等。
5、上面的做完之后,基本表层的东西就优化完了。
6、如果采取的扩展及应用存在短板的话,你需要更改其实现方式或者用另一个扩展应用去替换它。重新安装扩展应用,修改php代码,重复之前过程,查看性能情况。如果改变扩展的实现方式基本都是用c++或者c去实现的,需要重新编译,编译完成后你需要通过valgrind来查看你改写的扩展是否存在内存泄露的问题。
7.换框架这点需要根据项目要求进行舍取。
8.上面做完优化后,需要对比差异。通过shell的wget,curl,diff对url访问结果进行对比看是否一致,如果是很多url那么就用shell访问这些用例。
9.差异性完成后,是做性能测试,释放同样的压力和之前的程序做对比,看优化多少
10.性能测试完成后,是稳定性测试,让大量url同时访问,连续跑一周或者更久,查看程序是否挂掉。如果不存在就完事了
11.对于nginx方面的配置要有了解,知道哪些配置能起到优化作用,比方说worker_processes、sendfile,gzip等
12.对于web中还有很多:减少http请求(合并脚本跟样式文件,如可以把多个 CSS 文件合成一个,把多个 JS 文件合成一个;
13.网络因素、服务器因素这个需要你积累经验;网络这块通过tcp的知识进行分析,服务器因素基本服务器的配置设置网上都有,让每个网卡的通道对上每个cpu,每个cpu在对着每个进程等,只要让服务器的内部cpu资源调度占用最少就是优化,再有就是有些文件能放在内存中就放在内存中,这样读取也不至于造成IO沾满对cpu也是很好的优化。
基本想到的就这些了,我后期会继续更新博客,做一些详细的具体的步骤说明。用到的工具使用等等,欢迎大家邮件订阅,rss订阅。
1、换框架,最直接效果最好(很多框架可以为项目节省很多时间开销和空间开销)建议大家使用框架开发。
2、根据项目,换具体实现方式(针对项目的重点,优化重点,采用对这个支持最好的技术)、代码解析方式(HHVM)。
3、直接修改项目源码(最麻烦、效果一般)。
注意点:网络、服务器配置、nginx、数据库、PHP、扩展;
分析这些现象是否正常以及是否有可优化的空间,最好掌握TCP/IP三本书的知识。
1、做性能优化之前,需要了解项目应用的技术,比如PHP的扩展,memcached、redis、Xcache等;
2、结合项目和扩展,了解扩展的优缺点,给出更好方案;比如有个nginx的优化项目,了解当时nginx版本的优缺点,然后根据nginx的第三方家在模块特点,编译新模块。发现对性能有了很大的优化;
3、梳理业务流程,一般来说,都是针对一个URL,看这个URL中涉及的流程,可以使用工具如xhprof对php调用方法次数,cpu,时间直观的查看;
通过这个过程,能够把握梳理项目的流程,代码等。起码知道sql什么样的,php写的怎么样。sql写的不好,直接改(当然你得熟悉)。还可以通过网络命令查看数据库是否是累赘。
4、梳理业务完毕,最简单的方式通过top查看你访问的这个URL消耗的CPU的情况,性能问题主要体现在CPU使用率及并发上。如果一个URL消耗cpu不到1%,问题就不大。要是cpu很高的时候,就可以着手适当修改PHP代码了。之后可以通过http_load压力工具对这个URL释放压力,看fps如何。这期间就不断的修改代码--释放压力--查看fps。提升到你觉得不行了,然后再换思路。通过查看linux端口,线程看下是否是数据库有影响,建索引,改结构,换引擎等等。
5、上面的做完之后,基本表层的东西就优化完了。
6、如果采取的扩展及应用存在短板的话,你需要更改其实现方式或者用另一个扩展应用去替换它。重新安装扩展应用,修改php代码,重复之前过程,查看性能情况。如果改变扩展的实现方式基本都是用c++或者c去实现的,需要重新编译,编译完成后你需要通过valgrind来查看你改写的扩展是否存在内存泄露的问题。
7.换框架这点需要根据项目要求进行舍取。
8.上面做完优化后,需要对比差异。通过shell的wget,curl,diff对url访问结果进行对比看是否一致,如果是很多url那么就用shell访问这些用例。
9.差异性完成后,是做性能测试,释放同样的压力和之前的程序做对比,看优化多少
10.性能测试完成后,是稳定性测试,让大量url同时访问,连续跑一周或者更久,查看程序是否挂掉。如果不存在就完事了
11.对于nginx方面的配置要有了解,知道哪些配置能起到优化作用,比方说worker_processes、sendfile,gzip等
12.对于web中还有很多:减少http请求(合并脚本跟样式文件,如可以把多个 CSS 文件合成一个,把多个 JS 文件合成一个;
13.网络因素、服务器因素这个需要你积累经验;网络这块通过tcp的知识进行分析,服务器因素基本服务器的配置设置网上都有,让每个网卡的通道对上每个cpu,每个cpu在对着每个进程等,只要让服务器的内部cpu资源调度占用最少就是优化,再有就是有些文件能放在内存中就放在内存中,这样读取也不至于造成IO沾满对cpu也是很好的优化。
基本想到的就这些了,我后期会继续更新博客,做一些详细的具体的步骤说明。用到的工具使用等等,欢迎大家邮件订阅,rss订阅。