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