nginx应用总结(2)–突破高并发的性能优化

在日常的运维工作中,经常会用到nginx服务,也时常会碰到nginx因高并发导致的性能瓶颈问题。今天这里简单梳理下nginx性能优化的配置(仅仅依据本人的实战经验而述,如有不妥,敬请指出~) 一、这里的优化主要是指对nginx的配置优化,一般来说nginx配置文件中对优化比较有作用的主要有以下几项:1)nginx进程数,建议按照cpu数目来指定,一般跟cpu核数相同或为它的倍数。worker_processes 8;2)为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu。worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;3)下面这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是系统的最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。worker_rlimit_nofile 65535;4)使用epoll的I/O模型,用这个模型来高效处理异步事件use epoll;5)每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。worker_connections 65535;6)http连接超时时间,默认是60s,功能是使客户端到服务器端的连接在设定的时间内持续有效,当出现对服务器的后继请求时,该功能避免了建立或者重新建立连接。切记这个参数也不能设置过大!否则会导致许多无效的http连接占据着nginx的连接数,终nginx崩溃!keepalive_timeout 60;7)客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。client_header_buffer_size 4k;8)下面这个参数将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。open_file_cache max=102400 inactive=20s;9)下面这个是指多长时间检查一次缓存的有效信息。open_file_cache_valid 30s;10)open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。open_file_cache_min_uses 1; 11)隐藏响应头中的有关操作系统和web server(Nginx)版本号的信息,这样对于安全性是有好处的。server_tokens off;12)可以让sendfile()发挥作用。sendfile()可以在磁盘和TCP socket之间互相拷贝数据(或任意两个文件描述符)。Pre-sendfile是传送数据之前在用户空间申请数据缓冲区。之后用read()将数据从文件拷贝到这个缓冲区,write()将缓冲区数据写入网络。sendfile()是立即将数据从磁盘读到OS缓存。因为这种拷贝是在内核完成的,sendfile()要比组合read()和write()以及打开关闭丢弃缓冲更加有效(更多有关于sendfile)。sendfile on;13)告诉nginx在一个数据包里发送所有头文件,而不一个接一个的发送。就是说数据包不会马上传送出去,等到数据包最大时,一次性的传输出去,这样有助于解决网络堵塞。tcp_nopush on; 14)告诉nginx不要缓存数据,而是一段一段的发送–当需要及时发送数据时,就应该给应用设置这个属性,这样发送一小块数据信息时就不能立即得到返回值。tcp_nodelay…

nginx应用总结(1)–基础认识和应用配置

在linux系统下使用nginx作为web应用服务,用来提升网站访问速度的经验已五年多了,今天在此对nginx的使用做一简单总结。 一、nginx服务简介Nginx是一个高性能的HTTP和反向代理服务器,也是一个 IMAP/POP3/SMTP代理服务器。Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。 使用 Nginx 前必须了解的事项:1)目前官方 Nginx 并不支持 Windows,您只能在包括 Linux、UNIX、BSD 系统下安装和使用;2)Nginx 本身只是一个 HTTP 和反向代理服务器,它无法像 Apache 一样通过安装各种模块来支持不同的页面脚本,例如 PHP、CGI 等;3)Nginx 支持简单的负载均衡和容错;4)支持作为基本 HTTP 服务器的功能,例如日志、压缩、Byte ranges、Chunked responses、SSL、虚拟主机等等,应有尽有。 Nginx工作原理:Nginx由内核和一系列模块组成,内核提供web服务的基本功能,如启用网络协议,创建运行环境,接收和分配客户端请求,处理模块之间的交互。Nginx的各种功能和操作都由模块来实现。Nginx的模块从结构上分为核心模块、基础模块和第三方模块。1)核心模块: HTTP模块、EVENT模块和MAIL模块2)基础模块: HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块和HTTP…

单机多实例的tomcat+supervisor配置方法

