歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 使用socket方式連接Nginx優化php-fpm性能

使用socket方式連接Nginx優化php-fpm性能

日期:2017/2/27 15:57:41   编辑:Linux教程
Nginx連接fastcgi的方式有2種:TCP和unix domain socket

什麼是Unix domain socket?—— 維基百科
Unix domain socket 或者 IPC socket是一種終端,可以使同一台操作系統上的兩個或多個進程進行數據通信。與管道相比,Unix domain sockets 既可以使用字節流和數據隊列,而管道通信則只能通過字節流。Unix domain sockets的接口和Internet socket很像,但它不使用網絡底層協議來通信。Unix domain socket 的功能是POSIX操作系統裡的一種組件。

Unix domain sockets 使用系統文件的地址來作為自己的身份。它可以被系統進程引用。所以兩個進程可以同時打開一個Unix domain sockets來進行通信。不過這種通信方式是發生在系統內核裡而不會在網絡裡傳播。

TCP和unix domain socket方式對比
TCP是使用TCP端口連接127.0.0.1:9000
Socket是使用unix domain socket連接套接字/dev/shm/php-cgi.sock(很多教程使用路徑/tmp,而路徑/dev/shm是個tmpfs,速度比磁盤快得多)

測試機是個1核的centos5.4,2用戶並發時系統資源消耗50%左右,10用戶資源就跑得很滿了。
2users 10users nginx/1.2.9 + PHP 5.2.5 tcp 1060 1294 nginx/1.2.9 + PHP 5.2.5 socket 997 1487 nginx/1.2.9 + PHP 5.3.10 tcp 906 1082 nginx/1.2.9 + PHP 5.3.10 socket 880 1247
結論是在服務器壓力不大的情況下,tcp和socket差別不大,但在壓力比較滿的時候,用套接字方式,效果確實比較好。

下面是php 5.3以上版本將TCP改成socket方式的配置方法:
修改php-fpm.conf(/usr/local/php/etc/php-fpm.conf)
;listen = 127.0.0.1:9000
listen = /dev/shm/php-cgi.sock
修改nginx配置文件server段的配置,將http的方式改為socket方式
        location ~ .*\.(php|php5)?$  {
                #fastcgi_pass  127.0.0.1:9000;
                astcgi_pass   unix:/dev/shm/php-cgi.sock;
                fastcgi_index index.php;
                include fastcgi.conf;
                }
重啟php-fpm與nginx
service nginx restart
service php-fpm restart
ls -al /dev/shm
可以看到php-cgi.sock文件unix套接字類型
Copyright © Linux教程網 All Rights Reserved