我先解释一下我的理解。
在 Solaris 10 中,rlim_fd_max
并rlim_fd_cur
在/etc/system
系统级别设置硬限制和软限制。
并/etc/security/limits.conf
设定限制login
,对吗?因此,对于用户来说,它会覆盖/etc/system
.如果 中未设置限制/etc/security/limits.conf
,用户将获得 中的值/etc/system
,对吧?
那么,这是/etc/sysctl.conf
为了什么?
在我的 Solaris 10 上,我没有sysctl.conf
, 或limits.conf
。在这种情况下,如何对重启后保留的单个用户设置限制?除了设置它们之外还有其他机制吗profile
?
答案1
不再建议在 Solaris 10 及更高版本中使用参数rlim_fd_cur
和rlim_fd_max
in 。/etc/system
应该使用资源控制process.max-file-descriptor
来代替 System V 进程间通信。优点是不再需要重新启动服务器,您可以使用项目不影响其他进程。
然后,要更改项目的硬限制,user.root
还需要设置权限级别 priv(硬限制),如下命令:
# projmod -s -K "process.max-file-descriptor=(priv,4096,deny)" user.root
要更改项目的软限制,user.other
还需要设置权限级别,例如:
$ projmod -s -K "process.max-file-descriptor=(basic,1024,deny)" user.other
可以在/etc/project
文件中找到项目。
projadd
这是(创建)和projmod
(设置)的示例:
# useradd test
# projadd -c "Test" 'user.test'
# projmod -s -K "project.max-shm-memory=(privileged,6GB,deny)" 'user.test'
# projmod -s -K "process.max-file-descriptor=(basic,1024,deny)" user.test
# cat /etc/project|grep -i test
user.test:101:Test:::process.max-file-descriptor=(basic,1024,deny);project.max-shm-memory=(privileged,6442450944,deny)
#
projadd
并且projmod
是持久的价值观。对于非持久值,您应该使用prctl
命令。
例子:
# prctl -n project.max-shm-memory -v 8gb -r -i project default
# prctl -n project.max-shm-memory -i project default
project: 3: default
NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT
project.max-shm-memory
usage 8.49MB
privileged 8.00GB - deny -
system 16.0EB max deny -
/etc/security/limits.conf
和/etc/sysctl.conf
是 Linux 文件。
limits.conf
在 PAM 模块的用户会话中设置系统资源限制pam_limits
。 --> 这与projmod
.
sysctl.conf
sysctl
是运行时修改内核参数的文件。 --> 这与修改/etc/system
.
如果用户没有限制,则limits.conf
默认值取自: Kernel:init
进程 Inherited: 父进程(厂商配置在/usr/lib/sysctl.d/
) PAM: limits.conf
(可以替换 Kernel 和 Inherited) 进程本身(可以替换 PAM、Kernel 和 Inherited, " getrlimit
, setrlimit
, prlimit
- 获取/设置资源限制")。
limits.conf
和的变化sysctl.conf
是持久的。
要为单个用户设置限制,您必须编辑limits.conf
文件。喜欢:
{account} soft as size (KB)
{account} hard as size (KB)
例子:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
修改 limit.conf 不需要重新启动,但新参数将仅应用于新会话。
如果您想修改正在运行的进程,您应该使用prlimit
.喜欢:
prlimit --pid <pid> --<limit>=<soft>:<hard>
例子:
prlimit --pid 12345 --nofile=1024:2048