限制类型
硬限制:硬限制(/etc/system 参数 rlim_fd_max 或者资源控制的特权级别 process.max-file-descriptor )是系统管理员设置的每个进程最大打开文件数的限制。
它意味着是系统上(使用 rlim_fd_max 时)或者项目中(使用资源控制时)运行的所有进程的上限。
任何用户都可以降低硬限制但不能增加它。软限制:任何用户都可以设置软限制(/etc/system 参数 rlim_fd_cur 或者资源控制的基本级别 process.max-file-descriptor ),直到硬限制。
注意:每个 Solaris 系统的打开文件数没有限制。
可在 Solaris 10 及更高版本上打开的文件数仅受可用内存量的限制。
每个进程打开文件的最大限制可以通过设置硬限制和/或者软限制来限制。
硬限制可以由系统管理员设置,任何用户都可以减少,而软限制可以由任何用户设置,直到硬限制。
本文档描述了 Solaris 10 和 Solaris 11 中可用的各种方法,用于设置每个进程的最大打开文件数限制。
验证限制
以下命令可用于检查正在运行的进程的最大打开文件数限制的值(同样,在所有示例中,13179 用于进程 ID):
prctl 命令:
# prctl -n process.max-file-descriptor 13179 process: 13179: sleep 1200 NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT process.max-file-descriptor basic 256 - deny 13179 privileged 65.5K - deny system 2.15G max deny
plimit 命令:
# plimit 13179 13179: sleep 1200 resource current maximum time(seconds) unlimited unlimited file(blocks) unlimited unlimited data(kbytes) unlimited unlimited stack(kbytes) 10240 unlimited coredump(blocks) unlimited unlimited nofiles(descriptors) 256 65536 vmemory(kbytes) unlimited unlimited
pfiles 命令:
# pfiles 13179 13179: sleep 1200 Current rlimit: 256 file descriptors 0: S_IFCHR mode:0620 dev:542,0 ino:500877638 uid:60004 gid:7 rdev:133,1 O_RDWR /dev/pts/1 offset:38001 1: S_IFCHR mode:0620 dev:542,0 ino:500877638 uid:60004 gid:7 rdev:133,1 O_RDWR /dev/pts/1 offset:38001 2: S_IFCHR mode:0620 dev:542,0 ino:500877638 uid:60004 gid:7 rdev:133,1 O_RDWR /dev/pts/1 offset:38001
设置限制
1.方法1(已弃用):/etc/system中的参数rlim_fd_cur
参数 rlim_fd_cur 可以设置为 rlim_fd_max 的值(默认为 65536 ,也可以在 /etc/system 中设置为不同的值)。
在 Solaris 10 和 Solaris 11 中不再推荐这种设置文件描述符限制的方法。
通常,建议使用资源控制来支持可用的 /etc/system 参数。
2.方法二:资源控制process.max-file-descriptor
通过使用资源控制 process.max-file-descriptor 而不是 /etc/system 参数 rlim_fd_max,系统管理员可以在系统保持运行时更改每个进程的最大打开文件数的值,而无需重新启动服务器。
另一个优点是不影响其他项目的进程。
要将项目 PRJ 的硬限制从默认的 65536 更改为 4096,请使用以下命令:
# projmod -s -K "process.max-file-descriptor=(priv,4096,deny)" PRJ
要将项目 PRJ 的软限制从默认的 256 更改为 1024,请使用以下命令:
# projmod -s -K "process.max-file-descriptor=(basic,1024,deny) PRJ
3.方法3:limit/ulimit命令
还可以使用 limit 或者 ulimit 命令设置每个进程的最大打开文件数限制,最高可达 /etc/system 中设置的硬限制或者 process.max-file-descriptor 的 priv 级别。
该限制是为 shell 和在该 shell 中执行的所有命令设置的,即使为该用户定义了具有资源控制 process.max-file-descriptor 的项目。
a)
设置软限制
要将 csh 中的软限制从默认的 128 增加到 512,请使用以下命令:
# limit descriptors 512
要将 ksh 或者 sh 中的软限制从默认的 128 增加到 512,请使用以下命令:
# ulimit -Sn 512
湾设置硬限制
要将 csh 中的硬限制从默认的 65536 减少到 4096,请使用以下命令:
# limit -h descriptors 4096
要将 ksh 或者 sh 中的硬限制从默认的 65536 减少到 4096,请使用以下命令:
# ulimit -Hn 4096
4.方法四:plimit命令
plimit 命令可用于设置已运行进程的最大打开文件数的限制。
例如,以下命令会将进程 13179 的软限制设置为 2048,将硬限制设置为 4096:
# plimit -n 2048,4096 13179