2010-09-17 93 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)。