nginx和php-fpm 是使用 tcp socket 還是 unix socket ?

來源:互聯網
上載者:User
tcp socket

允許通過網路進程之間的通訊,也可以通過loopback進行本地進程之間通訊。 unix socket

允許在本地啟動並執行進程之間進行通訊。 分析


從上面的圖片可以看,unix socket減少了不必要的tcp開銷,而tcp需要經過loopback,還要申請臨時連接埠和tcp相關資源。但是,unix socket高並發時候不穩定,串連數爆發時,會產生大量的長時緩衝,在沒有連線導向協議的支撐下,大資料包可能會直接出錯不返回異常。tcp這樣的連線導向的協議,多少可以保證通訊的正確性和完整性。 我的選擇

如果是在同一台伺服器上啟動並執行nginx和php-fpm,並發量不超過1000,選擇unix socket,因為是本地,可以避免一些檢查操作(路由等),因此更快,更輕。
如果我面臨高並發業務,我會選擇使用更可靠的tcp socket,以負載平衡、核心最佳化等營運手段維持效率。 nginx和php-fpm 使用unix socket

將sock檔案放在/dev/shm目錄下,使用的記憶體讀寫更快。

# cd /dev/shmtouch php7.0-fpm.sock chown www-data:www-data php7.0-fpm.sockchmod 777 php7.0-fpm.sock

php-fpm 配置

# vi /etc/php/7.0/fpm/pool.d/www.conflisten= /dev/shm/php7.0-fpm.socklisten.owner = www-datalisten.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;  }
提高nginx和php-fpm使用的 unix socket穩定性(單機能力有限)

1.修改核心參數

net.unix.max_dgram_qlen = 4096net.core.netdev_max_backlog = 4096net.core.somaxconn = 4096

2.提高backlog
backlog預設位128,1024這個值最好換算成自己正常的QPS。

nginx.confserver{  listen 80 default backlog=1024;}php-fpm.conflisten.backlog = 1024

3.增加sock檔案和php-fpm執行個體
在/dev/shm建立一個sock檔案,在nginx中通過upstream魔抗將請求負載平衡到兩個sock檔案,
並且將兩個sock檔案分別對應到兩套php-fpm執行個體上。 參考

nginx通過TCP以及unix-domain-socket串連fastcgi方式對比
nginx、php-fpm預設配置與效能–TCP socket還是unix domain socket

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.