关于对 /etc/profile、/etc/security/limits.conf、/etc/sysctl.conf 三个配置文件的理解。
2、/etc/security/limits.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的值可以是一个数值,也可以是一些特定的值,比如:hard,soft,unlimited,分别代表当前硬件限制、当前软件限制、不限制。
如果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