Linux打开最大文件数限制

关于对 /etc/profile、/etc/security/limits.conf、/etc/sysctl.conf 三个配置文件的理解。

1、/etc/profile

2、/etc/security/limits.conf(用户进程级别的设置)

3、/etc/sysctl.conf (系统级别的设置)

1、/etc/profile

大部分用户环境变量配置都设置在这个配置文件

登入系统读取步骤:

当登入系统时候获得一个shell进程时,其读取环境设定档有三步 :

1.首先读入的是全局环境变量设定档/etc/profile,然后根据其内容读取额外的设定的文档,如 /etc/profile.d和/etc/inputrc

2.然后根据不同使用者帐号,去其家目录读取~/.bash_profile,如果这读取不了就读取~/.bash_login,这个也读取不了才会读取~/.profile,这三个文档设定基本上是一样的,读取有优先关系

3.然后在根据用户帐号读取~/.bashrc

/etc/*和~/.*区别:

/etc/profile,/etc/bashrc 是系统全局环境变量设定

~/.profile,~/.bashrc是用户家目录下的私有环境变量设定

~/.profile与~/.bashrc的区别:

都具有个性化定制功能

~/.profile可以设定本用户专有的路径,环境变量等,它只在登入的时候执行一次

~/.bashrc也是某用户专有设定文档,可以设定路径,命令别名,每次shell script的执行都会使用它一次

2、/etc/security/limits.conf(用户进程级别的设置)

利用ulimit命令可以对资源的可用性进行控制。

-H选项和-S选项分别表示对给定资源的硬限制(hard limit)和软限制(soft limit)进行设置。

硬限制(hard limit)一旦被设置以后就不能被非root用户修改,软限制(soft limit)可以增长达到硬限制(hard limit)。

如果既没有指定-H选项也没有指定-S选项,那么硬限制(hard limit)和软限制(soft limit)都会被设置。

limit的值可以是一个数值,也可以是一些特定的值,比如:hardsoftunlimited,分别代表当前硬件限制、当前软件限制、不限制。

如果limit参数被省略,除非指定-H选项,否则资源当前的软限制(soft limit)将会被打印出来。

大小可设置为:

[root@mha-slave02 ~]# grep "MemTotal" /proc/meminfo  | awk -F' ' '{print $2}'
4045372
[root@mha-slave02 ~]# expr 4045372 \* 64 / 1024
252835
[root@mha-slave02 ~]# 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) 15719
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 252835
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) 252835
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

open files (-n) 1024 是linux操作系统对一个进程打开的文件句柄数量的限制(也包含打开的套接字数量)

这里只是对用户级别的限制,其实还有个是对系统的总限制,查看系统总限制:

# cat /proc/sys/fs/file-max

man proc,可得到file-max的描述:

/proc/sys/fs/file-max
              This  file defines a system-wide limit on the number of open files for all processes.  (See
              also setrlimit(2),  which  can  be  used  by  a  process  to  set  the  per-process  limit,
              RLIMIT_NOFILE,  on  the  number  of  files it may open.)  If you get lots of error messages
              about running out of file handles, try increasing this value:

即file-max是设置系统所有进程一共可以打开的文件数量 。同时一些程序可以通过setrlimit调用,设置每个进程的限制。如果得到大量使用完文件句柄的错误信息,是应该增加这个值。

也就是说,这项参数是系统级别的。

2、修改方法

 临时生效:

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

软限制和硬限制的区别?

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

永久生效

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

* soft nofile 252835

* hard nofile 252835  

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

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

* 表示所用的用户

修改系统总限制

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

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

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

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

永久生效方法:

修改 /etc/sysctl.conf, 加入

fs.file-max = 6553560 重启生效

3、/etc/sysctl.conf (系统级别的设置)

# cat /etc/sysctl.conf 
kernel.sysrq = 0               ------------------是否启用kernel.sysrq(在大多数服务已无法 
                                                 响应的情况下,还能通过按键组合来完成一系列 
                                                 预先定义的系统操作,1启用,0禁用;
kernel.core_uses_pid = 1       ------------------可以控制core文件的文件名中是否添加pid作为扩 
                                                 展(文件内容为1,表示添加pid作为扩展名,生成 
                                                 的core文件格式为core.xxxx;为0则表示生成的 
                                                 core文件同一命名为core);
kernel.msgmnb  = 65536         ------------------限制一个队列的最大长度;
kernel.msgmax  = 65536         ------------------限制一条消息的最大长度;
kernel.shmmax  = 68719476736   ------------------最大共享内存段大小;
kernel.shmall  = 4294967296    ------------------可以使用的共享内存的总量;
kernel.shmmni  = 4096          ------------------整个系统共享内存段的最大数目;
kernel.sem     = 250 32000 100 128 --------------每个信号对象集的最大信号对象数;
                                                 系统范围内最大信号对象数;
                                                 每个信号对象支持的最大操数; 
                                                 系统范围内最大信号对象集数;
kernel.msgmni  = 256           ------------------决定了系统中同时运行的最大的消息队列的个数;
fs.file-max    = 65536         ------------------系统级打开最大文件句柄的数量;
 
net.ipv4.ip_forward     = 0    ------------------(0代表禁止进行IP转发;1代表可以进行IP转发);
net.ipv4.conf.default.rp_filter = 1  ------------控制系统是否开启对数据包源地址的校验;
net.ipv4.conf.default.accept_source_route = 0  --禁用icmp源路由选项;
net.ipv4.tcp_syncookies = 1    ------------------表示开启SYN Cookies。当出现SYN等待队列溢出 
                                                 时,启用cookies来处理,可防范少量SYN攻击, 
                                                 默认为0,表示关闭;
net.ipv4.conf.all.forwarding = 0  ---------------0代表不转发源路由帧,若做NAT建议开启;
net.ipv4.ip_local_port_range = 9000 65000  ------系统中的程序会选择这个范围内的端口来连接到目 
                                                 的端口(目的端口当然是用户指定的;
net.ipv4.tcp_fin_timeout = 30  ------------------表示如果套接字由本端要求关闭,这个参数决定了 
                                                 它保持在FIN-WAIT-2状态的时间,默认是60,降 
                                                 低这个值以提高系统性能;
net.ipv4.tcp_max_syn_backlog = 8192  ------------定义backlog队列容纳的最大半连接数,如果配置 
                                                 高可以设置的更高;
net.core.rmem_default   =   262144   ------------套接字接收缓冲区大小的缺省值;
net.core.rmem_max       =   4194304  ------------套接字接收缓冲区大小的最大值;
net.core.wmem_default   =   262144   ------------套接字发送缓冲区大小的缺省值;
net.core.wmem_max       =   262144   ------------套接字发送缓冲区大小的最大值;
修改后配置文件使之生效的办法:
sysctl -p

参考:

1、https://www.cnblogs.com/cjsblog/p/9367043.html

2、https://www.cnblogs.com/pangguoping/p/5791432.html

4、https://blog.csdn.net/u011495642/article/details/84109007

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值