2010-09-17 98 views
11

是否可以增加工作進程的「最大打開文件」參數? 我的意思是這個參數:工作進程「最大打開文件」

cat /proc/<pid>/limits | grep files 

感謝您的建議

+0

附加信息:我的過程是'java'。我需要增加「最大打開文件」而不停止進程。 – wako 2010-09-17 12:00:24

回答

21

作爲系統管理員/etc/security/limits.conf文件在大多數Linux安裝上控制此功能;它允許您設置每個用戶的限制。你會想要一條線,如myuser - nofile 1000

在一個過程中The getrlimit and setrlimit calls控制大多數進程資源分配限制。 RLIMIT_NOFILE控制文件描述符的最大數量。您將需要適當的權限來調用它。

+0

看來,這是我所需要的。我可以爲某些外部流程設置「setrlimit(RLIMIT_NOFILE,...)」嗎? – wako 2010-09-17 13:24:28

+0

我不知道。如果有的話,我懷疑你會發現它埋藏在一些Linux特定的編程指南中,因爲我無法理解標準的POSIX將它放在哪裏。 – 2010-09-18 21:01:42

+0

有時不需要考慮'limits.conf',你必須在'/etc/systemd/system.conf'和'user.conf'中設置'DefaultLimitNOFILE'。 – Xdg 2018-02-19 08:11:19

4

This link細節如何改變這種系統廣泛每個用戶

+0

感謝您的鏈接。但是在問之前我發現它:-)但是問題是在不停止進程(運行時)和整個進程的情況下更改參數。 – wako 2010-09-17 11:59:34

+0

@wako:它不能從流程外部完成(除非你正在運行最新的開發內核之一,這是不太可能的) – caf 2010-09-17 12:17:08

+0

@caf:謝謝。這正是我想聽到的。 – wako 2010-09-17 13:20:56

6

舊線程,我知道。

您可以使用gdb,打入進程,調用上述系統調用來提高您感興趣的限制,然後繼續工作並退出gdb。我用這種方式幾次編輯了一些東西。

您的應用程序不會停機,而是在執行呼叫時暫時凍結。如果你很快(或者你編寫它!),它可能不會引人注目。

+0

感謝您的提示! – 2014-01-14 11:54:05

+0

+1好建議,[本文](http://superuser.com/a/441758/81173)和[本博客](http://gregchapple.com/updating-ulimit-on-running-linux-process /)描述如何去做。 – 2014-07-09 17:48:45

+0

是的,這有點像調整矩陣使事情工作...停止世界,編輯變量,繼續世界......哦!幻覺記憶!我是一個! (好吧,當我有gdb的時候!) – lornix 2014-07-09 21:15:39

3

是的,可以在運行時增加/proc/<pid>/limits 的限制。只要找到PID並執行以下命令:

echo -n "Max open files=20:20" > /proc/$pid/limits 
+2

不要在Ubuntu 14.04.2 LTS上開火。 – 2015-07-23 01:04:42

3
echo -n "Max open files=20:20" > /proc/$pid/limits 

...在RHEL5.5和RHEL6.7的作品。

請注意,「-n」是強制性的;尾隨的換行符會產生關於無效參數的投訴。

12

另一種選擇是使用prlimit命令(來自util-linux軟件包)。例如,如果你想設置的打開文件的最大數量的過程:

prlimit -n4096 -p pid_of_process

+0

或debian,或Ubuntu的,或... – t2d 2016-08-23 16:20:42

+0

我使用linux mint(基於Ubuntu),我無法在默認安裝中找到它。通常情況下,它是util-linux軟件包的一部分,但是Mint上的這個軟件包並沒有提供這個命令。 – redobot 2016-08-24 07:15:09

+0

➜〜lsb_release -d 說明:\t的Ubuntu 16.04.1 LTS ➜〜whereis prlimit prlimit:在/ usr/bin中/ prlimit /usr/share/man/man2/prlimit.2.gz在/ usr/share/man中/ man1/prlimit.1.g – t2d 2016-08-24 11:05:55

3

下面的命令給打開文件的最大#每個進程默認允許限制(分別爲軟和硬):

ulimit -Sa 
ulimit -Ha 

您可以使用程序或命令來更改這些限制。看看ulimit(man ulimit)。