容許經過網絡進程之間的通訊,也能夠經過loopback進行本地進程之間通訊。php
容許在本地運行的進程之間進行通訊。nginx
從上面的圖片能夠看,unix socket減小了沒必要要的tcp開銷,而tcp須要通過loopback,還要申請臨時端口和tcp相關資源。可是,unix socket高併發時候不穩定,鏈接數爆發時,會產生大量的長時緩存,在沒有面向鏈接協議的支撐下,大數據包可能會直接出錯不返回異常。tcp這樣的面向鏈接的協議,多少能夠保證通訊的正確性和完整性。git
若是是在同一臺服務器上運行的nginx和php-fpm,併發量不超過1000,選擇unix socket,由於是本地,能夠避免一些檢查操做(路由等),所以更快,更輕。
若是我面臨高併發業務,我會選擇使用更可靠的tcp socket,以負載均衡、內核優化等運維手段維持效率。github
將sock文件放在/dev/shm目錄下,使用的內存讀寫更快。緩存
# cd /dev/shm touch php7.0-fpm.sock chown www-data:www-data php7.0-fpm.sock chmod 777 php7.0-fpm.sock
php-fpm 配置服務器
# vi /etc/php/7.0/fpm/pool.d/www.conf listen= /dev/shm/php7.0-fpm.sock listen.owner = www-data listen.group = www-data
nginx server塊配置網絡
location ~* \.php$ { fastcgi_pass unix:/dev/shm/php7.0-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; }
1.修改內核參數php7
net.unix.max_dgram_qlen = 4096 net.core.netdev_max_backlog = 4096 net.core.somaxconn = 4096
2.提升backlog
backlog默認位128,1024這個值最好換算成本身正常的QPS。併發
nginx.conf server{ listen 80 default backlog=1024; } php-fpm.conf listen.backlog = 1024
3.增長sock文件和php-fpm實例
在/dev/shm新建一個sock文件,在nginx中經過upstream魔抗將請求負載均衡到兩個sock文件,
而且將兩個sock文件分別對應到兩套php-fpm實例上。負載均衡