具有高配置的AwS机器上的打开文件异常太多

时间:2017-03-09 10:58:29

标签: java amazon-web-services nginx server

如果问题很愚蠢我真诚地道歉,但我是新手(前端开发人员,最近在后端工作)。

我的应用程序在亚马逊aws机器上运行。我想要的是有效地利用我的资源,以便提供更多的请求。

我正在运行一个服务于GET和websocket请求的Java vertx服务器。我创建了三个在不同端口上运行的服务器实例,并使用nginx平衡了负载。

我的资源非常多

lsblk
NAME    MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   100G  0 disk 
└─xvda1 202:1    0   100G  0 part /

我的软限制是无限的

ulimit -S
unlimited

我的硬限制是无限的

ulimit -H
unlimited

我正在检查已打开文件的总数

sudo lsof -Fn -u root| wc -l
13397

为什么我会收到此异常

  

java.io.IOException:打开的文件太多

我的ulimit -a是

core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 128305
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 700000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 128305
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

检查可用文件数量以及使用的文件数量的最佳方法是什么。我应该如何以这样的方式使用资源,以便建立大量的连接。

请告诉我。

2 个答案:

答案 0 :(得分:1)

我相信你检查了错误的限制。

来自man ulimit

  

如果没有给出选项,则假定 -f

这意味着ulimit -S返回的内容与ulimit -S -f相同,分别为ulimit -Hulimit -H -f

选项-f表示

The maximum size of files written by the shell and its children

例外java.io.IOException: Too many open files提及too many open files。因此,您需要检查The maximum number of open file descriptors

# as root
$ ulimit -S -n
1024
$ ulimit -S -n 2048
2048

在CentOS 7上man ulimit提及选项-n

  

-n打开文件描述符的最大数量(大多数系统不允许设置此值)

在某些系统上,您可能无法更改它。

答案 1 :(得分:1)

我假设您的硬限制和软限制设置正确。但是你得到这个错误,因为vertx无法利用你设置的完整ulimits。

检查您的vertx服务器可以使用的最大限制是什么:

cat / proc / PID / limits

 Max open files    700000      700000    files

是告诉你的那条线。

如果您已将软限制设置为高,但此值仍然很低,则应用程序中的某些内容(如init文件)会更改软限制。

所以你可以找到init脚本并简单地改变那里的软限制。它会解决你的问题。

https://underyx.me/2015/05/18/raising-the-maximum-number-of-file-descriptors