2017-03-09 39 views
1

如果問題很蠢,我真誠的道歉,但我是一個新手(前端開發人員,最近在後端工作)。高配置的AwS機器上的打開文件異常太多

我有我的應用程序在亞馬遜aws機上運行。我想要的是有效地利用我的資源,以便提供更多請求。

我正在運行一個服務於GET和websocket請求的Java vertx服務器。我創建了三個運行在不同端口上的服務器實例,並使用nginx來平衡負載。

我的AWS資源是非常

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 

我檢查打開的文件總數as

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

你能後的輸出:'貓的/ proc/SYS/FS /文件max'和'的ulimit -a' – Behe

+0

執行cat/proc/SYS/FS /文件最大爲300000 – CuriousMind

+0

@ Behe請檢查,我已編輯了這個問題。 – CuriousMind

回答

1

我假設你的硬限制和軟限制是正確設置的。但是你得到這個錯誤是因爲vertx不能利用你設置的全部ulimits。

執行cat/proc/PID /限制

Max open files 700000  700000 files 

是,告訴你行:

檢查什麼是最大極限,你vertx服務器可以使用。

如果您已將軟限制設置爲高,但此值仍然較低,那麼應用中的某些內容(如init文件)會改變軟限制。

所以你可以找到init腳本,並簡單地改變那裏的軟限制。它會解決你的問題。

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

0

我相信你檢查了錯誤的限制。

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 filestoo 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打開的文件描述符的最大數目(大多數系統不允許這個值設置)

在某些系統,你可能無法改變它。

+0

我檢查你的說,軟限制仍然是'無限的',硬限制是700000. – CuriousMind

+0

@CuriousMind對不起。我的帖子中有一個錯字。它必須是'ulimit -S -n'而不是'ulimit -S'。這就是爲什麼你得到'無限制'的原因(這是爲了寫入文件的最大尺寸,如前所述)。對硬限制你不能有一個更大的軟限制。但爲什麼您的應用程序需要同時需要700.000多個打開的文件? – SubOptimal

+0

ulimit -S -n是700000.我的應用程序收到大量的請求。我得到很多'太多文件'打開異常。 – CuriousMind

相關問題