backlog.txt
上传用户:ladybrid91
上传日期:2007-01-04
资源大小:287k
文件大小:5k
源码类别:

Web服务器

开发平台:

Unix_Linux

  1. Configuring the TCP Listen Backlog for Web Servers in Solaris 2.4
  2. Bob Gilligan
  3. SunSoft Internet Engineering Group
  4. Gilligan@eng.sun.com
  5. May 31, 1995
  6. SUMMARY
  7. In order to avoid a performance bottleneck, it is necessary to increase
  8. the TCP listen backlog above the system default value on Web server
  9. machines that are expected to handle a load of greater than a few TCP
  10. connections per second.  This is a two-step process.  First, the server
  11. program must call the "listen()" function with a backlog parameter of at
  12. least 32, for example:
  13. listen(s, 32);
  14. See the listen(3N) man page for more details about the function.
  15. Second, the system-wide maximum listen backlog must be increased.  This
  16. can be done with the command:
  17. /usr/sbin/ndd -set /dev/tcp tcp_conn_req_max 32
  18. The command must be run by root.  This command should be added to the
  19. end of the system startup script "/etc/rc2.d/S69inet" so that it will
  20. take affect every time the system is re-booted.
  21. See the ndd(1M) for more information about the "ndd" command.
  22. DETAILED EXPLANATION
  23. The "backlog" parameter to listen() controls maximum number of
  24. connections in the process of being accepted that TCP will queue up for
  25. a particular listening socket.  The system imposes a limit on the
  26. backlog that an application can use.  In Solaris 2.4, by default, the
  27. maximum backlog is 5.  If an application request a backlog larger than
  28. this value, the backlog is limited to 5.  The system administrator can
  29. increase this maximum to 32 by using the "ndd" command to change the
  30. parameter "tcp_conn_req_max" in the driver "/dev/tcp".  In Solaris 2.5,
  31. the default value is still 5, but the administrator can increase it to
  32. 1024.
  33. The backlog has an affect on the maximum rate at which an server can
  34. accept TCP connections.  The rate is a function of the backlog and the
  35. time that connections stay on the queue of partially open connections.
  36. That time is related to the round-trip time of the path between the
  37. clients and the server, and the amount of time that the client takes to
  38. process one stage of the TCP three-way open handshake.
  39. TCP's three-way open handshake looks something like this:
  40. Client Server
  41. ------ ------
  42. Send SYN  -->
  43.     --> Receive SYN      
  44.     <-- Send SYN|ACK (1)
  45. Receive SYN|ACK <--
  46. Send ACK -->
  47.     --> Receive ACK (2)
  48. An incomming connection occupies a slot on the accept queue between the
  49. time that the server receives the initial SYN packet from the client,
  50. and the time that the server receives the ACK of its own SYN.  These
  51. times are marked (1) and (2) above.
  52. The time between points (1) and (2) can be viewed as having two
  53. components.  First, there is the time it take for the SYN|ACK packet to
  54. travel from the server to the client, plus the time it takes the ACK
  55. packet to travel from the client back to the server.  This component is
  56. equivalent to the path round trip time.  The second component is the
  57. time it takes the client to process the received SYN|ACK and respond
  58. with an ACK.
  59. After the server receives the ACK, the connection remains on the listen
  60. queue for an additional period of time until the accept() function
  61. returns the open socket to the application.
  62. So, the time that a connection resides on the listen queue is
  63. approximately:
  64. T(listen queue) = T(path round-trip) +
  65.   T(client SYN|ACK processing) +
  66.   T(accept delay)
  67. If T(listen queue) were a constant value, the maximum rate at which a
  68. server could accept connections would be:
  69. R = (listen backlog) / T(listen queue)
  70. In practice, T(listen queue) is not constant.  It is different for every
  71. client since the path round trip time varies depending on the Internet
  72. topology between each client and the server.  In addition, the time it
  73. takes for each client to process the SYN|ACK depends on a variety of
  74. factors such as the load on the client and the performance of the client
  75. implementation.  Also, T(listen queue) will be increased if the server's
  76. SYN|ACK or the client's ACK packet is lost.  Under overload conditions
  77. (more clients attempting to connect than the server can handle), the
  78. average T(listen queue) will be increased disproportionately by slow
  79. clients and long Internet paths.
  80. To get a rough feel for what the upper limit on the rate at which a web
  81. server can accept TCP connections might be, consider that round trip
  82. times for typical Internet paths today can be 500 milliseconds.
  83. Assuming that T(accept delay) and T(client SYN|ACK processing) are
  84. negligible compared with this, the upper bound is primarily a function
  85. of T(path round trip).  Connection rates given some typical listen
  86. backlogs are:
  87. R = 5 connections / 500 ms 
  88.   = 2.5 connections/sec (Solaris 2.4 using default backlog)
  89. R = 32 connections / 500 ms 
  90.   = 16 connections/sec (Solaris 2.4 using increased backlog)
  91. R = 1024 connections / 500 ms
  92.   = 512 connections/sec (Solaris 2.5 using increased backlog)
  93. Note that these values are just illustrative.  The actual limits will
  94. depend on a variety of operational factors.  Also note that overall web
  95. server performance depends on a number of other factors.  Nevertheless,
  96. it is important to configure web servers with a listen backlog large
  97. enough for the environment that the server is being used in.