设置ulimit值(Linux文件句柄数量)永久生效

设置ulimit值(Linux文件句柄数量)永久生效


inux 默认打开文件数linux 默认打开文件数为1024个,通过ulimit -a 可以查看open files

修改这个限制可以使用ulimt -SHn 65536

永久生效需要进行下面设置:

1. /etc/pam.d/login 添加pam_limits.so (有时候系统默认添加)

首先要通过find / -name pam_limits.so 查找文件的具体的位置

session required /lib/security/pam_limits.so

 

2. /etc/security/limits.conf 添加

www - nofile 1006154

www 是一个用户,如果是想所有用户生效的话换成 * ,设置的数值与硬件配置有关,别设置太大了。

* soft nofile 65536

* hard nofile 65536

3. 修改 /etc/rc.local 添加

echo 8061540 > /proc/sys/fs/file-max

(此处的数据按照您实际需要调节)


此法解决的实际问题是:在高负载下squid,mysql 会发生 打开的文件数超过系统的进程限制,造成系统瓶颈。

 

http://blog.sina.com.cn/s/blog_520fb00d0100hnso.html

<think>嗯,用户现在想了解Linux系统中关于文件句柄数的内核参数配置方法和限制,包括ulimit和sysctl。之前他们提到了tcp_syn_retries的问题,现在转向了文件句柄数,这可能是因为他们在实际应用中遇到了文件打开数过多的问题,比如高并发服务器场景。 首先,我需要回忆一下文件句柄数相关的参数。用户提到了三个引用,其中引用[1]和[2]讨论了如何修改系统级和进程级的文件句柄限制。引用[3]提到了TIME_WAIT套接字的问题,但用户现在的问题是关于文件句柄数,所以可能需要将重点放在前两个引用上。 用户的问题包括内核参数配置方法、限制,以及ulimit和sysctl的使用。我需要分层次回答,先解释文件句柄数的两个层级:系统级和用户进程级。系统级参数如file-max和nr_open,而用户进程级涉及ulimit的nofile设置。 需要指出系统级限制由sysctl管理,如/etc/sysctl.conf中的fs.file-max和fs.nr_open。用户级限制通过ulimit或/etc/security/limits.conf来设置。同时要说明这两者的关系,比如用户级限制不能超过系统级限制,否则无效。 用户可能遇到的常见问题包括“Too many open files”错误,这时需要同时调整系统级和用户级限制。需要给出具体的配置步骤,比如修改sysctl.conf后执行sysctl -p,以及修改limits.conf后重新登录或使用ulimit -n查看。 另外,用户可能需要验证配置是否生效,可以通过cat /proc/sys/fs/file-max和ulimit -n来检查当前。还要注意nr_open和file-max的区别,nr_open是单个进程的最大限制,而file-max是整个系统的限制。 最后,用户可能关心优化建议,比如高并发服务器需要调高这些参数,同时注意内核内存的消耗。需要确保回答覆盖了配置方法、验证步骤、常见问题解决和优化建议,结构清晰,步骤明确。</think>### Linux 文件句柄数内核参数配置指南 Linux 文件句柄数限制分为**系统级**和**用户进程级**,需通过 `sysctl`(系统内核参数)和 `ulimit`(用户级资源限制)协同配置。以下是具体方法及限制解析: --- #### 一、系统级限制(`sysctl` 参数) 1. **全局文件句柄上限 `fs.file-max`** - **作用**:控制整个系统可分配的最大文件句柄数(包括所有进程、套接字等)。 - **配置方法**: ```bash # 临时生效(重启失效) echo 655350 > /proc/sys/fs/file-max # 永久生效(需写入配置文件) echo "fs.file-max = 655350" >> /etc/sysctl.conf sysctl -p # 加载配置 ``` - **验证**: ```bash cat /proc/sys/fs/file-max ``` 2. **单进程文件句柄上限 `fs.nr_open`** - **作用**:限制单个进程能打开的最大文件句柄数(需大于用户级 `ulimit` 设置)。 - **配置方法**: ```bash echo "fs.nr_open = 4000000" >> /etc/sysctl.conf sysctl -p ``` --- #### 二、用户进程级限制(`ulimit` 参数) 1. **用户会话级限制 `nofile`** - **作用**:限制当前用户会话中进程的文件句柄数(默认通常为 1024)。 - **临时修改**: ```bash ulimit -n 65535 # 仅对当前会话有效 ``` - **永久修改**(需编辑 `/etc/security/limits.conf`): ```bash # 添加以下内容(以用户 root 为例) root soft nofile 65535 root hard nofile 65535 ``` - **验证**: ```bash ulimit -n # 查看当前会话限制 ``` --- #### 三、关键限制关系与优先级 - **层级关系**: $$ \text{进程实际限制} \leq \text{用户级限制(ulimit)} \leq \text{系统级限制(fs.nr_open)} \leq \text{全局限制(fs.file-max)} $$ 若用户级 `ulimit` 设置超过 `fs.nr_open`,实际以 `fs.nr_open` 为准[^2]。 - **常见问题**: - **错误提示**:`Too many open files` **原因**:进程打开文件数超过 `ulimit` 或系统级限制。需同时调整用户级和系统级参数。 - **孤儿文件句柄**:通过 `lsof | grep deleted` 可查看未释放的已删除文件句柄。 --- #### 四、优化建议 1. **高并发场景**: - 提升 `fs.file-max` 至百万级(如 `1048576`); - 设置 `fs.nr_open` 大于用户级 `ulimit`(如 `fs.nr_open=4000000`)。 2. **内核内存调整**: 文件句柄占用内核内存,过高可能导致内存压力,需结合 `vm.max_map_count` 等参数优化[^3]。 --- ### 验证与调试命令 | 命令 | 用途 | |------|------| | `cat /proc/sys/fs/file-nr` | 查看当前已分配/使用/最大文件句柄数 | | `lsof | wc -l` | 统计系统当前打开的文件句柄总数 | | `sysctl fs.file-max fs.nr_open` | 检查系统级参数配置 | --- ### 相关问题 1. 如何排查 Linux 系统文件句柄泄漏问题? 2. `fs.file-max` 和 `fs.nr_open` 的具体区别是什么? 3. 如何为 Docker 容器单独配置文件句柄限制? 通过上述配置,可有效管理系统文件句柄资源,避免因句柄耗尽导致的服务异常[^1][^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值