性能提升9倍的 nginx 线程池,你了解多少?( 二 )


我们的配置文件近一步丰富了一些 。
thread_pool default_pool threads=16;##main上下文...location /video {sendfile on;sendfile_max_chunk 128k;directio 8M;aio threads=default_pool;}当线程池中所有的线程都处于busy状态,那么新的task请求将会加入到等待队列 。我们可以在thread_pool中使用max_queue参数来指定队列的大小,默认队列大小为65536,当队列已满后续的请求将会抛出error 。
ENDnginx官方宣称使用多线程模式,在aio读取文件场景下,性能有9倍的提升,但我还是对这个测试具有一定怀疑态度 。
多线程 + aio在一定程度的确可以提高文件IO的读取性能,但是对于大文件而言,这似乎并没有想象的那么优秀 。这受制于linux平台底层的本身特性,除非nginx自己对文件cache做了额外的操作 。
到目前为止,xjjdog仍有以下建议(供参考):

  • 1)对于小文件的静态代理,我们应该开启sendfile,这对性能的提升是显著的 。
  • 2)对于大文件读取(低频),我们可以尝试开启aio、directio,在提升并发能力的前提下,关注request的实际响应效率;既然官方推荐这么用,我们可以报以尝试的态度 。
  • 3)对于高频大文件读取,aio、directio的性能或许提升并不显著,但应该不会降低性能 。




推荐阅读