Does "ab" use keepalive (guess not...)? NaviServer should start with all 10 threads from the beginning (at least with the same number your Apache does pre-fork). Turn all kind of stats off that may be on by default.
========================================================== ns_section ns/server/$server ns_param connsperthread 0 ns_param minthreads 10 ns_param maxthreads 100 # Max connections to put on queue (100) ns_param maxconnections 100 # Max connections to put on queue (100) ns_param maxconnections 100 # Number of pending connections # There is a system wide limit and a limit per application. # The system wide can be displayed on Linux with: # sysctl -a| grep max_syn_backlog # The settings can be changed (e.g. to 1024): # Solaris: /usr/sbin/ndd -set /dev/tcp tcp_conn_req_max_q 1024 # Linux: /sbin/sysctl -w net.ipv4.tcp_max_syn_backlog=1024 ns_param listenbacklog 32 ns_param keepalivetimeout 30 ns_param maxkeepalive 100 ns_param globalstats false ns_param urlstats false ns_section ns/server/stats ns_param enabled 0 ns_section ns/threads ns_param mutexmeter false