linux修改文件句柄数未生效

1.ulimit -a

# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 128599
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 128599
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

2.查看配置文件

#sudo less /etc/security/limits.conf
# End of file
*  soft   nproc   65536 
*  hard   nproc   65536 
*  soft   nofile  65536 
*  hard   nofile  65536 

文档也设置了,但查看后,未生效。

3.设置全系统总限制fs.file-max=655360

# sudo cat /etc/sysctl.conf
# sysctl settings are defined through files in
# /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
#
# Vendors settings live in /usr/lib/sysctl.d/.
# To override a whole file, create a new file with the same in
# /etc/sysctl.d/ and put new settings there. To override
# only specific settings, add a file with a lexically later
# name in /etc/sysctl.d/ and put new settings there.
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.conf.all.accept_redirects=0
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward=1
fs.file-max=655360

4.立即生效

# sudo sysctl -p
net.ipv4.conf.all.accept_redirects = 0
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
fs.file-max = 655360

<think>我们参考用户提供的引用资料来回答如何修改Linux服务器的内核参数和文件句柄数。 根据引用[1]、[2]、[3]、[4]的信息,我们可以总结出以下步骤: 1. 修改文件句柄数(即文件描述符数): - 文件句柄数限制分为用户级和系统级。 - 用户级修改:编辑`/etc/security/limits.conf`文件,添加或修改如下配置: ``` * soft nofile 65535 * hard nofile 65535 ``` 其中,`*`表示所有用户,也可以指定用户名。`soft`是当前生效的值,`hard`是最大可设置的值(注意:普通用户不能超过hard值,且只有root能提高hard值)。 - 系统级修改:编辑`/etc/sysctl.conf`文件,添加或修改: ``` fs.file-max = 65535 ``` 然后执行`sysctl -p`使配置生效。 - 注意:根据引用[3],在`/etc/security/limits.conf`中设置的`nofile`值不能超过`/etc/sysctl.conf`中`fs.nr_open`的值(如果没有设置`fs.nr_open`,则默认值足够大,通常不用修改),否则可能导致无法登录。 2. 修改其他内核参数: - 内核参数可以通过`sysctl`命令临时修改,但永久修改需要编辑`/etc/sysctl.conf`文件,然后执行`sysctl -p`使配置永久生效。 - 例如,根据引用[2],可以修改TCP参数来减少`time_wait`连接: ``` net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_tw_recycle = 1 # 注意:在较新内核中,tcp_tw_recycle已被废弃,使用需谨慎 net.ipv4.tcp_fin_timeout = 30 ``` 然后执行`sysctl -p`生效。 3. 另外,引用[1]还提到了其他一些内核参数的调整,例如: - 最大套接字缓冲区:`net.core.optmem_max` - 最大内存块数:`vm.max_map_count` - 最大线程数:`kernel.threads-max` - 同样,在`/etc/sysctl.conf`中设置后,用`sysctl -p`生效。 4. 修改后,如何查看当前设置? - 查看当前用户的文件句柄数限制:`ulimit -n` - 查看系统级别的文件句柄数限制:`cat /proc/sys/fs/file-max` - 查看其他内核参数:`sysctl <参数名>`,例如:`sysctl net.core.optmem_max` 5. 特别注意: - 修改`/etc/security/limits.conf`后,需要重新登录用户会话才会生效(或者通过`su - username`重新登录)。 - 对于`tcp_tw_recycle`参数,在4.12以后的内核中已经被移除,所以在新版本内核中不应再设置该参数。如果需要复用`TIME_WAIT`状态的套接字,可以设置`tcp_tw_reuse`。 因此,综合以上引用信息,我们可以给出以下详细步骤: 步骤1:修改文件句柄数 a. 修改系统级限制(file-max): 编辑`/etc/sysctl.conf`,添加或修改: fs.file-max = 65535 保存后执行:`sysctl -p` b. 修改用户级限制(nofile): 编辑`/etc/security/limits.conf`,在文件末尾添加: * soft nofile 65535 * hard nofile 65535 注意:如果设置的值大于当前系统`fs.nr_open`的值,需要先修改`fs.nr_open`(在`/etc/sysctl.conf`中设置`fs.nr_open=200000`,然后`sysctl -p`),但一般情况下默认值足够大,不需要修改。 保存后,需要重新登录用户(或重启系统)使配置生效。 步骤2:修改其他内核参数(以优化网络为例) a. 编辑`/etc/sysctl.conf`,添加或修改网络相关参数,例如: net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 # net.ipv4.tcp_tw_recycle = 1 # 在较新内核中已废弃,不建议设置 net.ipv4.tcp_fin_timeout = 30 net.core.optmem_max = 16777216 vm.max_map_count = 262144 kernel.threads-max = 65535 b. 保存后执行:`sysctl -p` 步骤3:验证 a. 文件句柄数:使用`ulimit -n`查看当前用户的限制,使用`cat /proc/sys/fs/file-max`查看系统总限制。 b. 内核参数:使用`sysctl <参数名>`查看,例如:`sysctl net.ipv4.tcp_tw_reuse` 注意:在修改内核参数时,应了解每个参数的含义,避免设置不当导致系统不稳定。 </think>以下是在Linux服务器修改内核参数和文件句柄数的详细步骤,综合引用材料并遵循最佳实践: ### 一、修改内核参数 1. **编辑配置文件** ```bash vi /etc/sysctl.conf ``` 添加或修改参数(示例优化网络性能和资源限制): ```conf # 缩短TIME_WAIT连接回收时间 net.ipv4.tcp_fin_timeout = 30 # 启用TIME_WAIT连接复用 net.ipv4.tcp_tw_reuse = 1 # 增大套接字缓冲区 net.core.optmem_max = 16777216 # 增加系统最大文件描述符数 fs.file-max = 65535 # 增加内存映射区域上限 vm.max_map_count = 262144 ``` 2. **立即生效配置** ```bash sysctl -p # 加载/etc/sysctl.conf中的设置[^2] ``` ### 二、修改文件句柄数文件描述符) #### 方法1:临时修改(重启失效) ```bash ulimit -n 65535 # 设置当前会话限制[^1] ``` #### 方法2:永久修改(需两步操作) 1. **修改系统全局限制** 编辑`/etc/sysctl.conf`: ```conf fs.file-max = 65535 # 系统级总限制[^1][^3] ``` 2. **修改用户级限制** 编辑`/etc/security/limits.conf`: ```conf * soft nofile 65535 # 软限制 * hard nofile 65535 # 硬限制[^3][^4] ``` > 📌 注意: > - 硬限制是软限制的上限,普通用户只能降低硬限制[^4] > - 设置值**必须小于**`fs.nr_open`(默认1048576),否则会导致SSH无法登录[^3] 3. **生效配置** ```bash sysctl -p # 重新加载sysctl配置 reboot # 或重新登录用户会话 ``` ### 三、关键验证命令 ```bash # 查看当前文件句柄限制 ulimit -n # 查看系统总文件句柄数 cat /proc/sys/fs/file-max # 检查内核参数值 sysctl net.ipv4.tcp_fin_timeout ``` ### 注意事项 1. **参数兼容性**: 避免使用废弃参数如`net.ipv4.tcp_tw_recycle`(可能引起NAT问题)[^2] 2. **权限要求**: 修改`limits.conf`和`sysctl.conf`需root权限 3. **生产环境建议**: - 先通过`ulimit -n`临时修改测试 - 修改后监控`ss -s`和`cat /proc/sys/fs/file-nr`确认效果 > 通过上述配置,可显著提升服务器的网络吞吐量和并发处理能力[^1][^2]。实际值需根据业务负载调整,避免过度分配资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值