[This is all in a recent bknr svn hunchentoot running on opencml and sbcl on a mac 10.6]
1. Logging:
I've been playing with running hunchentoot under heavy loads using easy-acceptor, and running against apache-bench (ab)
I noticed that logging to *error-output* often causes socket failures under heavy load, at least in SLIME. Is there a reason why with-open-file-or-console in log.lisp couldn't use a NIL pathname to simply not log, and pathname=T would log to *error-output*, which is what NIL presently means? Now, there seems to be no way to turn off logging (besides subclassing acceptor).
2. Backlog in listener:
I found that in the start-listening method in acceptor.lisp, there is no BACKLOG set for usocket:socket-listen. I think that others have pointed this out as well. The default apache backlog seems to be 100 to 512 [1,2,3] though the default on a macintosh seems silently limited to 128 [4]. In the usocket routines used by hunchentoot backlog seems to be only 5. This seems two orders of magnitude smaller than what is standard for web servers.
I tried putting in :BACKLOG 50 into the start-listening method in acceptor.lisp and it eliminated most failures of ab. Is there any reason why acceptor objects shouldn't have a new backlog slot default value in them much larger than 5, which should be used in the start-listening method?
The appended patches implement both changes, if these suggestions are judged useful. The backlog is 50. I hope they're done correctly; I'm not experienced in submitting patches.
John
[1] http://groups.google.com/group/modwsgi/browse_thread/thread/b6d66d3fe5a53d2c [2] http://weblog.pigfoot.org/pigfoot/2007/07/05/whats-the-maximum-value-of-back... [3] /usr/include/apache2/mpm_common.h:#define DEFAULT_LISTENBACKLOG 511 [4] http://developer.apple.com/library/mac/#documentation/darwin/reference/manpa...
Hi John,
thank you for your suggestions and patches. I have committed slight variations of them:
ACCEPTOR-ACCESS-LOG-PATHNAME and ACCEPTOR-MESSAGE-LOG-PATHNAME have been renamed to ACCEPTOR-ACCESS-LOG-DESTINATION and ACCEPTOR-MESSAGE-LOG-DESTINATION, respectively. Both can be set to either a string or pathname designating a file, to an open stream or to NIL. NIL suppresses logging, the other two option should be obvious. *ERROR-OUTPUT* is the default for both.
A new LISTEN-BACKLOG slot has been added to the ACCEPTOR class which can be set by the corresponding initarg during ACCEPTOR creation.
Patch review comments:
- Documentation was missing - Use :INITARG instead of :INITFORM, in particular if you want a value to be configurable. In Hunchentoot, we use :INITFORM only for slots which can't be set by the user in the MAKE-INSTANCE call. Rather, we use :INITARG together with the :DEFAULT-INITARG clause in DEFCLASS. - If a slot cannot be set meaningfully, use :READER instead of :ACCESSOR. This was the case for the backlog slot, as it is never consulted after the listen() call has been made. - We do not use all-uppercase for CL symbols like T or NIL in our source code.
(Obviously, these are just stylistic issues which are only valid in this form for Hunchentoot. I don't claim that they are universal).
Thanks again! Please test what I've committed and send more patches if you need to.
-Hans On Mon, Mar 14, 2011 at 9:53 PM, JTK jetmonk@gmail.com wrote:
[This is all in a recent bknr svn hunchentoot running on opencml and sbcl on a mac 10.6]
- Logging:
I've been playing with running hunchentoot under heavy loads using easy-acceptor, and running against apache-bench (ab) I noticed that logging to *error-output* often causes socket failures under heavy load, at least in SLIME. Is there a reason why with-open-file-or-console in log.lisp couldn't use a NIL pathname to simply not log, and pathname=T would log to *error-output*, which is what NIL presently means? Now, there seems to be no way to turn off logging (besides subclassing acceptor).
- Backlog in listener:
I found that in the start-listening method in acceptor.lisp, there is no BACKLOG set for usocket:socket-listen. I think that others have pointed this out as well. The default apache backlog seems to be 100 to 512 [1,2,3] though the default on a macintosh seems silently limited to 128 [4]. In the usocket routines used by hunchentoot backlog seems to be only 5. This seems two orders of magnitude smaller than what is standard for web servers. I tried putting in :BACKLOG 50 into the start-listening method in acceptor.lisp and it eliminated most failures of ab. Is there any reason why acceptor objects shouldn't have a new backlog slot default value in them much larger than 5, which should be used in the start-listening method? The appended patches implement both changes, if these suggestions are judged useful. The backlog is 50. I hope they're done correctly; I'm not experienced in submitting patches. John
[1] http://groups.google.com/group/modwsgi/browse_thread/thread/b6d66d3fe5a53d2c [2] http://weblog.pigfoot.org/pigfoot/2007/07/05/whats-the-maximum-value-of-back... [3] /usr/include/apache2/mpm_common.h:#define DEFAULT_LISTENBACKLOG 511 [4] http://developer.apple.com/library/mac/#documentation/darwin/reference/manpa... _______________________________________________ tbnl-devel site list tbnl-devel@common-lisp.net http://common-lisp.net/mailman/listinfo/tbnl-devel