新公司,开发用java,跑在tomcat里,一台机器会跑多个tomcat,原来的运维人员是复制了多份tomcat放到目录下。这样做我觉得管理不方便,遂改为superviosr来控制,同时将tomcat本身与工程文件分开放置。即一台主机只有一份tomcat可执行文件,这样也方便以后升级tomcat,下边简要流水账一下,不解释细节,都能看懂。另外,我把安装过程写成了ansible playbook,需要的可以去我的github上下载,https://github.com/polygun2000 1.安装Server JRE ]# mkdir /usr/local/java/ ]# tar xvzf server-jre-8u121-linux-x64.tar.gz –strip-components=1 -C /usr/local/java 2.安装supervisor 可以用yum直接安装,epel源中有,不过版本比较低。 推荐的方式是使用pip安装,需要机器能访问internet。 如果不能访问internet,可以在能访问的机器上直接下载源码,复制过来后解压,用python setup.py install方式安装。 注意:supervisor依赖meld3,但是pip安装的meld3有可能版本太低,启动supervisor会报错,可以下载meld3-1.0.2.tar.gz,采用python setup.py install方式手工安装。 ]# pip install supervisor supervisor查找配置文件的顺序如下,其中 $CWD 代表当前工作目录…

在CentOS7 开发与部署 asp.net core app笔记

在 CentOS7 开发与部署 asp.net core app笔记 说明:我用的虚机是qcloud上的,其它云服务商的CentOS可能配置不同,或者网络环境不同。 在QCloud CentOS7 开发与部署 asp.net core app大致有如下几布: 1. 安装dotnet core 2. 开发第一个asp.net core app 3. 安装配置Nginx 4. 配置自启动守护程序 一. 安装dotnet core 0. CentOS上运行dotnet core的依赖项…

进程管理supervisor的简单说明

