6

nginx高并发优化之文件描述符设置

 1 year ago
source link: https://blog.51cto.com/u_13236892/5815634
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一、nginx设置

/etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
* soft core unlimited
* soft stack 65535
通过sysctl -p 使得配置生效,可用通过ulimit -a查看file配置是否生效

修改的文件数量上限必须小于等于系统级文件数
即系统内核优化中的:
fs.file-max = 655360
查询方式
sysctl -n -e fs.file-max
sysctl -a|grep fs.file

二、limits.conf配置流程

1) /etc/security/limits.conf
加上:
* soft nofile 8192
* hard nofile 20480

2) /etc/pam.d/login
session required /lib/security/pam_limits.so
**********
另外确保/etc/pam.d/system-auth文件有下面内容
session required /lib/security/$ISA/pam_limits.so
这一行确保系统会执行这个限制。
***********

1)/proc目录里面包括很多系统当前状态的参数,例如:引用
/proc/sys/fs/file-max
/proc/sys/fs/inode-max
是对整个系统的限制,并不是针对用户的;
2)proc目录中的值可以进行动态的设置,若希望永久生效,可以修改/etc/sysctl.conf文件,并使用下面的命令确认:
# sysctl -p
例如增加:
引用
fs.file-max=xxx
fs.inode-max=xxx

三、limits.conf详解

1、概述
/etc/security/limits.conf 文件实际是 Linux PAM(插入式认证模块,Pluggable Authentication Modules)中 pam_limits.so 的
配置文件,而且只针对于单个会话。 该设置不会影响系统服务的资源限制。还要注意 /etc/security/limits.d/ 的这个目录

2、配置文件解析:
# /etc/security/limits.conf
#
#This file sets the resource limits for the users logged in via PAM.
该文件为通过PAM登录的用户设置资源限制。
#It does not affect resource limits of the system services.
#它不影响系统服务的资源限制。
#Also note that configuration files in /etc/security/limits.d directory,
#which are read in alphabetical order, override the settings in this
#file in case the domain is the same or more specific.
请注意/etc/security/limits.d下按照字母顺序排列的配置文件会覆盖 /etc/security/limits.conf中的
domain相同的的配置
#That means for example that setting a limit for wildcard domain here
#can be overriden with a wildcard setting in a config file in the
#subdirectory, but a user specific setting here can be overriden only
#with a user specific setting in the subdirectory.
这意味着,例如使用通配符的domain会被子目录中相同的通配符配置所覆盖,但是某一用户的特定配置
只能被字母路中用户的配置所覆盖。其实就是某一用户A如果在/etc/security/limits.conf有配置,当
/etc/security/limits.d子目录下配置文件也有用户A的配置时,那么A中某些配置会被覆盖。最终取的值是 /etc/security/limits.d 下
的配置文件的配置。

#
#Each line describes a limit for a user in the form:
#每一行描述一个用户配置
#<domain> <type> <item> <value>

