在网站和企业级应用里,Nginx因具备高性能被广泛应用,不过,在面临复杂业务和高并发状况时,默认配置可能无法胜任,接下来会详细说明如何对Nginx性能进行优化。
系统层面优化
在Linux系统中,文件描述符的默认限制相对较低。在处理文件和网络连接时,在高并发情形下容易耗尽连接。其默认值通常只有几千。例如一些商城促销活动,会有大量用户前来访问,很容易超出限制。所以我们要提高其限制,从而确保Nginx能够稳定应对高访问量。
不能忽视对 TCP 连接效率的优化,不能忽视对 TCP 连接延迟的优化,网络连接不稳定会严重影响 Nginx 的性能,恰当调整 TCP 参数,能够加快数据传输,能够降低延迟,能够让网站打开速度变快 。
磁盘 I/O 优化
Nginx处理静态文件时,需要高效的磁盘读写,图片、CSS文件这类读取不顺畅会影响页面加载,一般机械硬盘读写速度慢,换上固态硬盘能显著提高Nginx的响应速度。
优化磁盘I/O调度器非常重要,不同的调度器适用于不同场景,合理选择调度器能够提高磁盘读写效率,这能让Nginx从磁盘获取数据更迅速。
ulimit -n
Nginx 配置优化
ulimit -n 65535
Nginx处理请求时采用异步非阻塞I/O,这能减少线程切换的开销,它还能依据服务器CPU核心数调整worker进程数,通常把worker进程数设置为CPU核心数,借此充分利用服务器资源,从而应对高并发。
* soft nofile 65535
* hard nofile 65535
开启 Gzip 能够减少传输的数据量,可是一旦某些配置不合理,就有可能致使 CPU 占用过高,因此我们要平衡压缩率与 CPU 占用,从而让网站响应更迅速,还能使服务器负担不沉重。
echo 3 > /proc/sys/net/ipv4/tcp_fastopen
缓存与控制优化
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
echo 1 > /proc/sys/net/ipv4/tcp_tw_recycle
配置静态资源缓存很有作用,用户多次访问同一页面时,能直接从缓存读取内容,从而减少服务器处理压力,网站的图片、脚本文件等静态内容都可设置缓存。
echo "1024 65535" > /proc/sys/net/ipv4/ip_local_port_range
合理设置缓存控制策略,通过该策略来控制资源缓存时间,以及更新机制,如此做能够提高用户访问速度,并且减轻服务器负载,对于一些更新频率低的页面,可设置较长的缓存时间。
模块和工具优化
HttpStubStatusModule模块有监控Nginx实时状态的作用,通过它可以知道当前连接数,也能了解请求处理状态等情形,这有利于我们及时发觉问题。
cat /sys/block/sdX/queue/scheduler
给后端服务设置缓存,用来减轻服务器处理请求的压力。例如,对数据库查询结果进行缓存,当再次出现相同请求时,能直接从缓存获取信息,不用再次查询。
echo noop > /sys/block/sdX/queue/scheduler
负载均衡优化
Nginx有强大的负载均衡功能,它有round – robin和least_conn等算法,round – robin会依照顺序分配请求,least_conn会把请求分给连接数最少的服务器。
worker_processes auto;
worker_connections 10240;
events {
use epoll;
multi_accept on;
}
根据后端服务器的性能状态,参考它的负载情况,选择合适的算法,这样能让请求均匀分布,从而提高整体的处理能力,增强稳定性。
你觉得上述那些Nginx性能优化方法中,哪一个是你最想尝试的?赶紧点赞这篇文章,再分享它,然后和大家一起交流!
gzip on;
gzip_min_length 1024;
gzip_comp_level 5;
gzip_types text/plain text/css application/json application/javascript;
发表回复