php-fpm設置與 phpMyadmin超時 操做SQL超時

LNMP 一鍵安裝包環境:php

Phpmyadmin   登陸超時 (1440 秒未活動),請從新登陸。html

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

session.gc_maxlifetime = 3600nginx

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

$cfg['LoginCookieValidity'] = 3600;sql

 

phpmyadmin 執行mysql操做的時候 超時:vim

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

相關文章
相關標籤/搜索