背景: 项目中遇到有些脚本需要通过后台进程运行,保证不被异常中断,之前都是通过nohup、&、screen来实现,带着能否做一个start/stop/restart/reload的服务启动的想法找到里Supervisor。关于supervisor的介绍在网上大致搜索总结如下: Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。 说明: 1,安装 1:easy_install 安装: easy_install supervisor 2:pip 安装: pip install supervisor 3:Debian / Ubuntu可以直接通过apt安装: apt-get install supervisor 2,配置文件 1)通过apt-get install安装后,supervisor的配置文件在: /etc/supervisor/supervisord.conf supervisor的配置文件默认是不全的,不过在大部分默认的情况下,上面说的基本功能已经满足。而其管理的子进程配置文件在: /etc/supervisor/conf.d/*.conf 然后,开始给自己需要的脚本程序编写一个子进程配置文件,让supervisor来管理它,放在/etc/supervisor/conf.d/目录下,以.conf作为扩展名(每个进程的配置文件都可以单独分拆也可以把相关的脚本放一起)。如任意定义一个和脚本相关的项目名称的选项组(/etc/supervisor/conf.d/test.conf): #项目名 #脚本目录 directory=/opt/bin…

在Centos7下安装与部署.net core

个人安装流程,参照文档 你可以按照第一个链接里的方式安装,但是我在官网上下载tar包自行安装时经常缺少文件,导致安装失败。 所以我建议你在配置环境的时候,按照官网上写的流程来做。 ——————————————————————————————- 首先,安装libicu依赖 执行下方命令行 第二步,Add the dotnet product feed按照微软官网上的流程执行下面两行命令 sudo rpm --import https://packages.microsoft.com/keys/microsoft.ascsudo sh -c 'echo -e "\nname=packages-microsoft-com-prod \nbaseurl= https://packages.microsoft.com/yumrepos/microsoft-rhel7.3-prod\nenabled=1\ngpgcheck=1\ngpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/dotnetdev.repo' 第三步,Install the .NET SDK 执行下方命令行,时间较长 sudo…

supervisor 管理 tomcat 常见问题

1.supervisorctl http://localhost:9001 refused connection 1.打开如下的配置: 2.tomcat 启动报错:FATAL Exited too quickly 1.这是因为启动 tomcat的方式不对,在linux命令行模式下我们启动可以使用如下脚本 2.在supervisor的启动命令中不能使用这种方式了要使用如下方式: 3.完整配置文件: 1.supervisor 配置文件 file=/var/tmp/supervisor.sock ; (the path to the socket file) ;chmod=0700 ; sockef file mode (default…

CentOS7——supervisor安装配置实战

介绍 Supervisor是一个进程控制系统。 它是一个C/S系统,服务端是supervisord进程,控制端使用supervisorctl来进行控制启动进程。同时它也提供了一个web界面,来可以使我们方便的进行进程的控制和查看日志信息。 supervisord和supervisorctl类似于centos7上的systemd和systemctl的关系,但是又和systemd不同, 你的Nginx,Tomcat,memcache,Redis…会崩么? 那你自己写的服务器监测脚本呢? 好吧、不要再纠结了、交给Supervisor吧! 它会帮你维护这些、即使它们不小心崩了、Supervisor会帮你看住它们、维护它们,重启它们。 一、安装 安装环境:CentOS7.3 supervisor安装完成后会生成三个执行程序:supervisortd、supervisorctl、echo_supervisord_conf,分别是supervisor的守护进程服务(用于接收进程管理命令)、客户端(用于和守护进程通信,发送管理进程的指令)、生成初始配置文件程序。 二、配置 输出supervisor配置,可以使用echo_supervisord_conf,我们将其重定向到文件中,然后就可以修改其配置项了。 运行supervisord服务的时候,需要指定supervisor配置文件,如果没有显示指定,默认在以下目录查找: 我们将其重定向到/etc/目录下面 1、配置文件参数说明 supervisor的配置参数较多,下面介绍一下常用的参数配置,详细的配置及说明,请参考官方文档介绍。 注:分号(;)开头的配置表示注释 2、配置管理进程 进程管理配置参数,不建议全都写在supervisord.conf文件中,应该每个进程写一个配置文件放在include指定的目录下包含进supervisord.conf文件中。 (1)创建/etc/supervisor/config.d目录,用于存放进程管理的配置文件 (2)修改/etc/supervisor/supervisord.conf中的include参数,将/etc/supervisor/conf.d目录添加到include中 3、服务配置模板 ###命令要能运行在前台,如果命令加入&符号,例如”ping 127.0.0.1 &”命令就不能被supervisor来进行监控。 command=php /home/wwwroot/site.webshowu.com/artisan queue:work redis…

Centos 7.X 安装 supervisord

supervisord 是Linux/Unix系统下的一个进程管理工具 安装 设置开机启动 配置文件 supervisord 的配置 文件是 /etc/supervisord.conf 自定义配置文件目录是/etc/supervisord.d,该目录下文件已.ini为后缀 supervisord 命令 启动 关闭 重启 配置进程 例如有个nginx 进程设置 内容如下 supervisord 客户端管理命令 注意:nginx 其他 组成部分 supervisord:服务守护进程 supervisorctl:命令行客户端 Web Server:提供与supervisorctl功能相当的WEB操作界面 XML-RPC Interface:XML-RPC接口…

zabbix3.0部署jmx监控tomcat

zabbix提供了一个java gateway的应用去监控jmx(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。 一. Zabbix 的JMX监控架构 一:部署环境 Centos 6.7 Zabbix 3.0.3 Tomcat 7.0.55 服务端配置 1、安装jdk(版本1.7.0_79) JDK 各自的版本7.0 还是8.0 版本官网下载:JDK 我这里也上传了7.0.67 版本的和8.0版本的jdk源码包: 7.0JDK源码包 8.0JDK源码包 并上传到zabbix server 直接解压下载下来的包到自定义的目录: tar -zxvf jdk1.7.0_67.tar.gz…