php-fpm设置与 phpMyadmin超时 操作SQL超时

LNMP 一键安装包环境:

Phpmyadmin   登录超时 (1440 秒未活动),请重新登录。

vim /usr/local/php/etc/php.ini    

session.gc_maxlifetime = 3600

vim /home/wwwroot/default/phpmyadmin/libraries/config.default.php

$cfg['LoginCookieValidity'] = 3600;

 

phpmyadmin 执行mysql操作的时候 超时:

vim  /usr/local/nginx/conf/nginx.conf     

        fastcgi_connect_timeout 300;     // 时间改为  600
        fastcgi_send_timeout 300;        // 时间改为 600
        fastcgi_read_timeout 300;        // 时间改为  600
        fastcgi_buffer_size 64k;
        fastcgi_buffers 4 64k;
        fastcgi_busy_buffers_size 128k;
        fastcgi_temp_file_write_size 256k;

调高上面标红的3个值后,主要是read和send两项(默认Nginx超时为300),完美地解决了504错误
并且可以配置在http,server级别,也可以配置在location级别。
factcgi_connect_{read|send|timeout}是对fastcgi_pass生效   ; proxy_connect_{read|send|timeout}是对proxy_pass生效

 

执行 myphpadmin 的SQL操作时出现 502 错误 

查看php-fpm的日志: tail /usr/local/php/var/log/php-fpm.log

[29-Sep-2016 17:32:58] WARNING: [pool www] child 21887, script '/home/wwwroot/default/phpmyadmin/sql.php' (request: "GET /phpmyadmin/sql.php") execution timed out (125.496217 sec), terminating
[29-Sep-2016 17:32:58] WARNING: [pool www] child 21887 exited on signal 15 (SIGTERM) after 87935.416668 seconds from start
[29-Sep-2016 17:32:58] NOTICE: [pool www] child 32379 started

vim  /usr/local/php/etc/php-fpm.conf

pm = dynamic         // 
pm.max_children = 80         //重要参数:一个进程起始为 3M 处理一段时间后大概20-30M  根据自己的配置设,内存要留一半给MYSQL
pm.start_servers = 40
pm.min_spare_servers = 40
pm.max_spare_servers = 80
request_terminate_timeout = 100   // 0为不限制,我改为0s
request_slowlog_timeout = 0
slowlog = var/log/slow.log

如果设置成static,进程数自始至终都是pm.max_children指定的数量,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers配置将没有作用。如果设置成dynamic,则进程数是动态的,最开始是pm.start_servers指定的数量,如果请求较多,则会自动增加,但不超过 pm.max_children指定的数量,同时保证空闲的进程数不小于pm.min_spare_servers,如果进程数较多,也会进行相应清理, 保证多余的进程数不多于pm.max_spare_servers。当php-fpm启动后,一个php-cgi进程约战3M内存,但是当它们处理过一些请求后,有些内存是释放不掉的,占用的内存能达到20M-30M不等。

内存较大时 可以设成静态, php-fpm不用反复创建进程。 也有人说性能较高 可以设成动态 ,性能低分配控制固定进程。

删除索引大概用了 5分钟  修改过上面两个参数后就没出错了。 估计是 request_terminate_timeout 是这个产生影响


vim /home/wwwroot/www/etc/amh-php.ini

vim /home/wwwroot/www/php-fpm/huitiao.conf  

 AMH里的amh-php.ini 里的 max_execution_time 是:  max_execution_time = 20    我改成了 600  。

但是  如果在php-fpm.conf 设置了 request_terminate_timeout  则以 request_terminate_timeout 为准 ,因为它优先级高。

 

 

解决办法

php.ini中的max_execution_time值 php-fpm.conf中的request_terminate_timeout值 
这两项都是用来配置PHP脚本的最大执行时间。超时时php-fpm会终止脚本的执行,同时还会终止执行脚本的Worker进程。 如上,php-fpm child 18822被terminate后重新生成了新的Worker进程19164,所以nginx发现与自己通信的连接断了,就自然会返回502错误给客户端。客户端需再次发起请求重新建立新的连接,表象是刷新下浏览器即重新发起请求

所以只需将这两项的值适当调大,让PHP脚本不会因为执行时间长而被终止从而与nginx激活连接丢失。

request_terminate_timeout优先级高于max_execution_time,不想改全局的php.ini,只改php-fpm的配置就可以了。这里暂且调到600秒

request_terminate_timeout = 600

补充: nginx也要注意upstream模块中max_fail和fail_timeout。有时nginx与后端服务器(Tomcat、FastCGI)的通信只是偶然断掉,但max_fail设置太小,那么在接下来的fail_timeout时间内,nginx都会认为后端服务器无响应,都会返回502错误。 所以可以将max_fail调大一些,将fail_timeout调小一些

坑爹的 AMH的配置文件在这里:

/usr/local/nginx-generic-1.6/conf/nginx.conf

/home/wwwroot/web环境名称/php-fpm/域名目录.conf  

/home/wwwroot/web环境名称/etc/amh-php.ini

vim /usr/local/mysql-generic-5.5/my.cnf

web 是 AMH下的环境名称,里面可以有多个虚拟主机

 

 

教程来源:

http://www.2cto.com/os/201301/184035.html

http://ju.outofmemory.cn/entry/251073

posted @ 2016-09-29 19:41    阅读(2703)  评论(0编辑  收藏  举报