nginx 及 php-fpm和系统ulimit 配置优化&cpu信息查看

时间:2022-10-20 14:57:02

nginx指令中的优化(配置文件)
worker_processes 8;nginx进程数,建议按照cpu数目来指定,一般为它的倍数。

可以设置成auto

worker_processes auto;

worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;为每个进程分配cpu,上例中将8个进程分配到8个cpu,当然可以写多个,或者将一个进程分配到多个cpu。

worker_rlimit_nofile 102400;这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值保持一致。

use epoll;使用epoll的I/O模型,这个不用说了吧。

worker_connections 102400;每个进程允许的最多连接数,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections。

keepalive_timeout 60;keepalive超时时间。

client_header_buffer_size 4k;客户端请求头部的缓冲区大小,这个可以根据你的系统分页大小来设置,一般一个请求的头部大小不会超过1k,不过由于一般系统分页都要大于1k,所以这里设置为分页大小。分页大小可以用命令getconf PAGESIZE取得。

open_file_cache max=102400 inactive=20s;这个将为打开文件指定缓存,默认是没有启用的,max指定缓存数量,建议和打开文件数一致,inactive是指经过多长时间文件没被请求后删除缓存。

open_file_cache_valid 30s;这个是指多长时间检查一次缓存的有效信息。

open_file_cache_min_uses 1;open_file_cache指令中的inactive参数时间内文件的最少使用次数,如果超过这个数字,文件描述符一直是在缓存中打开的,如上例,如果有一个文件在inactive时间内一次没被使用,它将被移除。

=============================================

pm = dynamic
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
补充:那么对于一般的服务器,怎么设置这些值呢,也是有值可参考的。

一般一个php-cgi进程占用20~30m左右的内存,php-fpm稍多一点,就按30m算吧。你的物理mem大小/30m差不多就是可以设置的php-fpm进程数了,当然实际肯定要比这个少点。比如我8G的内存,大概设置100~200之间,也就是pm.max_children=100 是一个比较合适的值。这里面还有一个问题,php-fpm因为一些第三方库可能会引起内存泄漏,时间长了,占用的内存会比较多,像我们的服务器现在就是50m左右,还好,有pm.max_requests这个参数,这个参数指定了一个php-fpm子进程执行多少次之后重启该进程。这个可能就要根据你的实际情况调整了,我的pm.max_requests=500.

=============================================

通过ulimit -n命令可以查看linux系统里打开文件描述符的最大值,一般缺省值是1024,对一台繁忙的服务器来说,这个值偏小,所以有必要重新设置linux系统里打开文件描述符的最大值。那么应该在哪里设置呢?

下面是关于系统连接数的优化
linux 默认值 open files 和 max user processes 为1024

ulimit -n
1024
ulimit –u
1024

问题描述: 说明 server 只允许同时打开 1024 个文件,处理 1024个用户进程
使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数。
新装的linux 默认只有1024 ,当作负载较大的服务器时,很容易遇到error: too many open files。因此,需要将其改大。

最正确的做法是在/etc/security/limits.conf里设置:

vi /etc/security/limits.conf
# 添加如下的行
* soft noproc 65535
* hard noproc 65535
* soft nofile 65535
* hard nofile 65535
  • 说明:* 代表针对所有用户
    noproc 是代表最大进程数
    nofile 是代表最大文件打开数

==========================================

CentOS下CPU 信息查看

我们可以用/proc/cpuinfo 查看CPU 的信息。 该文件包含系统上每个处理器的数据段落。/proc/cpuinfo 描述中有 6 个条目适用于多内核和超线程(HT)技术检查:processor, vendor id, physical id, siblings, core id 和 cpu cores。
(1)processor:包括这一逻辑处理器的唯一标识符。
(2)physical id :包括每个物理封装的唯一标识符。
(3)core id :保存每个内核的唯一标识符。
(4)siblings :列出了位于相同物理封装中的逻辑处理器的数量。
(5)cpu cores :包含位于相同物理封装中的内核数量。
(6)如果处理器为英特尔处理器,则 vendor id 条目中的字符串是 GenuineIntel。

我们可以通过/proc/cpuinfo 这个文件来查看CPU 的信息。

more /proc/cpuinfo

逻辑CPU个数:

cat /proc/cpuinfo | grep 'processor' | wc -l
64

注意:这里是逻辑CPU。 就是我们在cpuinfo中看到的processor.

物理CPU个数:

cat /proc/cpuinfo | grep 'physical id' | sort | uniq | wc -l
4

这里指的是物理CPU,就是我们在服务器上看到的2个CPU 插槽。

每个物理CPU中Core的个数:

cat /proc/cpuinfo | grep 'cpu cores' | wc -l
64

从/proc/cpuinfo 这个文件,我们可以看出cpu的信息。 这个有2个概念。 一个是物理CPU个数和逻辑CPU 个数。 物理CPU 就是我们在主板上卡槽看到CPU的个数。 这个可以通过physical id 这个进行判断。 有几个不同的physical id 就有几个物理CPU。 至于逻辑CPU 个数,我们可以通过processor来判断。 这个比较简单。 如果有2个物理封装的的CPU,有16个逻辑CPU。 那么每个物理封装里面就有8个逻辑CPU。