这篇文章主要介绍了如何优化php+php-fom+nginx配置参数的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何优化php+php-fom+nginx配置参数文章都会有所收获,下面我们一起来看看吧。对于一台新的服务器,安装LNMP
环境只是第一步,第二步当然是要修改默认的配置参数,让这些程序变得好用,性能也提升起来。这篇文章主要讲述php+php-fpm+nginx
的配置参数,机器是4GB
内存的服务器,相关配置都是按照4GB
内存的服务器来配置的。mysql配置参数调优(8GB内存和64GB内存)
mysql配置文件构成以及具体的配置demo下面给出的一些配置都是相对来说会影响性能或者必须要配置的地方,没有提及的配置都是按照默认的来。这三个程序的配置参数很多,咱们的服务器刚开始也着实用不到太复杂的配置,下面的配置主要是为了尽量提升高并发能力以及尽量提高程序的性能。php和php-fpm都是5.6版本的。(一切都是为了兼容老项目,,苦逼)这几个参数是网上经常提及的,不过咱们这边并不是都要按照他们的配置来,毕竟年代已久,很多bug
或者性能问题都已经被修复。(1)max_execution_time = 300脚本运行的最长时间,超出规定时间,脚本会自动杀死这个请求,为了能上传大文件,所以这个值设置的大一些。这个值太小也会造成程序502错误。(2)memory_limit = 128M每个脚本使用的最大内存(3)max_inpit_time = 300每个脚本等待输入数据的最长时间(4)upload_max_filesize = 20M上传文件的最大许可大小(5)allow_url_fopen = off禁止打开远程地址(6)post_max_size = 20M
post
上传的大小,要>=upload_max_filesize
(7);cgi.fix_pathinfo=1
默认打开,目前高版本的php
已经避免了这个漏洞,php-fpm
的security.limit_extensions
默认值早就是 .php
了。所以咱们这个参数使用默认的就行。
参考:php fpm 设置项 cgi.fix_pathinfo=1 漏洞不再出现关于php.ini
,要设置的参数就是这些了,主要是增加程序的运行时间,增加上传文件大小等,可以方便我们平时的php
开发。这块很多人都建议,如果你的内存比较大,那么设置静态的pm = static
,这个时候,起作用的只有max_children
参数,初始的时候就有max_children
个进程,刚开始一个php-fpm
进程只占用3M
左右内存,我们4GB
的机器按照一个进程20M
计算,可以设置max_children
为200
或者150
。如果是专门的php
服务器,建议是设置为静态的,性能最佳。如果设置成动态的也可以,这样的话是start_servers
等程序起作用,会随着业务的增加而不断新增进程,不过最大进程数是不能超过max_children
的。博主这边考虑到机器内存小而且机器上还跑了mysql
,redis
等,还是选用了动态的,这样一开始不会有很大的压力,等访问量上来了,可能会修改为静态的。(1)process_control_timeout = 20php-fpm
给子进程分配的时间间隔(2)request_terminate_timeout = 320s表示等待320
秒后,结束那些没有自动结束的php
脚本,以释放占用的资源。设置320s
主要是因为php
的程序运行时间是300s
,所以对于php-fpm
来说,这个值应该是大于php
脚本规定的运行时间的(因为php
脚本的运行可能还会带有mysql
服务或者其他的一些服务,这个参数是杀掉这个进程,包括着纯php
脚本以及其他服务)。(3)自动重启设置(4)pm.max_requests = 1000每一个子进程的最大请求服务数量,如果超过了这个值,该子进程会被自动重启。比如max_requests
这个参数,如果设置很大的话,那这个子进程要运行很多次才会重启,假如这个请求发生了错误或者内存泄漏,那么这个值设置很大是不合适的。但如果请求没有问题,这个值设置小的话就会频繁的重启,这样也会碰到不少502
的问题,所以要仁者见仁,智者见智的设置了,这里初始化设置1000
,如果测试没有内存泄漏等问题,可以再大一些。mysql
中有慢日志这个概念,可以记录查询速度比较慢的sql
,同样的,php-fpm
也可以开启慢日志,记录执行速度比较慢的php
请求,方便我们后续的调试和优化。request_slowlog_timeout : 默认是注释的,打开注释,设置为1,代表请求超过1s,就会记录这个脚本到慢日志文件中。也可以的更大,按照需求来。
slowlog : 默认也是注释的,可以打开注释使用默认的慢日志路径,也可以自定义路径。这里开启慢日志,如下:参数解释:如果worker
进程不够用,master
进程会prefork
更多进程,如果prefork
达到了pm.max_children
上限,worker
进程又全都繁忙,这时master
进程会把请求挂起到连接队列backlog
里,而backlog
默认值是511
,除了加大pm.max_children
,调整backlog
也是有必要的。也就说这个backlog
是在优化高并发的时候必须要设置的,这个值的大小和fpm
的qps
也有关。backlog
太大,fpm
处理不过来照样会报错504
(超时)。这个对于目前的机器来说,我设置的max_children = 150
,然而backlog
的默认值是511
,所以在短期内是完全够用的,不过也可以在php-fpm.conf
里面显式的制定backlog
的值,比如制定:listen.backlog = 1024 #2的n次幂
参考:PHP参数调优
nginx报错502:connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory)
php-fpm进程数管理
关于PHP-FPM的backlog的默认值
PHP-FPM中backlog参数变更的一些思考
PHP-fpm一般打开nginx
配置文件,会发现有http
,server
,location
等,那么他们的层级关系是什么样的呢?答案是: 一个http
里面可以有多个server
,一个server
里面可以有多个location
。我们配置的时候,各个server
共用的部分可以配置在http
模块里面。每个server
自己特有的一些部分,按照各自的需求配置在server
模块里面。同样的,对于location
是分的更细的,按照每个server
的每个location
需求来配置。其次是如果在conf.d
文件夹下有其他的配置文件,那么我们的nginx.conf
就是公用的配置文件了,一些公用的部分都可以配置在nginx.conf文件
中,各个站点特殊的配置就放在conf.d
文件下。参考:
nginx短篇(4):模块、配置指令、块之间的关系(1)worker_rlimit_nofile更改worker进程的最大打开文件数限制。查看当前进程可以打开的文件数:查看当前系统可以打开的最大文件数:(2)log_format中的内容参考官网:https://nginx.org/en/docs/http/ngx_http_core_module.html#var_status(3)gzip压缩相关解释参考:https://www.jb51.net/article/95041.htm(4)client_max_body_size设置这个参数规定客户端上传的body
的最大值,和php.ini
中的最大上传数保持一致,不然的话,就算php.ini
设置上传的最大文件是1G
,如果nginx
不设置这个参数的话,那么上传一样会报错的。(1)配置实例代码(2)主要是fastcgi的一些配置这里不考虑负载均衡和反向代理,关于fastcgi
的优化可以参考:https://www.jb51.net/article/145222.htm(3)关于send_timeout这几个参数最好是再小一些,包括keepalive_timeout
,小一些的话,能处理更多的有效请求,有利于提升nginx
的处理性能,大佬们的设置如下:返回successful
并且没有报错信息的话,说明配置文件里面的语法是没问题的,如果报错了那就是语法出错了,导致配置无法正常读取。例如:很明显配置文件是错的。首先是max_execution_time
这个值限定了脚本的最大执行时间,但是仅限于php
脚本,对于脚本中的流操作和数据库操作等耗费的时间是不算进去的。而php-fpm
的request_terminate_timeout
代表单个请求的超时中止时间,并不会受其他脚本影响,定义10s
结束,那么10s
就准时结束该php
脚本的运行。所以配置超时时间的时候,request_terminate_timeout
可以比max_execution_time
稍微大一些。还有一种说法,在服务器正常运行的时候,php-fpm.conf
中的request_terminate_timeout
会覆盖php.ini
中的max_execution_time
,所以request_terminate_timeout
的值更代表我们对于脚本执行时间的预期。如果服务器性能足够好,可以设置request_terminate_timeout = 0
代表永不超时。当程序运行时间大于规定的参数的时候,php-fpm
会终止该php
子进程。nginx
的fastcgi_connect_timeout
操作影响的是ningx
的超时,一般来说,如果是php
或者php-fpm
超时,那么报错502 Bad Gateway(网关错误)
。如果是nginx
超时的话,报错是:504 Gateway Time-out (网关超时)
,到时候我们可以根据这个报错信息来定位问题。一般来说,为防止频繁的出现超时错误,设置fastcgi_connect_timeout
相关时间为300s
是合适的。假如设置fastcgi_read_timeout=10
,test.php
执行时间100
秒,则10
秒后webserver
会关闭和PHP
的连接。也就是说当程序运行时间大于规定的参数的时候,webserver
会关闭和PHP
的连接,出现超时错误。所以这个fastcgi
的超时时间最好是和php-fpm
中的reque免费云主机域名st_terminate_timeout
保持一致。keepalive_timeout
参数是一个请求完成之后还要保持连接多久,不是请求时间多久,目的是保持长连接,减少创建连接过程给系统带来的性能损耗,类似于线程池,数据库连接池。关于“如何优化php+php-fom+nginx配置参数”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“如何优化php+php-fom+nginx配置参数”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注百云主机行业资讯频道。
这篇文章主要介绍perl中如何批量创建不同的文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!perl以上是“perl中如何批量创建不同的文件”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注百云主…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。