星期日, 二月 22, 2009

系统中相关的限制(Limit)

限制

某些应用程序需要设置可打开最大文件和 socket 数量(像代理服务器,数据库)。 默认限制通常很低。
1.Linux
每 shell/脚本
shell 的限制是受ulimit 支配的。使用ulimit -a 可查看其状态信息。举个例子,改变可打开最大文件数从
1024 到 10240,可以这么做:
# ulimit -n 10240                 # 这只在shell中有用
ulimit 命令可以使用在脚本中来更改对此脚本的限制。
每 用户/进程
登录用户和应用程序的限制可以在/etc/security/limits.conf 中配置。举个例子:
# cat /etc/security/limits.conf
* hard nproc 250                 # 限制所有用户进程数
asterisk hard nofile 409600             # 限制应用程序可打开最大文件数

2.系统级

用sysctl来设置内核限制。要使其永久,可以在/etc/sysctl.conf 中进行配置。
# sysctl -a                     # 显示所有系统限制
# sysctl fs.file-max                 # 显示系统最大文件打开数
# sysctl fs.file-max=102400             # 更改系统最大文件打开数
# cat /etc/sysctl.conf
fs.file-max=102400                 # 在 sysctl.conf 中的永久项
# cat /proc/sys/fs/file-nr             # 在使用的文件句柄数

3.FreeBSD
每 shell/脚本
在 csh 或 tcsh 中使用limits 命令,在 sh 或 bash 中使用ulimit 命令。
每 用户/进程
在/etc/login.conf 中配置登录后的默认限制。未作限制的值为系统最大限制值。
系统级
内核限制同样使用sysctl 来设置。永久配置,在/etc/sysctl.conf 或/boot/loader.conf 中。其语法与
Linux 相同,只是键值不同。
# sysctl -a                     # 显示所有系统限制
# sysctl kern.maxfiles=XXXX             # 最大文件描述符数
kern.ipc.nmbclusters=32768             # 在 /etc/sysctl.conf 中的永久项
kern.maxfiles=65536                 # Squid4 通常用这个值
kern.maxfilesperproc=32768
kern.ipc.somaxconn=8192             # TCP 列队。apache/sendmail 最好用这个值
# sysctl kern.openfiles             # 在使用的文件描述符数
# sysctl kern.ipc.numopensockets         # 已经开启的 socket 数目
详情请看FreeBSD 手册 11章5。
4.Solaris
在/etc/system 中的下列设置,会提高每个进程可以打开最大文件描述符的数量:
set rlim_fd_max = 4096                 # 一个进程可以打开文件描述符的"硬"限制
set rlim_fd_cur = 1024                 # 一个进程可以打开文件描述符的"软"限制

0 评论: