`
jsntghf
  • 浏览: 2541790 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Nginx使用Linux-native aio提高文件读取性能

阅读更多

Nginx性能优异在于善于利用操作系统内核的各种特性,比如aio/epoll/sendfile(Linux)/kqueue(FreeBSD)等。对于使用VPS做图片站的站长来说,使用nginx的aio特性会大大提高性能,图片站的特点是大量的读io操作,nginx aio不用等待每次io的结果,有助于并发处理大量io和提高nginx处理效率。

 

如果包里的nginx没有包含Linux-native aio(asynchronous I/O)的支持,那么需要下载nginx源代码并带上参数--with-file-aio编译。除了要带参数外,Linux内核还必须有支持这一特性的api-eventfd(),否则在nginx错误日志(/var/log/nginx/error.log)里会看到类似的报错:

 

eventfd() failed (38: Function not implemented) 
worker process 1858 exited with fatal code 2 and can not be respawn

 

解决方法很简单,升级内核就可以了。

 

要让nginx使用aio特性还需要修改nginx配置文件:

 

# vim /usr/local/nginx/conf/nginx.conf 
... 
location / { 
  aio on; 
  directio 1; 
  output_buffers 1 128k; 
} 
...

 

Linux-native aio比传统的POSIX aio功能更丰富一些,重要的一点是能通过内核加速提供高性能。直接用Linux-native aio API比较晦涩,为了方便使用和开发Linux-native aio应用程序,我们可以用libaio/libaio-devel库。不过nginx的作者没有用这些库,因为nginx需要eventfd(),而libaio库里只有0.3.107版本起才支持eventfd,nginx也没有用glibc,因为glibc要到2.8版本才支持eventfd(),为了减少对库的依赖性,nginx干脆直接用Linux-native aio API。

$ vim nginx/src/event/modules/ngx_epoll_module.c 
... 
#if (NGX_HAVE_FILE_AIO) 

/* 
 * We call io_setup(), io_destroy() io_submit(), and io_getevents() directly 
 * as syscalls instead of libaio usage, because the library header file 
 * supports eventfd() since 0.3.107 version only. 
 * 
 * Also we do not use eventfd() in glibc, because glibc supports it 
 * since 2.8 version and glibc maps two syscalls eventfd() and eventfd2() 
 * into single eventfd() function with different number of parameters. 
 */ 
...

 

这里说到了eventfd(),eventfd是Linux-native aio其中的一个API,用来生成file descriptors,这些file descriptors可为应用程序提供更高效“等待/通知”的事件机制。和pipe作用相似,但比pipe更好,一方面它只用到一个file descriptor(pipe要用两个),节省了内核资源,另一方面,eventfd的缓冲区管理要简单得多,pipe需要不定长的缓冲区,而eventfd全部缓冲只有定长8 bytes。

分享到:
评论

相关推荐

    nginx-prometheus-exporter-0.11.0-linux-386.tar.gz

    这个名为"nginx-prometheus-exporter-0.11.0-linux-386.tar.gz"的压缩包,包含了用于在32位Linux系统上运行的Nginx-Prometheus-Exporter的0.11.0版本。以下是压缩包内各个文件的作用: 1. **LICENSE**:这是项目所...

    nginx arm64版本nginx-linux-arrch64.zip

    这个名为"nginx-linux-arm64.zip"的压缩包提供的是专为ARM64架构(也称为AArch64)编译的Nginx版本,适用于基于Linux操作系统的64位ARM处理器设备,如树莓派、某些云服务器或嵌入式系统。无需繁琐的编译过程,只需...

    nginx + nginx-http-flv-module-1.2.9

    Nginx 是一个高性能的 Web 和反向代理服务器,而 nginx-http-flv-module 是 Nginx 的一个扩展模块,专门用于支持实时流媒体(RTMP)和FLV格式的视频流。让我们深入探讨这个组合的相关知识点。 1. **Nginx 概述** ...

    nginx带nginx-http-flv模块windows编译版rtmp

    **Nginx与Nginx-RTMP及Nginx-HTTP-FLV模块** Nginx是一款高性能、轻量级的Web服务器/反向代理服务器,被广泛应用于高并发场景,尤其在处理静态文件、HTTP缓存以及反向代理等方面表现出色。Nginx以其高效的事件驱动...

    添加nginx-http-flv-module模块并重新编译后的nginx(windows版)

    本资源提供的是一款针对Windows平台的Nginx,其中已经集成了`nginx-http-flv-module`模块,这个模块主要用于支持HTTP实时流(HTTP Live Streaming, HLS)和Flash视频流(Flash Video, FLV)。现在我们将深入探讨这一...

    nginx-http-flv-module-1.2.10(包含nginx-rtmp-module)

    使用Nginx-http-flv-module和nginx-rtmp-module创建的流媒体服务通常能很好地在各种操作系统和浏览器上运行,包括Windows、Linux、macOS,以及Chrome、Firefox、Safari等。对于不支持HLS的老旧浏览器,可以通过...

    Nginx-GUI-For-Linux-X64-v1.6.zip

    总之,Nginx-GUI-For-Linux-X64-v1.6.zip是一个方便的工具,它将Nginx的强大功能与图形化操作相结合,降低了使用门槛,提升了管理效率,无论是对于个人开发者还是企业运维团队,都是一个值得尝试的选择。

    ingress-nginx-controller-1.9.yaml

    修改好 "ingress-nginx-controller-1.9.yaml" 文件后,可以使用 `kubectl apply -f ingress-controller-1.9.yaml` 命令进行部署。对于 "nginx-tomcat-svc-ingress.yaml" 和 "nginx-tomcat-deploy.yaml",同样使用 `...

    nginx-sticky-module-1.25.zip

    nginx sticky是nginx的module,可以实现基于cookie的负载均衡。 下载后,在编译安装nginx时,用--add-module... ./configure --prefix=/usr/local/nginx-1.6.0 --add-module=../nginx-sticky-module-1.25 --without-...

    nginx-1.22.1-1.sles12.ngx.x86-64.rpm文件(分享给需要的同学)

    nginx-1.22.1-1.sles12.ngx.x86_64.rpm文件 nginx-1.22.1-1.sles12.ngx.x86_64.rpm文件 nginx-1.22.1-1.sles12.ngx.x86_64.rpm文件 nginx-1.22.1-1.sles12.ngx.x86_64.rpm文件 nginx-1.22.1-1.sles12.ngx.x86_64.rpm...

    nginx-http-flv-module(windows版)

    --> nginx-1.21.6 ======================== 在网上查找半天都只有教程,没有可免费下载的版本,深知没有积分遍地找资源的痛苦,无奈之下只好自己按照教程一步一个坑编译出来的,供大家免费下载使用。(无毒放心使用...

    nginx-linux-1.24.0.tar.gz

    在这个"nginx-linux-1.24.0.tar.gz"压缩包中,包含的是针对Linux系统的Nginx 1.24.0版本的源码。以下将详细介绍如何在Linux环境下安装和使用这个版本的Nginx。 首先,我们需要了解Linux的基础操作。Linux是一种多...

    nginx-module-vts.tar.gz

    Nginx-Module-VTS是Nginx的一个增强模块,主要功能是提供详细的Web服务器访问统计和性能监控。Prometheus是一款流行的开源监控和警报工具,广泛用于收集和分析各种系统的指标。在本场景中,Nginx-Module-VTS与...

    nginx-1.19.3_nginx-http-flv-module.rar

    压缩包子文件的文件名"nginx-1.19.3_Compiled"表示包含了编译好的Nginx服务器,这通常包括配置文件、二进制可执行文件和其他必要的库文件。用户解压后,可以在自己的服务器上直接部署这个版本的Nginx,无需经历复杂...

    ubuntu18.04下交叉编译nginx1.18.0源码(平台aarch64-linux-gnu)

    1. **Nginx源码**:这里使用的是版本1.18.0,文件名为`nginx-1.18.0.zip`。Nginx是一款高性能的Web服务器和反向代理服务器,可以处理静态内容、动态内容以及流媒体服务。 2. **OpenSSL**:`openssl-1.1.1f.tar.gz`...

    nginx-upstream-jvm-route-1.15

    在提供的压缩包文件"nginx-upstream-jvm-route-master"中,可能包含了源代码、配置示例、安装指南或者使用文档,帮助用户理解和实现这一特性。用户需要按照文档的指示进行配置和部署,以便在Nginx 1.15中成功使用...

    最新版linux fastdfs-nginx-module-1.22.tar.gz

    Linux FastDFS-Nginx-Module 1.22 是一个专为Linux系统设计的高性能、高可用性的文件存储和分发系统,它结合了FastDFS文件服务器和Nginx网络服务器的功能,使得在Web环境中部署文件服务变得更为便捷。这个版本的模块...

    nginx-http-flv-module(linux & nginx1.19.3 & http-flv-module1.2.7).zip.zip

    1、最新版 nginx-http-flv-module(linux可执行程序,含nginx 1.19.3,http-flv-module:1.2.7) 2、内含说明文档,请下载查看。 3、请勿放置于中文路径下,否则无法启动 4、sbin/nginx -c conf/nginx.conf

    nginx-Linux

    在Linux系统中部署Nginx,可以为网站提供高性能的访问支持。以下将详细介绍如何在Linux环境下安装和配置Nginx。 1. **系统准备** 在开始安装Nginx之前,确保你的Linux系统是最新的。可以通过运行`sudo apt-get ...

    nginx-1.19.3-http-flv.zip

    资源说明: 1. 采用nginx最新版编译,包含最新的nginx-http-flv-module,以及基础模块openssl、prce、zlib ...2. 使用cmd命令打开DOS,并切换到D:\nginx-1.19.3 3. 使用nginxservice.exe install安装

Global site tag (gtag.js) - Google Analytics