#Where:
#<domain> can be:
# - a user name 一个用户名
# - a group name, with @group syntax 用户组格式为@GROUP_NAME
# - the wildcard *, for default entry 默认配置为*,代表所有用户
# - the wildcard %, can be also used with %group syntax,
# for maxlogin limit
#
#<type> can have the two values:
# - "soft" for enforcing the soft limits
# - "hard" for enforcing hard limits
有soft,hard和-,soft指的是当前系统生效的设置值,软限制也可以理解为警告值。
hard表名系统中所能设定的最大值。soft的限制不能比hard限制高,用-表名同时设置了soft和hard的值。
#<item> can be one of the following: <item>可以使以下选项中的一个
# - core - limits the core file size (KB) 限制内核文件的大小。
# - data - max data size (KB) 最大数据大小
# - fsize - maximum filesize (KB) 最大文件大小
# - memlock - max locked-in-memory address space (KB) 最大锁定内存地址空间
# - nofile - max number of open file descriptors 最大打开的文件数(以文件描叙符,file descripter计数)
# - rss - max resident set size (KB) 最大持久设置大小
# - stack - max stack size (KB) 最大栈大小
# - cpu - max CPU time (MIN) 最多CPU占用时间,单位为MIN分钟
# - nproc - max number of processes 进程的最大数目
# - as - address space limit (KB) 地址空间限制
# - maxlogins - max number of logins for this user 此用户允许登录的最大数目
# - maxsyslogins - max number of logins on the system 系统最大同时在线用户数
# - priority - the priority to run user process with 运行用户进程的优先级
# - locks - max number of file locks the user can hold 用户可以持有的文件锁的最大数量
# - sigpending - max number of pending signals
# - msgqueue - max memory used by POSIX message queues (bytes)
# - nice - max nice priority allowed to raise to values: [-20, 19] max nice优先级允许提升到值
# - rtprio - max realtime pr iority
#
#<domain> <type> <item> <value>
#
配置,只能被特定覆盖。
/etc/security/limits.d/ 下文件的相同配置可以覆盖 /etc/security/limits.conf
soft和hard需要都进行设置,才能生效。
nofile不能设置 unlimited
nofile可以设置的最大值为 1048576(2**20),设置的值大于该数,就会进行登录不了。
soft 设置的值 一定要小于或等于 hard 的值。
#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@st

3、/etc/security/limits.d/目录
该目录下默认有 *-nproc.conf 文件,该文件是用于限制用户的线程限制。我们也可以在该目录创建配置文件在 /etc/security/limits.d/
下,以 .conf 结尾。
centos 7
在CentOS 7版本中为/etc/security/limits.d/20-nproc.conf,
CentOS 6
在CentOS 6版本中为/etc/security/limits.d/90-nproc.conf

# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.

* soft nproc 4096 # 所有的用户默认可以打开最大的进程数为 4096
root soft nproc unlimited # root 用户默认可以打开最大的进程数 无限制的。

四、ulimit配置

1、注意事项
配置,只能被特定覆盖。
/etc/security/limits.d/ 下文件的相同配置可以覆盖 /etc/security/limits.conf
soft和hard需要都进行设置,才能生效。
nofile不能设置 unlimited
nofile可以设置的最大值为 1048576(2**20),设置的值大于该数,就会进行登录不了。
soft 设置的值 一定要小于或等于 hard 的值。

2、临时配置
设置可以打开文件的最大数为 65536
ulimit -n 65536
重启后失效。

3、永久配置
配置到配置文件/etc/security/limits.conf或者 /etc/security/limits.d/ 中。
然后退出当前会话,重新登录。 即可生效,重启配置也会保留。
也可以在配置文件/etc/profile 或者/etc/bashrc中设置ulimit -SHn 65536(不建议这么做)

五、ulimit 常用命令

-S use the `soft' resource limit # 设置软限制
-H use the `hard' resource limit # 设置硬限制
-a all current limits are reported# 显示所有的配置。
-b the socket buffer size # 设置socket buffer 的最大值。
-c the maximum size of core files created # 设置core文件的最大值.
-d the maximum size of a process's data segment # 设置线程数据段的最大值
-e the maximum scheduling priority (`nice') # 设置最大调度优先级
-f the maximum size of files written by the shell and its children # 创建文件的最大值。
-i the maximum number of pending signals # 设置最大的等待信号
-l the maximum size a process may lock into memory #设置在内存中锁定进程的最大值
-m the maximum resident set size
-n the maximum number of open file descriptors # 设置最大可以的打开文件描述符。
-p the pipe buffer size
-q the maximum number of bytes in POSIX message queues
-r the maximum real-time scheduling priority
-s the maximum stack size
-t the maximum amount of cpu time in seconds
-u the maximum number of user processes # 设置用户可以创建的最大进程数。
-v the size of virtual memory # 设置虚拟内存的最大值
-x the maximum number of file locks

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK