歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Php-fpm TcpSocket vs UnixSocket

Php-fpm TcpSocket vs UnixSocket

日期:2017/3/1 10:17:08   编辑:Linux編程

有很多人推薦使用php-fpm的UnixSocket的方式,嘗試測試之

簡單准備了一個測試頁面,包含一些循環、判斷、加減、以及常用的phpinfo

  1. <?php
  2. function make_seed() {
  3. list($usec,$sec)=explode(' ',microtime());
  4. return(float) $sec+((float)$usec*100000);
  5. }
  6. $i=0;
  7. $k=0;
  8. while($i < 1000){
  9. $i++;
  10. mt_srand(make_seed());
  11. if($i%2 == 0)
  12. $k += mt_rand();
  13. else
  14. $k -= mt_rand();
  15. }
  16. echo $k;
  17. phpinfo();
  18. ?>

測試方法:

  1. 在同網段找一台服務器
  2. 使用webbench來測試
  3. ./webbench -c 500 -t 30 http://ip/cgi-bin/Liv.php
  4. cat nginx-access.log | grep -v 200 | grep WebBench | wc -l
  5. 檢查返回內容的穩定性

測試結果(每種測試3次,每次都重啟nginx和php-fpm):

Tcp socket的情況

  1. 異常返回:4
  2. Speed=14502 pages/min, 11660916 bytes/sec.
  3. Requests: 7251 susceed, 0 failed.
  4. 異常返回:0
  5. Speed=14480 pages/min, 11644002 bytes/sec.
  6. Requests: 7240 susceed, 0 failed.
  7. 異常返回:1 (http 499 客戶端斷開連接)
  8. Speed=14542 pages/min, 11693312 bytes/sec.
  9. Requests: 7271 susceed, 0 failed.

Unix socket的情況(放在/dev/shm中)

  1. 異常返回:388
  2. Speed=15194 pages/min, 11600151 bytes/sec.
  3. Requests: 7596 susceed, 1 failed.
  4. 異常返回:271
  5. Speed=15020 pages/min, 11644336 bytes/sec.
  6. Requests: 7510 susceed, 0 failed.
  7. 異常返回:831
  8. Speed=16110 pages/min, 11625129 bytes/sec.
  9. Requests: 8054 susceed, 1 failed.

Unix socket的情況(放在/tmp中)

  1. 異常返回:230
  2. Speed=14972 pages/min, 11632380 bytes/sec.
  3. Requests: 7459 susceed, 27 failed.
  4. 異常返回:647
  5. Speed=15804 pages/min, 11687138 bytes/sec.
  6. Requests: 7898 susceed, 4 failed.
  7. 異常返回:698
  8. Speed=15944 pages/min, 11685551 bytes/sec.
  9. Requests: 7972 susceed, 0 failed.

針對上面的測試結果,簡單總結一下,未必客觀,僅供參考:

  1. UnixSocket性能比TcpSocket最多高不超過10%
  2. UnixSocket的異常率比TcpSocket至少高226倍
  3. UnixSocket返回異常時,Http Code 502,php-fpm返回11: Resource temporarily unavailable,google後嘗試修改backlog,但結果無明顯變化
  4. 結論:在查明UnixSocket異常原因之前,建議依然使用TcpSocket(即默認的127.0.0.1:9000方式)
Copyright © Linux教程網 All Rights Reserved