Nginx优化实战--参数优化

1.优化Nginx服务的worker进程个数

在nginx.conf配置中有worker_processes.优化策略,worker_processes参数大小的设置可以等于CPU核数。高并发场合也可以考虑提高至CPU核数*2

#该参数调整的是nginx服务的worker进程数,Nginx有Master进程和worker进程之分,Master为管理进程,真正接待"顾客"的是worker进程

worker_processed 1; <== 指定了nginx要开启的进程数,结尾的数字就是进程的个数

小知识点:查看Linux服务器CPU硬件资源信息。如 4cpu32核,一般就是4个cpu,32个处理器

#查看CPU总核数(逻辑数目)
[root@vultr ~]# grep processor /proc/cpuinfo
processor   : 0
# 配置里是cpu逻辑数目(从0开始)

#查看CPU总颗数
[root@vultr ~]# grep 'physical id' /proc/cpuinfo
physical id : 0
# 配置的是物理地址,即cpu物理数目(从0开始)

#可以通过执行top命令,然后按数字1,即可现实所有的CPU核数
[root@vultr ~]# top
top - 14:31:42 up 74 days, 7 min,  1 user,  load average: 0.00, 0.01, 0.05
Tasks:  67 total,   1 running,  66 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1016396 total,   182272 free,   278292 used,   555832 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   512028 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
  445 root      20   0  553156  16100   3420 S  0.3  1.6  16:01.90 tuned
    1 root      20   0  125048   3232   2088 S  0.0  0.3   6:02.34 systemd

如果是4cpu32核, 建议配置成32

worker_processes   32;

2.Nginx事件处理模型优化

Nginx的链接处理机制在不同的操作系统中会采用不同的I/O模型,在Linux下,Nginx使用epoll的I/O多路复用模型,在Freebsd中使用kqueue的I/O多路复用模型,在Solaris中使用/dev/poll方式的I/O多路复用模型,在Windows中使用的是icop。

events
{
    use epoll; #events指令是设定Nginx的工作模式以及连接数上限
    #参数有select,poll,kqueue,epoll,rtsig,、dev/poll,其中select/poll是标准的工作模式
}

3.调整Nginx单个进程允许的客户端最大连接数

最大连接数worker_connections同样也在nginx.conf中的event中。worker_connections的值要根据具体服务器性能和程序的内存使用量来指定(一个进程启动使用的内存根据程序确定),如下:

events
{
    worker_connections 1024; 
    # 这也是个事件模块指令,用于定义nginx每一个进程的最大连接数,默认是1024.最大客户端连接数是woker_processes*worker_connections。进程的最大连接数受Linux系统进程的最大文件数限制,在执行命令"ulimit -HSn 65535"或配置对应的文件后,这里的woker_connections的设置才生效
}

4.配置Nginx worker进程最大打开文件数

woker_rlimit_nofile  65535; #在最外层配置和worker_processes 一个层级

5.开启高效文件传输模式

sendfile参数用户开启文件的高效传输模式。同时将tcp_nopushtcp_nodelay两个指令设置为on,可防止网络及磁盘I/O阻塞,提升nginx工作效率。

