博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php fpm高并发,php服务器高并发优化思路
阅读量:5299 次
发布时间:2019-06-14

本文共 1618 字,大约阅读时间需要 5 分钟。

77b0d6f72250115d0b60bd2dd3b70f42.gif

一点php分享关于php遇到高并发瓶颈时的一些优化思路,首先如何确认你的服务器是否处于高负载状态,可以通过linux中top指令查看具体信息,load average: 0.00, 0.00, 0.00 重点关注这3个值的大小,分别代表服务器1分钟、5分钟、15分钟时间段的负载情况,如果他的数字大于你的cpu核数,并且这个时间cpu的使用率也是居高不下,那么你的服务器目前一定是处于高负载。

处于高负载情况下的top图:

77b0d6f72250115d0b60bd2dd3b70f42.gif

这里并没有达到很夸张的负载情况,只是用了ab压测ab -n 100000 -c 1000,但是也达到了负载的饱和状态,不过你要确认你的服务器并不是受到了某种恶意攻击,而是确确实实的真实流量。

步骤一、

对应接口代码排查,找出是否有存在某个接口代码响应时间较慢导致,进行代码优化,这里可以通过开启php的慢日志记录,查看对应的日志。

步骤二、

如果代码层面没有问题,则进行php调优,查看php-fpm进程管理配置文件php-fpm.conf,需要注意以下几个参数:

pm = dynamic#进程管理使用动态dynamic  还是静态static pm.max_children = 20 #只有最大的进程数量,如果是static模式,只有该参数有效

pm.start_servers = 10#动态情况下默认首次启动的进程数量

pm.max_requests = 100#每个进程接收请求处理最大次数,达到最大值后进程会重启 pm.min_spare_servers = 10#动态情况下,服务器处于空闲时期的最小进程数量 pm.max_spare_servers = 20#动态情况下,服务器处于空闲时期的最大进程数量且必须小于pm.max_children

注:一个php进程的内存占用在20m-40m左右,通过free指令查看当前系统可用内存,分配合理进程数即可。

步骤三、

如果php版本低于7以下,建议升级php版本>=7.1并安装opcache扩展,因为在php7以后对opcache进行了极大的优化,性能至少提升60%。

opcache参考配置:

opcache.enable=1 #OPcache 开启

opcache.memory_consumption=512 #这个配置表示你想要分配给 OPcache 的内存空间(单位:MB),设置一个大于 64 的值即可。

opcache.interned_strings_buffer=64 #这个配置表示你想要分配给实际字符串的空间(单位:MB),设置一个大于 16 的值即可。

opcache.max_accelerated_files=32531 #这个配置表示可以缓存多少个脚本,将这个值尽可能设置为与项目包含的脚本数接近(或更大)。

opcache.validate_timestamps=0 #改配置值用于重新验证脚本,如果设置为 0(性能最佳),需要手动在每次 PHP 代码更改后手动清除 OPcache。如果你不想要手动清除,可以将其设置为 1 并通过 opcache.revalidate_freq 配置重新验证间隔,这可能会消耗一些性能,因为需要每隔 x 秒检查更改。

opcache.save_comments=1 #这个配置会在脚本中保留注释,我推荐开启该选项,因为一些库依赖于这个配置,并且我也找不出什么关闭它的好处。

opcache.fast_shutdown=0 #快速关闭会给一个更快速清理内存的机制,不过,在我的基准测试中,更慢一些,可能这会应用带来一些性能提升,但是你需要自己去尝试。

步骤四、

如果当前服务器资源利用率已经达到了最大化,并且负载还是处于居高不下的情况,这个时候需要考虑系统架构的扩展优化,例如水平增加php服务器,达到负载均衡的效果。以上只是一个优化的大致思路,每一个步骤都可以进行更细致的优化。

转载地址:http://zodqv.baihongyu.com/

你可能感兴趣的文章
ztree根据关键字模糊搜索
查看>>
求一个环形数组最大子数组的和
查看>>
http://www.cnblogs.com/xqin/p/4862849.html
查看>>
科技写作:何时用英文写作?
查看>>
微服务核心20讲 读书笔记
查看>>
努力有什么用
查看>>
nginx_tomcat
查看>>
WEB前端面试题查询整理
查看>>
【CodeForces - 598D】Igor In the Museum(bfs)
查看>>
Spark-Mllib中各分类算法的java实现(简易教程)
查看>>
给你的HTTPS添加Let's Encrypt证书
查看>>
2014年总结
查看>>
图解分析mochiweb web server
查看>>
netstat 2
查看>>
as3.0 [Embed]标签嵌入外部资源
查看>>
Python 发 邮件
查看>>
mysql忘记密码的解决办法
查看>>
全面分析Java的垃圾回收机制2
查看>>
ssh中文乱码解决
查看>>
Day1:初识Python
查看>>