对于一台新的服务器,安装环境只是第一步,第二步当然是要修改默认的配置参数,让这些程序变得好用,性能也提升起来。这篇文章主要讲述的配置参数,机器是内存的服务器,相关配置都是按照内存的服务器来配置的。
mysql配置参数调优(8GB内存和64GB内存)mysql配置文件构成以及具体的配置demo
以下列出的配置项,相对于性能有影响或必须进行配置,未列出的配置项均为默认设置。这三个程序的配置参数很多,咱们的服务器刚开始也着实用不到太复杂的配置,下面的配置主要是为了尽量提升高并发能力以及尽量提高程序的性能。
php和php-fpm都是5.6版本的。(一切都是为了兼容老项目,,苦逼)
(1)safe_mode这份的配置采用默认的
(2)disable_functions在默认的基础上,加上eval()函数
(4)register_globals和magic_quotes_gpc参数都在php5.4.0后被移除了
(5)错误提示以及日志部分采用默认的就行,现在大部分使用的都是框架,
查看框架的错误日志更方便
这几个参数是网上经常提及的,不过咱们这边并不是都要按照他们的配置来,毕竟年代已久,很多或者性能问题都已经被修复。
(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上传的大小,要
(7);cgi.fix_pathinfo=1默认打开,目前高版本的已经避免了这个漏洞,的默认值早就是了。所以咱们这个参数使用默认的就行。参考:phpfpm设置项cgi.fix_pathinfo=1漏洞不再出现
关于,要设置的参数就是这些了,主要是增加程序的运行时间,增加上传文件大小等,可以方便我们平时的开发。
1、设置子进程数,增加并发量
log_level=notice //notice级别的日志,默认的
rlimit_files=4048 //调整最大打开文件数量
process.max=150 //最大子进程,设置成和max_children一样就行
pm.max_children=150 //最大子进程,假如一个进程30M,4G内存的话最大为:4048/30=135,取150
//计算公式是:min_spare_servers≤start_servers≤max_spare_servers≤max_children
这块很多人都建议,如果你的内存比较大,那么设置静态的,这个时候,起作用的只有参数,初始的时候就有个进程,刚开始一个进程只占用左右内存,我们的机器按照一个进程计算,可以设置为或者。如果是专门的服务器,建议是设置为静态的,性能最佳。
如果设置成动态的也可以,这样的话是等程序起作用,会随着业务的增加而不断新增进程,不过最大进程数是不能超过的。博主这边考虑到机器内存小而且机器上还跑了,等,还是选用了动态的,这样一开始不会有很大的压力,等访问量上来了,可能会修改为静态的。
(1)process_control_timeout=20
(2)request_terminate_timeout=320s
表示等待秒后,结束那些没有自动结束的脚本,以释放占用的资源。设置主要是因为的程序运行时间是,所以对于来说,这个值应该是大于脚本规定的运行时间的(因为脚本的运行可能还会带有服务或者其他的一些服务,这个参数是杀掉这个进程,包括着纯脚本以及其他服务)。
(3)自动重启设置
#表示在emergency_restart_interval所设值内出现SIGSEGV或者SIGBUS错误的php-cgi进程数如果
#超过emergency_restart_threshold个php-fpm就会优雅重启。这两个选项一般保持默认值
emergency_restart_threshold=30
emergency_restart_interval=60s //一分钟内出现30次上述信号即重启php-fpm
(4)pm.max_requests=1000
每一个子进程的最大请求服务数量,如果超过了这个值,该子进程会被自动重启。
比如这个参数,如果设置很大的话,那这个子进程要运行很多次才会重启,假如这个请求发生了错误或者内存泄漏,那么这个值设置很大是不合适的。但如果请求没有问题,这个值设置小的话就会频繁的重启,这样也会碰到不少的问题,所以要仁者见仁,智者见智的设置了,这里初始化设置,如果测试没有内存泄漏等问题,可以再大一些。
中有慢日志这个概念,可以记录查询速度比较慢的,同样的,也可以开启慢日志,记录执行速度比较慢的请求,方便我们后续的调试和优化。
request_slowlog_timeout:默认是注释的,打开注释,设置为1,代表请求超过1s,就会记录这个脚本到慢日志文件中。也可以的更大,按照需求来。slowlog:默认也是注释的,可以打开注释使用默认的慢日志路径,也可以自定义路径。
request_slowlog_timeout=2#记录超过2s的请求
slowlog=/var/log/php-fpm/www-slow.log #慢日志路径
(2)利用sort/uniq命令分析汇总php-fpm慢日志:
grep-v“^$”www.log.slow.tmp|cut-d””-f3,2|sort|uniq-c|sort-k1,1nr|head-n50
参数解释:
uniq-c:显示唯一的行,并在每行行首加上本行在文件中出现的次数
sort-k1,1nr:按照第一个字段,数值排序,且为逆序
head-10:取前10行数据
4、php-fpm中的backlog是干啥的?
如果进程不够用,进程会更多进程,如果达到了上限,进程又全都繁忙,这时进程会把请求挂起到连接队列里,而默认值是,除了加大,调整也是有必要的。
也就说这个是在优化高并发的时候必须要设置的,这个值的大小和的也有关。太大,处理不过来照样会报错(超时)。这个对于目前的机器来说,我设置的,然而的默认值是,所以在短期内是完全够用的,不过也可以在里面显式的制定的值,比如制定:
PHP参数调优nginx报错502:connect()tounix:/var/run/php5-fpm.sockfailed(2:Nosuchfileordirectory)php-fpm进程数管理关于PHP-FPM的backlog的默认值PHP-FPM中backlog参数变更的一些思考PHP-fpm
一般打开配置文件,会发现有,,等,那么他们的层级关系是什么样的呢?
答案是:一个里面可以有多个,一个里面可以有多个。
我们配置的时候,各个共用的部分可以配置在模块里面。每个自己特有的一些部分,按照各自的需求配置在模块里面。同样的,对于是分的更细的,按照每个的每个需求来配置。
其次是如果在文件夹下有其他的配置文件,那么我们的就是公用的配置文件了,一些公用的部分都可以配置在中,各个站点特殊的配置就放在文件下。
参考:nginx短篇(4):模块、配置指令、块之间的关系
worker_processesauto;#自动检测CPU的核数
worker_rlimit_nofile65535;#worker进程的最大打开文件数限制
error_log/var/log/nginx/error.log;
include/etc/nginx/modules-enabled/*.conf;
worker_connections10240;#子进程最大连接数,总连接数:worker_processes*worker_connections
includemime.types;文件扩展名与文件类型映射表
default_typeapplication/octet-stream;#这个类型会让浏览器认为响应是普通的文件流,并提示用户下载文件
#记录都有哪些变量可以记录到log_format
log_formatmain'$remote_addr$host$remote_user[$time_local]"$request"'
'$status$body_bytes_sent"$http_referer"'
'"$http_user_agent""$http_accept_language""$request_time"'
'"$upstream_response_time""$upstream_addr""$upstream_status""$http_x_real_ip""$proxy_add_x_forwarded_for"';
sendfileon;#立即将数据从磁盘读到OS缓存
tcp_nopushon;#告诉nginx在一个数据包里发送所有头文件
tcp_nodelayon;#告诉nginx不要缓存数据,而是一段一段的发送
keepalive_timeout30;#服务器将在这个超时时间过后关闭链接
用于解析上游服务器名称的名称服务器配置到地址中
gzip_comp_level4;#数据的压缩等级,9是最慢但是压缩比最大的

gzip_typestext/plaintext/cssapplication/jsonapplication/x-javascripttext/xmlapplication/xmlapplication/xml+rsstext/javascriptapplication/hero-res;
client_max_body_size20m;#设置网页上传文件的最大值,和php.ini中的上传设置保持一致
server_names_hash_max_size2048;#保存服务器名字的hash表
include/etc/nginx/client.conf;
include/etc/nginx/conf.d/*.conf;
}
(1)worker_rlimit_nofile
更改worker进程的最大打开文件数限制。
查看当前进程可以打开的文件数:
//结果:65535
查看当前系统可以打开的最大文件数:
ljf@hx:cat/proc/sys/fs/file-max
813544
remote_addr:对应客户端的地址
remote_user:是请求客户端请求认证的用户名,如果没有开启认证模块的话是值为空。
time_local:表示nginx服务器时间
request:表示request请求头的行
status:表示response的返回状态
body_bytes_sent:表示从服务端返回给客户端的body数据大小
http_referer:表示请求的上一级页面
http_user_agent:表示agent信息
http_x_forwarded_for:会记录每一级请求中信息
(4)client_max_body_size设置
这个参数规定客户端上传的的最大值,和中的最大上传数保持一致,不然的话,就算设置上传的最大文件是,如果不设置这个参数的话,那么上传一样会报错的。
3、对于conf.d文件夹中的配置
(1)配置实例代码
access_log/var/log/nginx/access.log;#access日志
fastcgi_intercept_errorson;#支持nginx404重定向
indexindex.phpindex.htmlindex.htm;
root/product/ucool/production/manage/htdocs/backend/web/;
#客户端与服务器建立连接后发送requestbody的超时时间(小于keepalive_timeout)
#客户端向服务器发送一个完整的requestheader的超时时间(小于keepalive_timeout)
fastcgi_connect_timeout300;#指定连接到后端FastCGI的超时时间
fastcgi_send_timeout300;#指定向FastCGI传送请求的超时时间
fastcgi_read_timeout300;#指定接收FastCGI应答的超时时间
fastcgi_buffer_size64k;#指定读取FastCGI应答第一部分需要用多大的缓冲区
fastcgi_buffers464k;#定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答请求
location~*^.+\.(git|svn|sql|bak|old|rar|tgz|7z|bz2|tar|idea)${
fastcgi_passunix:/var/run/php/php5.6-fpm.sock;
fastcgi_paramSCRIPT_FILENAME$document_root/$fastcgi_script_name;
proxy_set_headerHost$host;
proxy_set_headerX-Real-IP$remote_addr;
proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for;
location~/\.git{denyall;}
}
(2)主要是fastcgi的一些配置
这里不考虑负载均衡和反向代理,关于的优化可以参考:
(3)关于send_timeout
#客户端与服务器建立连接后发送requestbody的超时时间(小于keepalive_timeout)
#客户端向服务器发送一个完整的requestheader的超时时间(小于keepalive_timeout)
client_header_timeout20;
这几个参数最好是再小一些,包括,小一些的话,能处理更多的有效请求,有利于提升的处理性能,大佬们的设置如下:
send_timeout10;
4、保存编辑之后检查配置文件的正确性
(1)检查配置文件是否正确
ljf@hx:/etc/nginx$sudonginx-t
nginx:theconfigurationfile/etc/nginx/nginx.confsyntaxisok
nginx:configurationfile/etc/nginx/nginx.conftestissuccessful
返回并且没有报错信息的话,说明配置文件里面的语法是没问题的,如果报错了那就是语法出错了,导致配置无法正常读取。
(2)检查子级配置文件是否正确
nginx-t-c/etc/nginx/conf.d/xxx.conf
例如:
ljf@hx:/etc/nginx$sudonginx-t-c/etc/nginx/conf.d/api.conf
nginx:[emerg]"server"directiveisnotallowedherein/etc/nginx/conf.d/api.conf:1
nginx:configurationfile/etc/nginx/conf.d/api.conftestfailed
很明显配置文件是错的。
php.ini中有max_execution_time参数。
php-fpm中有request_terminate_timeout参数
nginx.conf中有fastcgi_connect_timeout等参数。
1、关于php和php-fpm超时时间的设置
首先是这个值限定了脚本的最大执行时间,但是仅限于脚本,对于脚本中的流操作和数据库操作等耗费的时间是不算进去的。而的代表单个请求的超时中止时间,并不会受其他脚本影响,定义结束,那么就准时结束该脚本的运行。所以配置超时时间的时候,可以比稍微大一些。
还有一种说法,在服务器正常运行的时候,中的会覆盖中的,所以的值更代表我们对于脚本执行时间的预期。如果服务器性能足够好,可以设置代表永不超时。
当程序运行时间大于规定的参数的时候,会终止该子进程。
的操作影响的是的超时,一般来说,如果是或者超时,那么报错。如果是超时的话,报错是:,到时候我们可以根据这个报错信息来定位问题。一般来说,为防止频繁的出现超时错误,设置相关时间为是合适的。
假如设置,执行时间秒,则秒后会关闭和的连接。也就是说当程序运行时间大于规定的参数的时候,会关闭和的连接,出现超时错误。所以这个的超时时间最好是和中的保持一致。
3、nginx中的keepalive_timeout
参数是一个请求完成之后还要保持连接多久,不是请求时间多久,目的是保持长连接,减少创建连接过程给系统带来的性能损耗,类似于线程池,数据库连接池。
以上就是如何优化php+php-fom+nginx配置参数的详细内容,更多请关注主机测评网其它相关文章!
本文来源:国外服务器--如何优化php+phpfom+nginx配置参数(php修改nginx配置)
本文地址:https://www.idcbaba.com/guowai/6086.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。