#可以再http、location中定义
http
{
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
}
  1. sendfile 可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效(更多有关于sendfile)。
  2. tcp_nopush 告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送。
  3. tcp_nodelay 告诉nginx不要缓存数据,而是一段一段的发送–当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目 录 完整诠释Nginx 分享Nginx实战经验 不可多得的Nginx一手资料 联系博文视点 序言 第1部分 基础篇 第1章 Nginx简介 1.1 常用的Web服务器简介 1.2 Nginx的发展 1.3 选择Nginx的理由 1.4 Nginx与Apache、 Lighttpd的综合对比 第2章 Nginx服务器的安装与配置 2.1 安装Nginx服务器所需要的系统资源 2.2 Nginx的下载 2.3 Nginx的安装 2.4 Nginx的启动、 停止、 平滑重启 2.5 Nginx的平滑重启 2.6 Nginx的信号控制 2.7 Nginx的平滑升级 第2部分 进阶篇 第3章 Nginx的基本配置与优化 3.1 Nginx的完整配置示例 3.2 Nginx的虚拟主机配置 3.3 Nginx的日志文件配置与切割 3.4 Nginx的压缩输出配置 3.5 Nginx的自动列目录配置 3.6 Nginx的浏览器本地缓存设置 第4章 Nginx与PHP( FastCGI) 的安装、 配置与优化 4.1 获取相关开源程序 4.2 安装PHP 5.2.10( FastCGI模式) 4.3 安装Nginx 0.8.15 4.4 配置开机自动启动Nginx+PHP 4.5 优化Linux内核参数 4.6 在不停止Nginx服务的情况下平滑变更Nginx配置 4.7 编写每天定时切割Nginx日志的脚本 第5章 Nginx与JSP、 ASP.NET、 Perl的安装与配置 5.1 Nginx与JSP( Tomcat) 在Linux上的安装、 配置 5.2 Nginx与ASP.NET( Mono+FastCGI) 在Linux上的安装、 配置 5.3 Nginx与Perl( FastCGI) 在Linux上的安装、 配置 第6章 Nginx HTTP负载均衡和反向代理的配置与优化 6.1 什么是负载均衡和反向代理 6.2 常见的Web负载均衡方法 6.3 Nginx负载均衡与反向代理的配置实例 6.4 Nginx负载均衡的HTTP Upstream模块 6.5 Nginx负载均衡服务器的双机高可用 第7章 Nginx的Rewrite规则与实例 7.1 什么是Nginx的Rewrite规则 7.2 Nginx Rewrite规则相关指令 7.3 PCRE正则表达式语法 7.4 Nginx的Rewrite规则编写实例 7.5 Nginx与Apache的Rewrite规则实例对比 第8章 Nginx模块开发 8.1 Nginx模块概述 8.2 Nginx模块编写实践 第9章 Nginx的Web缓存服务与新浪网的开源NCACHE模块 9.1 什么是Web缓存 9.2 Nginx的Web缓存服务 9.3 新浪网开源软件项目——基于Nginx的NCACHE网页缓存系统 第3部分 实战篇 第10章 Nginx在国内知名网站中的应用案例 10.1 Nginx反向代理与负载均衡类网站应用案例 10.2 Nginx+PHP类网站应用案例 10.3 Nginx视频点播类网站应用案例 第11章 Nginx的非典型应用实例 11.1 用HTTPS( SSL) 构建一个安全的Nginx Web服务器 11.2 采用Nginx搭建FLV视频服务器 11.3 Nginx+PHP+MySQL在小内存VPS服务器上的优化 11.4 采用Nginx搭建正向代理服务器 第4部分 模块篇 第12章 Nginx的核心模块 12.1 主模块指令 12.2 主模块变量 12.3 事件模块指令 第13章 Nginx的标准HTTP模块 13.1 HTTP的核心模块 13.2 HTTP Upstream模块 13.3 HTTP Access模块 13.4 HTTP Auth Basic模块 13.5 HTTP Autoindex模块 13.6 HTTP Browser模块 13.7 HTTP Charset模块 13.8 HTTP Empty Gif模块 13.9 HTTP Fcgi模块 13.10 geo模块 13.11 Gzip模块 13.12 HTTP Headers模块 13.13 HTTP Index模块 13.14 HTTP Referer模块 13.15 HTTP Limit Zone模块 13.16 HTTP Limit Req模块 13.17 HTTP Log模块 13.18 HTTP Map模块 13.19 HTTP Memcached模块 13.20 HTTP Proxy模块 13.21 HTTP Rewrite模块 13.22 HTTP SSI模块 13.23 HTTP Userid模块 第14章 Nginx的其他HTTP模块 14.1 HTTP Addition模块 14.2 Embedded Perl模块 14.3 Flv Stream模块 14.4 HTTP Gzip Static模块 14.5 HTTP Random Index模块 14.6 HTTP Geo IP模块 14.7 HTTP RealIp模块 14.8 HTTP SSL模块 14.9 HTTP Stub Status模块 14.9.1 stub_status指令 14.10 HTTP Sub模块 14.11 HTTP Dav模块 14.12 Google Perftools模块 14.13 HTTP XSLT模块 14.14 HTTP Secure Link模块 14.15 HTTP Image Filter模块 第15章 Nginx的邮件模块 15.1 Nginx邮件核心模块 15.2 Nginx邮件认证模块 15.3 Nginx邮件代理模块 15.4 Nginx邮件SSL模块 15.5 Nginx邮件模块配置实例 索引 参考资料 编辑手记 《 实战Nginx: 取代Apache的高性能Web服务器》 读者交流区 勃勃生机, 潇洒开源 反侵权盗版声明 实战Nginx: 取代Apache的高性能Web服务器
Nginx是一个高性能的开源Web服务器和反向代理服务器。在进行CPU优化时,可以采取以下几个方面的措施: 1. 合理配置worker_processesNginx使用多进程模型,可以通过配置worker_processes参数来指定启动的worker进程数。根据服务器的CPU核心数和负载情况,合理配置worker_processes可以充分利用服务器资源。 2. 调整worker_connections:worker_connections参数定义了每个worker进程能够同时处理的最大连接数。根据服务器的硬件配置和预期的并发连接数,适当调整该参数可以提高性能。 3. 开启事件驱动模型:Nginx支持多种事件驱动模型,如epoll、kqueue等。根据操作系统的支持情况,选择合适的事件驱动模型可以提高性能。 4. 启用缓存:Nginx可以通过配置缓存来减轻后端服务器的负载。可以使用proxy_cache模块开启反向代理缓存,或者使用fastcgi_cache模块开启FastCGI缓存。 5. 优化HTTP请求处理:可以通过配置keepalive_timeout参数来复用TCP连接,减少连接建立的开销。另外,可以使用gzip模块开启压缩,减小传输数据量。 6. 使用高效的算法和数据结构:Nginx内部使用了一些高效的算法和数据结构,如红黑树、哈希表等。这些算法和数据结构的选择可以提高Nginx的性能。 7. 避免不必要的模块和指令:根据实际需求,避免加载不必要的模块和指令,可以减少内存占用和CPU消耗。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值