作者回复: 对,口误啦,谢谢指出。对于请求而言,才需要大量上下文信息,连接不需要。
作者回复: 后端慢的话,可以考虑nginx加缓存来缩短响应时间,或者压测客户端增大读超时时间。499是客户端读超时关连接造成的,加了proxy_ignore_client_abort on; 也不解决问题。推荐从超时时间或者优化响应速度入手。
作者回复: nginx打印access.log时,这条请求的response肯定已经发出去了,但只是nginx进程把write请求提交给linux kernal了,至于kernal有没有发到交换机,交换机有没有给到机房的路由器,有没有从广域网发到客户网络,等等,都是不可知的。 如果抓包不现实,那么就看端口吧,把remote_addr和remote_port打印到access日志中,然后对照浏览器上的src_port看。
作者回复: 谢谢
作者回复: 默认就有
作者回复: 你好木木,Nginx中需要一个C结构体描述连接,不只是TCP连接,也包括UDP session,而Nginx使用ngx_connection_t来描述。但是,如果每接收到一个新连接,都再分配ngx_connection_t初始化它,效果实在不高。因此,Nginx弄了一个连接池,存放所有的ngx_connection_t结构体,你可以在worker_connection配置中设置每个worker进程中连接池的大小
作者回复: 不存在回收内存这种场景哈,因为Web服务不同于普通的程序,每个HTTP请求生命周期很短,与其频率的回收内存,不如在HTTP请求结束时再释放整个内存池。Nginx以及许多Web Servelet都是这么干的。
作者回复: 不是,根据你的业务场景估算。比如,如果你的业务服务器设的cookie都很大,那么header就会很大。这不是实时而是预先分配的,因为分配这个内存池时,还没有接收完url和header。
作者回复: 1、有; 2、你说的是C库内存池,这个与Nginx无关,而与Nginx运行时,链接的到底是ptmalloc2还是tcmalloc或者jemalloc有关。通常默认情况下,是ptmalloc2
作者回复: 有的