原文地址:https://linuxeye.com/364.html
使用socket方式連接Nginx優(yōu)化php-fpm性能
Nginx連接fastcgi的方式有2種:TCP和unix domain socket
什么是Unix domain socket?—— 維基百科
Unix domain socket 或者 IPC socket是一種終端,可以使同一臺(tái)操作系統(tǒng)上的兩個(gè)或多個(gè)進(jìn)程進(jìn)行數(shù)據(jù)通信碘梢。與管道相比丙者,Unix domain sockets 既可以使用字節(jié)流和數(shù)據(jù)隊(duì)列,而管道通信則只能通過(guò)字節(jié)流瑞妇。Unix domain sockets的接口和Internet socket很像擎椰,但它不使用網(wǎng)絡(luò)底層協(xié)議來(lái)通信。Unix domain socket 的功能是POSIX操作系統(tǒng)里的一種組件蛮浑。
Unix domain sockets 使用系統(tǒng)文件的地址來(lái)作為自己的身份唠叛。它可以被系統(tǒng)進(jìn)程引用。所以兩個(gè)進(jìn)程可以同時(shí)打開(kāi)一個(gè)Unix domain sockets來(lái)進(jìn)行通信沮稚。不過(guò)這種通信方式是發(fā)生在系統(tǒng)內(nèi)核里而不會(huì)在網(wǎng)絡(luò)里傳播艺沼。
TCP和unix domain socket方式對(duì)比
TCP是使用TCP端口連接127.0.0.1:9000
Socket是使用unix domain socket連接套接字/dev/shm/php-cgi.sock(很多教程使用路徑/tmp,而路徑/dev/shm是個(gè)tmpfs蕴掏,速度比磁盤快得多)
測(cè)試機(jī)是個(gè)1核的centos5.4障般,2用戶并發(fā)時(shí)系統(tǒng)資源消耗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 |
結(jié)論是在服務(wù)器壓力不大的情況下挽荡,tcp和socket差別不大,但在壓力比較滿的時(shí)候即供,用套接字方式定拟,效果確實(shí)比較好。
下面是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(/|$) {
-
fastcgi_pass 127.0.0.1:9000;
- fastcgi_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套接字類型