Nginx服务器性能优化研究

2020-02-19 08:36:15连云港工贸高等职业技术学校江苏连云港市222061
石河子科技 2020年4期
关键词:日志进程内存

(连云港工贸高等职业技术学校,江苏连云港市,222061) 李 兵

常见Web服务器在为用户提供服务时,一般有如下三种方式可选择:多进程方式、多线程方式和异步方式。实际运用中,最大并发数与硬件性能和内存、CPU数量都有很大关系的。CPU越多性能越高,可分配的内存越多性能也就越高。提高Web服务器的并发连接处理能力有几个基本条件:①基于线程;②基于事件的模型;③基于磁盘的异步I/O;④支持mmap 内存映射。由于Nginx 能支持以上的各种特性,充分利用它具有event基于事件机制的特性,可以很好的解决高连接并发的难题。

1 Nginx服务器

Nginx 采用模块化、事件驱动、异步、单线程及非阻塞的架构,并大量采用了多路复用及事件通知机制。Nginx 会按需同时运行多个进程:一个主进程master 和几个工作进程worker,如果配置了缓存还会有缓存加载器进程cache loader 和缓存管理器进程cache manager 等。在Nginx 中,连接请求由为数不多的几个仅包含一个线程的进程worker 以高效的run-loop 回环机制进行处理,而每个worker 可以并行处理数千个的并发连接及请求。所有进程均仅含一个线程,并主要通过“共享内存”的机制实现进程与进程之间的通信。Nginx的代码是由一个核心和一系列模块组成,核心主要用于提供Web Server 的基本功能,以及Web 和Mail 反向代理的功能。Nginx的系列模块提供了core内核、event事件、HTTP服务、mail邮件、misc杂项五种类别,每一类模块根据需要又有多种具体模块。10 000 非活动的HTTP keep-alive 连接仅需要 2~3M 内存,实现最小化的数据拷贝操作。

2 对Nginx服务器性能模块进行优化

2.1 内核core模块的优化

指定工作进程数量并绑定进程。一般为了提高CPU的使用率,可以设定系统进程为可用的CPU总逻辑核数的2 倍,增强worker 进程与CPU 的亲和力;使用worker_cpu-affinity 指令通过调用函数将worker 进程绑定到指定CPU 上。默认配置为worker_processes auto 或 1,修改为 4。四核 CPU 绑定进程为worker_cpu - affinity 0001 0010 0100 1000。定义进程可以同时处理的文件数量。执行命令worker_rlimit_nofile 65535,可以将worker 进程数量从默认值提高到65535。

2.2 事件驱动event模块的优化

使用epoll机制。它通过在Linux内核中申请一个简易的文件系统。把原先的调用分成了3 个部分:建立一个epoll对象、向epoll对象中添加套接字、收集发生的事件连接。epoll 没有限止的fd 只与系统资源有关,是Linux高效网络的基础,因此能够高效支持百万级别的句柄监听。合理设置每个worker进程所能处理的连接数,通过worker_connections 和worker_processes 指令直接相乘能够计算出最大客户端连接数量。实现方法为向配置文件中写入语句:worker_connections 10240;该数值默认为1024。

2.3 HTTP服务内核模块的优化

合理配置keepalive_timeout。用于设定客户端的连接超时,使TCP连接能保持一定时间也就是多少秒,大于这个时间过后,服务器会关闭连接,工作中建议配置为75S:keepalive_timeout 75,以避免连接重建。关闭Nginx日志访问。用户访问的日志通常会写入日志文件中,用于系统分析和日志审计等工作,会提高系统负载,关闭日志写入能提高系统性能。需要将配置文件中的默认值access_log/var/log/Nginx/access.log修改为access_log off。

3 服务器底层优化

3.1 系统进程优化

Linux 对于每个用户,系统会限制用户的最大进程数。为提高性能,可以根据设备资源情况,设置各Linux 用户的值,查看用户打开最大进程数可以执行命令ulimit–u,从结果中得到的max user processes 的值就是系统限制最多可以运行的进程数量,它默认是/proc/sys/kernel/threads-max 的值除以2,即系统线程数的一半。执行命令ulimit–u 65535,用于修改最大进程数值。

3.2 修改系统Linux对进程的总限制

如果全局的kernel.pid_max=1024,那么即使将用户的max user processes 的值设定为655356,用户能打开的最大进程数还是1024,无法达到65535。执行命令:echo65535>/proc/sys/kernel/pid_max,修改这个值才算是正确修改。此方法只是临时生效,如果在/etc/sysctl.conf配置文件中添加kernel.pid_max=65535,才会使得机器重启也会永久生效。

3.3 优化PHPCGI

PHP 配置中默认一次性开启5 个PHPCGI 进程,将 pm.max_children 数值改为64,表示开启64 个php-cgi 进程。另外需要将每个进程在重置之前能够执行的最多请求数默认值500 改为65535:pm.max_requests=65535。

4 Nginx服务器系统优化结果

Nginx 在经过优化以后,能够支持高达30 000并发连接数的响应,并且消耗更少的资源,很好地解决了C10K 问题。根据本文的性能优化对比测试,Nginx可以承受30 000以上的PHP(FastCGI)并发连接数,大约相当于同等环境下Apache 的10 倍。一般来说,4GB内存的服务器使用Apache一般能处理3 000 个并发连接,当并发连接数达到25 00 时,服务器内存和Swap空间用满而系统几乎崩溃,访问延迟,而使用Nginx 优化技术的服务器在30 000 并发连接下,开启8个Nginx进程消耗120M内存(每个进程约消耗15MB),开启的64 个php-cgi 进程消耗1 280M 内存(每个php-cgi 进程约消耗20M),加上系统自身消耗的内存,总共消耗不到2GB内存。在大流量情况下访问Nginx 服务器的PHP 程序,速度仍然很快,网页及程序执行的时延也都在可控范围内。

猜你喜欢
日志进程内存
一名老党员的工作日志
华人时刊(2021年13期)2021-11-27 09:19:02
扶贫日志
心声歌刊(2020年4期)2020-09-07 06:37:14
债券市场对外开放的进程与展望
中国外汇(2019年20期)2019-11-25 09:54:58
“春夏秋冬”的内存
当代陕西(2019年13期)2019-08-20 03:54:22
游学日志
社会进程中的新闻学探寻
民主与科学(2014年3期)2014-02-28 11:23:03
一种基于粗集和SVM的Web日志挖掘模型
基于内存的地理信息访问技术
我国高等教育改革进程与反思
教育与职业(2014年7期)2014-01-21 02:35:04
Linux僵死进程的产生与避免