Linux如何修改最大文件描述符

目录

1、单个进程文件句柄限制

2、整个系统内核文件句柄限制

3、注意


Linux修改最大打开文件句柄数方法

1、单个进程文件句柄限制

1.1 查看单个进程能打开的最大文件句柄数

bash 复制代码
ulimit -n

1.2 临时修改

bash 复制代码
ulimit -n 1000000

在当前session有效,用户退出或者系统重新后恢复默认值

1.3 修改单个进程能打开的最大文件句柄数(永久生效)

bash 复制代码
vim /etc/security/limits.conf
复制代码
# 在文件末尾增加如下内容:
# * 表示当前用户,soft表示到达此限制时系统警告,hard到达此限制时系统报错,nofile表示打开的最大文件数,1000000表示值
# 整体的含义就是:任何用户一个进程最多能打开100w个文件句柄
bash 复制代码
* soft nofile 204800
* hard nofile 204800

修改后再使用ulimit -n查看发现文件句柄数没变,需要重启机器生效。

如果修改后没有生效,可通过修改nr_open参数接触限制

bash 复制代码
sysctl -w fs.nr_open=204800

或者

bash 复制代码
vim /etc/sysctl.conf
复制代码
# 在文件末尾添加如下内容
bash 复制代码
fs.nr_open=204800   

2、整个系统内核文件句柄限制

2.1 查看系统文件句柄数量

bash 复制代码
cat /proc/sys/fs/file-max

2.2 方式一:临时修改,系统重启后恢复默认

bash 复制代码
echo 1000000 > /proc/sys/fs/file-max

或者

bash 复制代码
sysctl -w fs.file-max=1000000

2.3 方式二:修改整个系统内核最大可以打开的文件描述符数量(永久修改)

bash 复制代码
vim /etc/sysctl.conf
复制代码
# 在文件末尾添加如下内容
bash 复制代码
fs.file-max=1000000

执行命令生效

bash 复制代码
sysctl -p

2.4 查看文件句柄数量使用的情况

bash 复制代码
watch -n 1 cat /proc/sys/fs/file-nr

2.5 查看打开文件句柄数量进程的情况

bash 复制代码
lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more

注:返回结果中第一列是打开文件的句柄数量,第二列是PID进程号。

2.6 查询PID对应的进程信息

bash 复制代码
ps aux|grep [$PID]

3、注意

3.1 ubuntu系统下,* soft nofile 65535 无用,必须指定用户

bash 复制代码
vim /etc/systemd/system.conf        #modify hard limit
DefaultLimitNOFILE=65536
vim /etc/systemd/user.conf          #modify soft limit
DefaultLimitNOFILE=65536
reboot

设置登录自动读取限制参数 修改文件,在文件中添加如下行

bash 复制代码
vim /etc/pam.d/login    #在文件中添加如下行
session required /lib/security/pam_limits.so

注:这是告诉Linux在用户完成系统登录后,应该调用pam_limits.so模块来设置系统对该用户可使用的各种资源数量的最大限制(包括用户可打开的最大文件数限制),而pam_limits.so模块就会从/etc/security/limits.conf文件中读取配置来设置这些限制值。修改完后保存此文件。

3.2 要修改容器的ulimit限制,必须要修改宿主机的ulimit

修改容器的最大文件描述符限制通常需要修改宿主机的配置。容器是在宿主机上运行的,它们共享宿主机的资源,包括文件描述符限制。因此,如果要增加或修改容器的最大文件描述符限制,需要在宿主机上进行相应的配置更改。

具体来说,可以通过修改宿主机的配置文件来调整文件描述符限制。在Linux系统中,可以通过修改/etc/security/limits.conf文件来设置文件描述符限制。在该文件中,可以指定每个用户或用户组的最大文件描述符数量。

需要注意的是,修改宿主机的配置可能会影响到其他正在运行的容器或系统进程,因此在进行修改之前,请确保了解修改的影响,并谨慎操作。

要修改容器的最大文件描述符,可以通过以下步骤进行操作:

  1. 进入容器:使用docker exec命令进入正在运行的容器。例如:docker exec -it <container_id> /bin/bash

  2. 查看当前的最大文件描述符限制:在容器内部运行ulimit -n命令,可以查看当前的最大文件描述符限制。

  3. 修改最大文件描述符限制:可以通过修改容器的ulimit值来增加最大文件描述符限制。使用ulimit -n <new_limit>命令来设置新的限制值。注意,这个操作需要在具有足够权限的用户下进行。

  4. 验证修改是否生效:再次运行ulimit -n命令,确认新的最大文件描述符限制已经生效。

相关推荐
aichitang20245 分钟前
AI Agent 终端与系统级自动化深度指南
运维·人工智能·自动化
花间相见11 分钟前
【Ubuntu实用工具】—— 高颜值实用ls命令工具lsd
linux·运维·ubuntu
gergul15 分钟前
python venv虚拟环境复制
linux·开发语言·python
the sun3422 分钟前
共享文件夹设置:让Windows和Ubuntu能方便的传输文件
linux·windows·ubuntu
虎头金猫24 分钟前
监控机不在被监控的机器上,Prometheus怎么跨网络把数据拉过来
运维·服务器·开发语言·网络·云原生·开源·prometheus
dingdingfish31 分钟前
TLPI 第17章 练习:Access Control Lists
linux·tlpi·exercise
枳实-叶39 分钟前
【Linux驱动开发】第5天:字符设备驱动核心原理:主次设备号+cdev+数据拷贝全解
linux·运维·驱动开发
七夜zippoe1 小时前
OpenClaw memory_search:语义搜索实战
服务器·网络·memory·语义搜索·openclaw
南境十里·墨染春水1 小时前
linux 学习进展 网络编程 ——HTTP 协议详解
linux·网络·学习
深邃-1 小时前
【Web安全】-云服务器与Docker(2):Docker镜像操作,Docker容器操作,Docker搭建漏洞靶场
linux·服务器·web安全·网络安全·docker