Linux修改最大文件句柄数及常用内核参数优化

1、临时生效


# ulimit -SHn 10000


其实ulimit 命令身是分软限制和硬限制,加-H就是硬限制,加-S就是软限制。默认显示的是软限制,如果运行ulimit 命令修改时没有加上-H或-S,就是两个参数一起改变。


软限制和硬限制的区别?


硬限制就是实际的限制,而软限制是警告限制,它只会给出警告。


2、永久生效


要想ulimits 的数值永久生效,必须修改配置文件/etc/security/limits.conf

在该配置文件中添加

* soft nofile 204800  

* hard nofile 204800


* soft nproc 204800

* hard nproc 204800 


echo "* soft nofile 204800"  >> /etc/security/limits.conf

echo "* hard nofile 204800"  >> /etc/security/limits.conf


echo "* soft nproc 204800"  >> /etc/security/limits.conf

echo "* hard nproc 204800 "  >> /etc/security/limits.conf


* 表示所用的用户


3、修改系统总限制


其实上面的修改都是对一个进程打开的文件句柄数量的限制,我们还需要设置系统的总限制才可以。


假如,我们设置进程打开的文件句柄数是1024 ,但是系统总限制才500,所以所有进程最多能打开文件句柄数量500。从这里我们可以看出只设置进程的打开文件句柄的数量是不行的。所以需要修改系统的总限制才可以。


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


上面是临时生效方法,重启机器后会失效;


永久生效方法:


修改 /etc/sysctl.conf, 加入


echo   fs.file-max = 6553560  >> /etc/sysctl.conf


重启生效


原文:https://blog.csdn.net/saga_gallon/article/details/80305515 


总结:

  • /proc/sys/fs/file-max限制不了/etc/security/limits.conf

  • 只有root用户才有权限修改/etc/security/limits.conf

  • 对于非root用户, /etc/security/limits.conf会限制ulimit -n,但是限制不了root用户

  • 对于非root用户,ulimit -n只能越设置越小,root用户则无限制

  • 任何用户对ulimit -n的修改只在当前环境有效,退出后失效,重新登录新来后,ulimit -n由limits.conf决定

  • 如果limits.conf没有做设定,则默认值是1024

  • 当前环境的用户所有进程能打开的最大问价数量由ulimit -n决定



补充:

更改普通用户最大进程数,立即生效,centos6系统:

[root@chegva resin]#cat /etc/security/limits.d/90-nproc.conf

*          soft    nproc     102400

centos7系统:

[root@chegva ~]# cat /etc/security/limits.d/20-nproc.conf

*          soft    nproc     4096

root       soft    nproc     unlimited

# 查找进程的最大句柄数限制

[root@chegva ~]# cat /proc/19736/limits  |grep 'files'

Max open files            3002400              3002400              files

# 查看当前进程打开的文件句柄数

[root@chegva ~]# ls /proc/19736/fd |wc -l

28

# 查看某个进程打开的文件数

[root@chegva ~]# lsof -p 9395 |wc -l

41

查看所有进程的文件打开数

[root@chegva ~]# lsof |wc -l

294478


1.常用内核参数的修改

动态修改:修改/proc/下配置的值,重启系统后会恢复原样

echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
sysctl -w net.ipv4.icmp_echo_ignore_all = 0

# sysctl -a |grep mem
net.ipv4.tcp_mem = 94500000 915000000 927000000 #整个系统tcp缓冲区(单位:页)
net.ipv4.tcp_rmem = 4096 87380 4194304 #tcp接收队列缓冲区(单位字节):最小值、平均值、最大值(8388608)
net.ipv4.tcp_wmem = 4096 16384 4194304 #tcp发送队列缓冲区

net.ipv4.tcp_max_syn_backlog = 16384 #syn缓冲队列,一般调成并发连接数的3倍左右
net.ipv4.tcp_syn_retries = 2 #syn重试次数,减少syn攻击
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syncookies = 1 #当syn等待队列溢出时,启用cookies来处理

  • 内存参数:共享内存/proc/sys/kernel/shmsysctl -a | grep shm

    kernel.shmmni = 4096 可用最大共享内存段
    kernel.shmall = 18446744073692774399 可以使用的所有内存(单位为页,默认1页是4096字节)
    kernel.shmmax = 18446744073692774399 一个共享内存段中内存最大使用容量

  • 信号量优化:sysctl -a |grep sem

    # 一个系统有多个信号量集合,一个集合有多个信号量(集合数、可用信号量、每个信号量可用操作数、每个集合的信号量) ,当集合数乘每个集合的信号量大于可用信号量时取大值
    # SEMMSL SEMMNS SEMOPM SEMMNI
    kernel.sem = 250 32000 32 128
    # 大型应用系统建议设置每个信号量可用操作数<=每个集合的信号量
    kernel.sem = 250 32000 128 128

  • 文件句柄:当系统使用的句柄数已经接近最大可使用数,则需成倍增大最大句柄可使用数

    # 查看最大句柄数
    cat /proc/sys/fs/file-max
    1000000
    # 查看当前句柄使用数
    cat /proc/sys/fs/file-nr
    1536(系统初始化的句柄数) 0(系统已经使用的句柄数) 1000000(最大可使用数)

  • TCP连接优化

  • 缓冲区队列

内核参数优化

永久修改:修改/etc/sysctl.conf配置文件里的值


参考:


anzhihe安志合个人博客,版权所有丨 如未注明,均为原创 丨转载请注明转自:https://chegva.com/3148.html | ☆★★每天进步一点点,加油!★★☆

您可能还感兴趣的文章!

发表评论

电子邮件地址不会被公开。 必填项已用*标注