php高并发网站源码分享(php高并发三种解决方法)

大家好,php高并发网站源码分享相信很多的网友都不是很明白,包括php高并发三种解决方法也是一样,不过没有关系,接下来就来为大家分享关于php高并发网站源码分享和php高并发三种解决方法的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!

1.Unix域Socket通信

Unix域Socket因为不走网络,的确可以提高Nginx和php-fpm通信的性能,但在高并发时会不稳定。

Nginx会频繁报错:

connect()tounix:/dev/shm/php-fcgi.sockfailed(11:Resourcetemporarilyunavailable)whileconnectingtoupstream

可以通过下面两种方式提高稳定性:

1)调高nginx和php-fpm中的backlog

配置方法为:在nginx配置文件中这个域名的server下,在listen80后面添加defaultbacklog=1024。

同时配置php-fpm.conf中的listen.backlog为1024,默认为128。

2)增加sock文件和php-fpm实例数

再新建一个sock文件,在Nginx中通过upstream模块将请求负载均衡到两个sock文件背后的两套php-fpm实例上。

2.php-fpm参数调优

2.1进程数

php-fpm初始/空闲/最大worker进程数

pm.max_children=300

pm.start_servers=20

pm.min_spare_servers=5

pm.max_spare_servers=35

2.2最大处理请求数

最大处理请求数是指一个php-fpm的worker进程在处理多少个请求后就终止掉,master进程会重新respawn一个新的。

这个配置的主要目的是避免php解释器或程序引用的第三方库造成的内存泄露。

pm.max_requests=10240

2.3最长执行时间

最大执行时间在php.ini和php-fpm.conf里都可以配置,配置项分别为max_execution_time和request_terminate_timeout。

3.php-fpm的高CPU使用率排查方法

3.1CPU使用率监控方法

top命令

直接执行top命令后,输入1就可以看到各个核心的CPU使用率。而且通过top-d0.1可以缩短采样时间。

3.2开启慢日志

配置输出php-fpm慢日志,阀值为2秒:

request_slowlog_timeout=2

slowlog=log/$pool.log.slow

利用sort/uniq命令分析汇总php-fpm慢日志:

grep-v”^$”www.log.slow.tmp|cut-d””-f3,2|sort|uniq-c|sort-k1,1nr|head-n50

参数解释:

sort:对单词进行排序

uniq-c:显示唯一的行,并在每行行首加上本行在文件中出现的次数

sort-k1,1nr:按照第一个字段,数值排序,且为逆序

head-10:取前10行数据

3.3用strace跟踪进程

利用nohup将strace转为后台执行,直到attach上的php-fpm进程死掉为止:

nohupstrace-T-p13167>13167-strace.log&

参数说明:

-c统计每一系统调用的所执行的时间,次数和出错的次数等.

-d输出strace关于标准错误的调试信息.

-f跟踪由fork调用所产生的子进程.

-ofilename,则所有进程的跟踪结果输出到相应的filename

-F尝试跟踪vfork调用.在-f时,vfork不被跟踪.

-h输出简要的帮助信息.

-i输出系统调用的入口指针.

-q禁止输出关于脱离的消息.

-r打印出相对时间关于,,每一个系统调用.

-t在输出中的每一行前加上时间信息.

-tt在输出中的每一行前加上时间信息,微秒级.

-ttt微秒级输出,以秒了表示时间.

-T显示每一调用所耗的时间.

-v输出所有的系统调用.一些调用关于环境变量,状态,输入输出等调用由于使用频繁,默认不输出.

-V输出strace的版本信息.

-x以十六进制形式输出非标准字符串

-xx所有字符串以十六进制形式输出.

-acolumn

设置返回值的输出位置.默认为40.

-eexecve只记录execve这类系统调用

-p主进程号

3.4加速PHP解释执行

鸟哥在博客中说,提高PHP7性能的几个tips,第一条就是开启opcache:

记得启用ZendOpcache,因为PHP7即使不启用Opcache速度也比PHP-5.6启用了Opcache快,

所以之前测试时期就发生了有人一直没有启用Opcache的事情

那么什么是Opcache呢?

Opcache的前生是Optimizer+,它是PHP的官方公司Zend开发的一款闭源但可以免费使用的PHP优化加速组件。Optimizer+将PHP代码预编译生成的脚本文件Opcode缓存在共享内存中供以后反复使用,从而避免了从磁盘读取代码再次编译的时间消耗。同时,它还应用了一些代码优化模式,使得代码执行更快。从而加速PHP的执行。

PHP的正常执行流程如下

PHP的正常执行流程

request请求(nginx,apache,cli等)–>Zend引擎读取.php文件–>扫描其词典和表达式–>解析文件–>创建要执行的计算机代码(称为Opcode)–>最后执行Opcode–>response返回

每一次请求PHP脚本都会执行一遍以上步骤,如果PHP源代码没有变化,那么Opcode也不会变化,显然没有必要每次都重新生成Opcode,结合在Web中无所不在的缓存机制,我们可以把Opcode缓存下来,以后直接访问缓存的Opcode岂不是更快,启用Opcode缓存之后的流程图如下所示:

启用Opcode缓存之后的流程

Opcodecache的目地是避免重复编译,减少CPU和内存开销。

文章到此结束,如果本次分享的php高并发网站源码分享和php高并发三种解决方法的问题解决了您的问题,那么我们由衷的感到高兴!

Published by

风君子

独自遨游何稽首 揭天掀地慰生平