2012-05-06 77 views
43

我有一些錯誤與主題。服務器不高負載:〜15%的CPU,有幾個Gb的內存,HDD不是buisy。但是,錯誤502大約在3%的情況下拋出。錯誤502在nginx + php5-fpm

程序:Debian 6,nginx/0.7.62,php5-fpm(5.3.3-1)。

在Nginx的error.log中是這樣的錯誤:

PHP5-FPM的
connect() to unix:/var/run/php5-fpm.sock failed 

狀態通常是這樣的:

accepted conn: 41680 
pool:    www 
process manager: dynamic 
idle processes: 258 
active processes: 1 
total processes: 259 

我認爲,這意味着負荷不高。

我增加了積壓參數:在sysctl - net.core.somaxconn = 5000,在php-fpm pool - listen.backlog = 5000。沒有效果。

我引用的配置:

/etc/nginx/nginx.conf

user www-data; 
worker_processes 8; 
timer_resolution 100ms; 
worker_rlimit_nofile 20240; 
worker_priority -5; 

error_log /var/log/nginx/error.log; 
pid  /var/run/nginx.pid; 

events { 
    worker_connections 2048; 
    use epoll; 
    # multi_accept on; 
} 

http { 
    include  /etc/nginx/mime.types; 

    access_log /var/log/nginx/access.log; 

    sendfile  on; 
    tcp_nopush  on; 

    #keepalive_timeout 0; 
    keepalive_timeout 65; 
    tcp_nodelay  on; 

    gzip on; 
    gzip_min_length 1100; 
    gzip_buffers 64 8k; 
    gzip_comp_level 3; 
    gzip_http_version 1.1; 
    gzip_proxied any; 
    gzip_types text/plain application/xml application/x-javascript text/css; 
    gzip_disable "MSIE [1-6]\.(?!.*SV1)"; 

    include /etc/nginx/conf.d/*.conf; 
    include /etc/nginx/sites-enabled/*; 

    client_max_body_size 100M; 
    server_tokens off; 
} 

的/ etc/nginx的/ php_location

fastcgi_pass unix:/var/run/php5-fpm.sock; 
fastcgi_index index.php; 
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; 
fastcgi_buffers 256 128k; 
#fastcgi_buffer_size 16k; 
#fastcgi_busy_buffers_size 256k; 
fastcgi_connect_timeout 300s; 
fastcgi_send_timeout 300s; 
fastcgi_read_timeout 300s; 
include fastcgi_params; 

PHP-FPM池

[www] 
listen = /var/run/php5-fpm.sock 
listen.backlog = 5000 
listen.owner = www-data 
listen.group = www-data 
listen.mode = 0666 
user = www-data 
group = www-data 
pm = dynamic 
pm.max_children = 1024 
pm.start_servers = 64 
pm.min_spare_servers = 64 
pm.max_spare_servers = 128 
pm.max_requests = 32000 
pm.status_path = /system/php5-fpm-status 
slowlog = /var/www/log/php-fpm.log.slow 
chdir = /var/www 

我可以做些什麼來優化這個系統,並使其使用所有的服務器資源?

PS。對不起,我的英語不好。

+2

我在Ubuntu 13.10和PHP5-FPM的以某種方式歪曲發生了什麼......實際上,在記錄日誌說什麼都沒有:)我通過直接從命令行運行守護進程發現錯誤,而不是'sudo php5-fpm - -daemonize --fpm-config/etc/php5/fpm/php-fpm.conf' – benjaoming

+7

爲了防止有人在/etc/php5/fpm/pool.d/www.conf中搜索php-fpm池文件Ubuntu 12.04.3 LTS –

+0

對於那些通過谷歌搜索來到這個問題的人:先試試這個解決方案:http://stackoverflow.com/questions/23443398/nginx-error-connect-to-php5-fpm-sock-failed-13 -permission-denied – Alexar

回答

102

問題是套接字本身,它在高負載情況下的問題是衆所周知的。請考慮使用TCP \ IP連接,而不是Unix套接字,對於你需要做這些改變:

PHP-FPM池配置
  • listen = 127.0.0.1:7777
  • 的/ etc/nginx的/ php_location更換listen = /var/run/php5-fpm.sockfastcgi_pass 127.0.0.1:7777;
+0

以前,它就是這樣 - 使用TCP/IP套接字。但情況是一樣的。我會再次嘗試TCP/IP套接字 - 會看到,它給了我們什麼。 – andre487

+2

現在好多了。另外我想說的是將PHP更新到版本5.4具有非常好的效果。 – andre487

+0

是的,它消失了。 nginx更新到版本1.1.19。 我想過在nginx上緩存,但在當前的應用程序中它不會有用。 – andre487

-6

我同樣的問題,更換fastcgi_pass unix:/var/run/php5-fpm.sock;,但不希望從插座到TCP/IP切換。重新啓動php-fpm和nginx將解決此問題。

sudo /etc/init.d/php-fpm restart 
sudo /etc/init.d/nginx restart 
+1

每當遇到問題時重新啓動應用程序都無法被視爲解決方案。 – GeekRide

+0

取決於問題的頻率以及可分配的資源數量 - 是的,它可以是解決方案。當系統需要使用套接字連接時,系統應該更好設計的基本點仍然是 –

+0

@GeekRide,然後當DmitryV表示「它在高負載情況下的問題是衆所周知的」時,我們會別無選擇,只能策略性地重新啓動服務。我覺得很遺憾,很多人忽視了這一點,因爲他們在生產成本較低的環境中工作。 –

2

在CentOS 7之外,Plesk 12.5

我有這個問題後,我的harddisc去充分和一些服務失敗。 其他域名工作完美,但沒有一個它只給了我502和類似的超時。從錯誤日誌:

[crit] 3112#0: *65746768 connect() to 
unix:///var/www/vhosts/system/sub.domain.de/php-fpm.sock failed 
(2: No such file or directory) while connecting to upstream 

爲了解決它,我必須(先可用空間,然後)重啓PHP-FPM和nginx的 - 那麼這個錯誤消失了!

0

不創建該文件的唯一原因是在/etc/php-fpm.d/www.conf

更改配置聽= 127.0.0.1:9000

隨着聽=/var/run中/php-fpm/php-fpm.sock

,然後重啓動nginx的和PHP-FPM

+0

我有這條線,重新啓動但文件仍然不存在。在php5-fpm.log中沒有錯誤 – Alecz