linux – 实用的ulimits

前端之家收集整理的这篇文章主要介绍了linux – 实用的ulimits前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究的一个项目是将某些木偶应用的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

它在锡上说的是什么.它采用/ proc / sys / fs / file-max中定义的内核值,占85%,系统使用率为15%.在另一个puppet资源中使用这个:: app2_nofile事实设置一个软硬的nofile ulimit,以便/etc/security/limits.conf更新,并且tada!简单!如果他们想要更多的文件句柄,他们必须更聪明地编写应用程序.

除外,它没有用.尝试使用具有该nofile ulimit的用户打开用户会话(su app2_user – )时,我们收到错误消息:

Could not open session

这很糟糕.

显然,有一个独立于简单ulimits的上限.或者也许我正在理解他们从根本上如何运作. nofile限制如何相互影响,以及什么会导致会话无法创建?

进一步的测试表明,上限可能是静态边界,或者比简单的百分比更复杂.文件最大值为797,567的小型RAM系统可以将此ulimit设置得非常高,我将无法再现.在一个拥有1,619,938的大型系统上,我可以将ulimit设置为大约63%,然后才能“无法打开会话”.我现在没有任何更大的东西来测试,看看这个百分比是否随着更大的RAM移动.

我收到了audit.log条目:

type=USER_START msg=audit(1416420909.479:511331): user pid=5022 uid=0 auid=1194876420 ses=44826 
subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 msg='op=PAM:session_open 
acct="app2" exe="/bin/su" hostname=? addr=? terminal=pts/0 res=Failed'

op是PAM操作.

解决方法

这似乎是PAM的一个特征:

https://bugzilla.redhat.com/show_bug.cgi?id=485955

虽然不是决定性因素,但源代码仍然是理所当然的,但强烈暗示PAM正在对某些资源强制实施某种上限.当我在su命令上使用strace来查看它试图做的事情被拒绝时,突然出现了,我看到了这一行:

setrlimit(RLIMIT_NOFILE,{rlim_cur=1049000,rlim_max=1049000}) = -1 EPERM (Operation not permitted)

除了PAM失败之外,audit.log中没有记录任何内容,syslog没有显示任何内容,只是这一次失败.

出于我的目的,我会写出这个事实,以获取静态值的较低值或内核最大文件的85%.我需要做更多的测试来弄清楚静态值是什么,但似乎这种混合方法将更好地得到工具的支持.

原文链接:https://www.f2er.com/linux/399383.html

猜你在找的Linux相关文章