nginx服务器报 "too many open files" 一般是什么状况引起的,该如何处理

nginx服务器报 "too many open files" 一般是什么状况引起的,该如何处理,第1张

一般报Too many open files的错,表示文件句柄数超出最大。对linux系统来说,默认的最大值为1024,在系统并发比较大的时候,这个很容易超过该值。文件句柄数大小可以通过命令ulimit -a查看。

为避免因程序任务过多导致文件句柄数不够的问题,在linux系统下部署程序的时候可以调大用户文件句柄数。用root用户修改/etc/security/limits.conf 配置,在文件末尾添加如下内容:

user softnofile 2048

user hardnofile 65536

其中user为报错程序部署目录的用户名,根据部署环境配置。注意"nofile"项有两个可能的限制措施。就是<type>项下的hard和soft。硬限制表明soft限制中所能设定的最大值。soft限制指的是当前系统生效的设置值。hard限制值可以被普通用户降低。但是不能增加。soft限制不能设置的比hard限制更高。只有root用户才能够增加hard限制值。

修改完成后切换到user用户下再执行ulimit -a查看文件句柄数是否修改成功。

改完后,验证,发现用户的文件句柄数已变成2048.应该可以应对大并发数啦。

句柄数。

inux最大打开文件句柄数,即打开文件数最大限制,就是规定的单个进程能够打开的最大文件句柄数,Socket连接也算在里面,默认大小1024个。

Linux是一种免费使用和自由传播的类UNIX *** 作系统,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的 *** 作系统。

1./etc/security/limits.conf中指定的nofile的值,nofile有上限,不是无穷大。nofile由内核参数nr_open定义的.

“在2.6.25内核之前有个宏定义,定义了这个值的最大值,为1024*1024,正好是100万,而在2.6.25内核及其之后,这个值是可以通过/proc/sys/fs/nr_open来设置。”

2.使用cat /proc/sys/fs/nr_open 查看nr_open值,可通过修改/ect/sysct.conf 修改fs.nr_open值,sysctl -p生效

3.fix_max linux内核定义的最大file handles(文件句柄数).nr_open定义是单进程最大file-handles,file-handles(即文件句柄)

file-max:

The value in file-max denotes the maximum number of file-

handles that the Linux kernel will allocate. When you get lots

of error messages about running out of file handles, you might

want to increase this limit

nr_open:

This denotes the maximum number of file-handles a process can

allocate. Default value is 1024*1024 (1048576) which should be

enough for most machines. Actual limit depends on RLIMIT_NOFILE

resource limit.

4.file-handles与fd

在UNIX/LINUX中我们接触更多是file discriptor(FD,即文件描述符),通过百度搜索,似乎file-handle在windows中是一个类似file discrptor的东东,但是我们讨论的是linux,再google一下,我们可以精确到c语言中这两个概念的区别,据他们的讨论file-handle应该是一个高层的对象,使用fopen,fread等函数来调用,而FD是底层的一个对象,可以通过open,read等函数来调用。

原文链接: https://blog.csdn.net/wh0426/article/details/52311683


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/tougao/11834921.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-19
下一篇2023-05-19

发表评论

登录后才能评论

评论列表(0条)

    保存