nginx报错socket() failed (24: Too many open files)【转】


nginx 错误日志:

1 2 2016/02/28 21:07:36 [alert] 11569#0: *41512 socket() failed (24: Too many open files) while connecting to upstream, client: 192.168.1.110, server: localhost, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8080/", host: "192.168.1.218" 2016/02/28 21:07:36 [alert] 11569#0: *41512 socket() failed (24: Too many open files) while connecting to upstream, client: 192.168.1.110, server: localhost, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8080/", host: "192.168.1.218"
1 解决办法:

一、Linux打开文件最大数设置

查看打开文件最大数

ulimit -a

设置一

ulimit -HSn 102400 #只是当前shell有效

设置二

(1)ulimit -HSn 102400

(2)将ulimit -HSn 102400写到/etc/profile中,因为每次登录终端时,都会自动执行/etc/profile。

(3)令修改open files的数值永久生效,则必须修改配置文件:vi /etc/security/limits.conf. 在这个文件后加上:

* soft nofile 102400

* hard nofile 102400

这种方法需要重启机器才能生效。

另一个,查看下nginx的配置文件。

查看 worker_rlimit_nofile 配置项

worker_rlimit_nofile 655350;

二、nginx打开文件最大数设置

nginx worker_rlimit_nofile Option (在nginx级别上提高打开的文件句柄限制)

nginx也有同样的限制,可以通过worker_rlimit_nofile来增加此限制数量。 来设置被nginx进程最大文件打开的数量,编辑nginx.conf文件,键入:

vi /usr/local/nginx/conf/nginx.conf (视你的配置文件的位置而定)

追加或者编辑:

worker_rlimit_nofile   30000;

保存并关闭文件,重新加载nginx配置,并重新执行开始查看软硬限制的命令:

su - nginx

ulimit -Hn

ulimit -Sn

输入示例:

30000

10000

其实在国内的网站是上搜到的内容大都讲的差不多了,原先我也如此,但一直没有解决,最后发现最关键的参数没设置,故一直不能超过1024个active conntions. 通过设置此参数即可解决:

worker_rlimit_nofile   30000;

三、Linux操作系统中打开文件数量的查看方法

ulimit -n 4096

也就是限制用户的最大文件打开数为4096个

在网上查了关于怎么查看文件打开数的文章大致有两种说法

/proc/sys/fs/file-nr

该文件与 file-max 相关,它有三个值:

已分配文件句柄的数目

已使用文件句柄的数目

文件句柄的最大数目

该文件是只读的,仅用于显示信息。

查看所有进程的文件打开数

lsof |wc -l

查看某个进程打开的文件数

lsof -p pid |wc -l

英文原文:
Syntax: worker_rlimit_nofile number;
Default:    —
Context:    main
Changes the limit on the maximum number of open files (RLIMIT_NOFILE) for worker processes. Used to increase the limit without restarting the main process.

中文翻译:
为nginx工作进程改变打开最多文件描述符数目的限制。用来在不重启主进程的情况下增加限制。

例如:
worker_rlimit_nofile 204800;
理论上这个值是最多打开文件数(ulimit -n)与nginx工作进程相除。

转自

nginx socket() failed (24: Too many open files) - 王恒志 - 博客园
https://www.cnblogs.com/xzlive/p/14973823.html

Nginx: 24: Too Many Open Files 错误和解决方案 - 房客 - 博客园
https://www.cnblogs.com/sxlfybb/archive/2011/09/15/2177983.html

Linux操作系统中打开文件数量的查看方法 - 心灵捕手 - 博客园 https://www.cnblogs.com/Dennis-mi/articles/6084581.html

(24条消息) nginx学习随笔--worker_rlimit_nofile_zhxuewu的专栏-CSDN博客_worker_rlimit_nofile

https://blog.csdn.net/zhxuewu/article/details/77932441

  • 英文原文:
Syntax: worker_rlimit_nofile number;
Default: 
Context:    main
  • 1
  • 2
  • 3

Changes the limit on the maximum number of open files (RLIMIT_NOFILE) for worker processes. Used to increase the limit without restarting the main process.

  • 中文翻译:

    为nginx工作进程改变打开最多文件描述符数目的限制。用来在不重启主进程的情况下增加限制。
    
    • 1

例如:

worker_rlimit_nofile 204800;
  • 1

理论上这个值是最多打开文件数(ulimit -n)与nginx工作进程相除。