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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM