为了增加在 Ubuntu Linux 机器上无头用户下运行的守护进程的 FD 限制,我们在 /etc/security/limits.conf 中进行了以下更改
soft nofile 10000
hard nofile 10000
Run Code Online (Sandbox Code Playgroud)
我们还在 /etc/pam.d/login 中添加了会话所需的 pam_limits.so。所有注销并再次登录的用户都会反映这些更改。在这些用户下启动的任何新流程都将获得新的 FD 限制。
但是对于在无头用户下运行的守护程序,更改没有得到反映。对于在无头用户下运行的守护程序,可以通过什么方式反映更改?
我在/etc/security/limits.conf(CentOS 6.2) 中设置了以下值(-1 将被解析为无限制,我想)
root nofile soft -1
root nofile hard -1
我现在无法使用 root 用户登录。类似于这里描述的问题。将值设置回将解决问题。
谁能帮忙解释一下?
更新:
谢谢你们。我记错了我的设置。这些值应该是
root soft nofile -1
root hard nofile -1
Run Code Online (Sandbox Code Playgroud) 我正在从事的项目之一是将某些人偶应用的ulimit设置从“听起来不错”转移到基于环境动态分配的设置。这是针对单应用程序环境的,所以我最担心的是防止应用程序资源匮乏,同时将内核和实用程序空间保持在足够的句柄中,以及不做他们应该做的事情。
我们从应用程序团队收到了对moar 文件句柄的持续请求!所以我试图找到一种方法来解决这个问题。所以我做了一个傀儡事实:
Facter.add('app2_nofile') do
confine :kernel => 'Linux'
setcode do
kernel_nofile = `/bin/cat /proc/sys/fs/file-max`.chomp
app2_limit = (kernel_nofile.to_i * 0.85).round
app2_limit
end
end
Run Code Online (Sandbox Code Playgroud)
它做它在锡上所说的。它采用中定义的内核值/proc/sys/fs/file-max并占用其中的 85%,留出 15% 用于系统使用。::app2_nofile在另一个 puppet 资源中使用这个事实设置一个软和硬 nofile ulimit ,所以 /etc/security/limits.conf 被更新,tada!简单的!如果他们想要更多的文件句柄,他们就必须更聪明地编写应用程序。
除了,它没有工作。尝试su app2_user -与具有该nofileulimit的用户打开用户会话 ( ) 时,我们收到错误消息:
无法打开会话
这是不好的。
显然,有一个独立于简单 ulimit 的上限。或者也许我正在理解它们的基本工作原理。nofile限制如何相互交互,什么会导致无法创建会话?
进一步的测试表明,上限可能是一个静态边界,或者比简单的百分比更复杂。文件最大值为 797,567 的小型 RAM 系统可以将此 ulimit 设置得非常高,我将无法复制。在具有 1,619,938 的更大系统上,我可以在出现“无法打开会话”之前将该 ulimit 设置为大约 63%。我现在没有任何更大的东西可以测试,看看这个百分比是否随着更大的 RAM 移动。
我确实得到了一个 audit.log 条目: …
当我执行 ulimit -n 时,我得到了 256,我认为这意味着我可以同时打开 256 个文件。这是否意味着我可以在一个会话中打开 256 个文件?还是所有会议?
例如,我使用用户名“abc”(通过 putty/ssh)登录到我的服务器,并打开 200 个文件,会话仍在运行,我再次使用相同的用户名“abc”(通过 putty/ssh)登录到同一台服务器),我只能再打开 56 个文件?或者我可以再打开 256 个文件?
最后,这个限制是否也限制了 http 连接的数量?例如,在上面的例子中,我打开了 200 个文件,然后我使用“wget”或“curl”来建立 http 连接。
谢谢
我在/etc/security/limits.conf下面设置了一些值:
* hard stack 204800
* hard nofile 8192
Run Code Online (Sandbox Code Playgroud)
然后重启了服务器。我也删除了文件/etc/security/limits.d/90-nproc.conf
但是,该ulimit命令仍会列出一些旧的/默认值:
# ulimit -s
10240
# ulimit -n
1024
Run Code Online (Sandbox Code Playgroud)
我跑步 RHEL 6.2 64-bit
这里有什么问题?我的语法limits.conf错了吗?为什么在服务器重启后它不尊重limits.conf值?
顺便说一句,我之前已经在超级用户上发布了这个问题,但没有获得成功,所以在 serverfault 上试试我的运气。
我有一个编码错误的无限循环程序,我想在命令行上运行它 - 但不是永远。我想使用 ulimit 所以如果它永远循环,它就会被切断。
我想:
$> bash -c "ulimit -t 1; java myinfloopprogram"
Run Code Online (Sandbox Code Playgroud)
但就好像什么都没发生一样。这是怎么回事,是我的命令行命令错误吗?myinfloopprogram 运行得很好。
我正在运行一个终端,版本是 Ubuntu 9.10 。
我的团队最近在我们的 Apache 服务器上遇到了 ulimit 设置过低的问题。我们谈到将限制增加到某个任意数字,但我们想不出任何理由不只是将其全局设置为无限制。
有什么好的理由不这样做吗?
我们意识到可以使用更多资源,但处理资源使用可能比处理应用程序崩溃或“fd 不足”问题更容易。