linux 调优--修改文件最大句柄数

本文介绍如何在Linux系统中调整文件句柄数限制。包括使用ulimit命令临时调整及通过配置文件永久设置的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在linux服务器调优时,经常需要调优linux参数,以下是针对句柄数调优的相关说明:

首先查看下系统的句柄是多少,用ulimit -a 命令查看

[root@hu_wen ~]# 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) 256324
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) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 256324
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

linux默认最大文件句柄数是1024个。
在文件并发量比较大的情况下,这个数就不够用了,接下来我们调整最大的句柄数

1、ulimit -n 2048

这样可以修改linux最大文件句柄数,但是这种方法只针对当前进程有效。
重新打开一个会话或者开启一个进程就会恢复原来的句柄数
[root@mongodb11 ~]# ulimit -n 2048
[root@mongodb11 ~]# 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) 256324
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 2048
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 256324
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
可以用以下方法固化句柄数

2、修改linux系统参数:vi /etc/security/limits.conf

/etc/security/limits.d/90-nproc.conf


*  soft  nofile  65536

*  hard  nofile  65536

修改完重新登录参数就生效了

[root@localhost ~]# 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) 256600
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 256600
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
<think>嗯,用户让我介绍一下Linux,我得先理清楚思路。首先,用户可能是系统管理员或者开发人员,遇到性能问题需要化系统。也可能是个刚接触Linux的新手,想了解的基本方法。需要从基础开始,分步骤讲解,确保结构清晰。 首先得确定的目标,比如是CPU、内存、磁盘还是网络。不同的瓶颈需要不同的化策略。然后要考虑监控工具,比如top、vmstat、iostat这些,用户需要知道如何诊断问题。 接下来分模块处理。CPU方面,进程先级、度策略这些是关键。内存部分得讲清楚swappiness、页缓存和透明大页。磁盘I/O涉及度算法和文件系统化,比如ext4的整。网络方面,TCP参数和连接数限制很重要。 系统参数设置,比如文件句柄数和内核参数整,可能需要修改sysctl.conf或者使用sysctl命令。应用程序本身的化也不能忽视,毕竟系统只是基础。 还要注意安全性和稳定性,不能一味追求性能而忽略其他因素。最后,测试和监控是验证效果的关键步骤,需要引导用户进行基准测试和持续监控。 得检查一下有没有遗漏的部分,比如是否提到了具体的命令和配置文件路径,确保用户能跟着操作。另外,要避免使用专业术语过多,用易懂的中文解释概念。最后提醒用户是一个渐进过程,不能急功近利,得根据实际情况整。</think>Linux系统是一项系统工程,需要根据硬件配置和应用场景进行针对性化。以下是分步骤的指南: 一、性能分析(先诊断后化) 1. 实时监控工具 $$ top \quad (CPU/内存) $$ $$ iostat -x 1 \quad (磁盘I/O) $$ $$ vmstat 1 \quad (虚拟内存) $$ $$ netstat -s \quad (网络统计) $$ 2. 性能基准测试 ```bash sysbench --test=cpu run fio --filename=/tmp/testfile --size=1G --rw=randread ``` 二、子系统 1. CPU- 整进程先级:`nice -n -20 [command]` - 修改度策略:`chrt -f 1 [command]` - 关闭不需要的中断:`irqbalance` 2. 内存化 ```bash # 整swappiness sysctl vm.swappiness=10 # 透明大页设置 echo never > /sys/kernel/mm/transparent_hugepage/enabled ``` 3. 磁盘I/O化 ```bash # 修改I/O度器(SSD推荐none) echo deadline > /sys/block/sda/queue/scheduler # 整预读值 blockdev --setra 256 /dev/sda ``` 4. 网络化 ```bash # 增大TCP缓冲区 sysctl -w net.core.rmem_max=16777216 sysctl -w net.core.wmem_max=16777216 # 快速回收TIME_WAIT连接 sysctl -w net.ipv4.tcp_tw_recycle=1 ``` 三、系统参数 1. 文件句柄限制 ```bash # /etc/security/limits.conf * soft nofile 65535 * hard nofile 65535 ``` 2. 内核参数化 ```bash # /etc/sysctl.conf net.ipv4.tcp_syncookies = 1 fs.file-max = 65535 kernel.shmall = 4294967296 ``` 四、应用层化 1. Web服务器(以Nginx为例) ```nginx worker_processes auto; worker_connections 10240; sendfile on; tcp_nopush on; ``` 2. 数据库化(MySQL示例) ```ini [mysqld] innodb_buffer_pool_size=4G query_cache_type=1 thread_cache_size=64 ``` 五、安全与稳定性保障 1. 定期更新内核:`yum update kernel` 2. 使用cgroups限制资源 ```bash cgcreate -g cpu,memory:/myapp cgset -r cpu.shares=512 myapp ``` 3. 开启OOM Killer保护 ```bash sysctl vm.panic_on_oom=1 sysctl kernel.panic=5 ``` 注意事项: 1. 每次只修改一个参数并记录变更 2. 使用`sysctl -p`使配置生效 3. 定期执行`dmesg | grep error`检查硬件错误 4. 重要生产环境建议先在测试环境验证 最终建议结合`perf`工具进行深度分析: $$ perf record -a -g -- sleep 60 $$ $$ perf report --stdio $$ 是一个持续改进的过程,需要根据实际负载变化动态整。建议建立性能基准,使用Prometheus+Grafana等工具进行长期监控。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值