如果问题很愚蠢我真诚地道歉,但我是新手(前端开发人员,最近在后端工作)。
我的应用程序在亚马逊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
检查可用文件数量以及使用的文件数量的最佳方法是什么。我应该如何以这样的方式使用资源,以便建立大量的连接。
请告诉我。
答案 0 :(得分:1)
我相信你检查了错误的限制。
来自man ulimit
如果没有给出选项,则假定 -f 。
这意味着ulimit -S
返回的内容与ulimit -S -f
相同,分别为ulimit -H
和ulimit -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