‘壹’ 关于php性能优化,网上看到这样一句话:面向对象往往开销很大,每个方法和调用都会消耗很多内存。请问
别太相信专家,他说的面向对象指的是 使用mvc模式,这是会有一定的开销。但很大这个词用不上,大这个也用不上,应该是很少。不过也得看你代码的水平。你看一下好的框架。速度是杠杠的。为什么面向对象框架这么受欢迎。就是因为他好用。每样东西都有优缺点,但只要权衡轻重就行了。存在必然有其存在的道理。流行必然也是因为他好。。。
但换句话说,不是高手不用面向对象写出来的代码更差。而且没法维护。
‘贰’ 从服务器负载一路走到PHP-FPM优化终于搞定了PHP项目偶尔很慢的问题
项目情况:阿里云Rds 阿里云Redis PHP8 IN Docker
项目出现偶尔请求超时问题,最长可达20秒。首先排查服务器负载,发现并非问题所在。接下来,怀疑 Mysql 部分查询效率慢,检查数据库负载及慢查询,确认不是数据库原因。继续排查 Nginx,查看日志,未发现429状态码频繁出现,排除 Nginx Worker数量不足或异常情况。了解HTTP状态码429(Too Many Requests)表示短时间内发送过多请求。常见解决办法包括调整Nginx工作进程和连接数量。自动检测CPU核心数设置进程数量,根据服务器性能调整并发连接数。同时,确保文件描述符限制合理,避免资源耗尽。若服务器处理能力达到瓶颈,考虑负载均衡和扩展性。发现PHP-FPM进程数量默认设置过低,调整为20个进程,使用Docker-compose挂载配置文件zz-docker.conf。重启Docker后,问题解决,一切恢复正常。
常用PHP-FPM参数优化包括:
合理设置脚本执行超时时间,避免资源浪费。
调整等待连接队列的最大长度,适应系统负载和并发需求。
选择合适的日志级别,平衡调试与性能。
记录执行时间过长请求,辅助代码优化。
优化配置需综合考虑服务器硬件、网站访问量及应用行为,通过测试和调整实现最佳性能和稳定性。
‘叁’ 如何设置BT宝塔面板并优化php服务器性能
设置宝塔面板需要安装组件,然后参考宝塔面板优化 php 服务器性能,按照里面的设置,一项项的操作完毕,就差不多了。
宝塔面板把优化php已经变成一件很简单的事情了。
‘肆’ PHP开发中如何提高系统的稳定性和可靠性
PHP 应用的高性优化,很多时候我们把业务代码做一些优化,反而是简单又高效的。
业务的异步解耦,比如,我们把耗时的多个分表数据的排行榜,通过其他服务做分布统计,然后再综合,最终输出到redis list中,那我们前端 PHP 在调用数据的时候,就不用实时计算了。
缓存的多级处理,业务复杂以后,经常看到一份相同的数据读取 N 次,尽管是有缓存服务器,但是读取的时候也会有网络 I/O 的开销,考虑到我们 PHP 一般使用场景下都是单进程,使用频率高的,则应该优先使用进程内缓存。然后再本地缓存,然后再到网络缓存。
单例的运用,不要小看了对象的构造,很多时候我们在同一进程中,会发现同时构造了 N 多相同的对象。每一次的初始化都是一块内存的开辟和 CPU 的消耗。
高性能,一个就是运行环境的优化,另一个是代码本身的优化。
运行环境的优化,覆盖面也很广,包括系统层面的内核,文件系统类型,数据库及缓存服务本身的性能优化,再到PHP解释器的性能优化等等,PHP不同运行方式的差异(比如Apache模块,还有PHP-FPM等等)。
代码优化方面,我觉得可维护性和代码可读性的重要性大于高性能。代码优化可以借助profiling工具来分析,找到真实访问条件下,处理瓶颈在哪里,再去做针对性的优化。当然自己在初次设计和实现的时候,就需要做一定的整体考虑,例如怎么设计能够减少数据库的查询次数,如何减少重复的操作,了解同一问题的多种解决办法哪一种效率更高(包括算法上的差异,以及PHP的不同方式导致的差异等等),如何设计缓存来提高缓存命中率等等。有一些设计需要在体验和效率上做个权衡。
保证稳定性,同样也分运行环境和代码本身。前者要对线上服务做完整的监控,这个有很多完善和强大的开源工具可以使用,保障基础环境是稳定可控的,并且能够及时发现问题,进行修复。至于代码,除了尽量做完整的测试,开发的时候就需要考虑可能的问题。另外针对PHP,开发环境可以把error_reporting完全打开。还有需要知道常见的安全问题(XSS,SQL注入,CSRF,越权等),毕竟安全问题也是稳定的一部分。