Linux系统控制文件 /etc/sysctl.conf


Linux系统控制文件 /etc/sysctl.conf

一、 配置一些系统信息配置一些系统信息

/etc/sysctl.conf这个目录主要是配置一些系统信息,而且它的内容全部是对应于/proc/sys/这个目录的子目录及文件。这样或许你不理解,先看看我的系统/etc/sysctl.conf这个文件里面有什么内容:cat /etc/sysctl.conf
fs.file-max = 3145728

fs.suid_dumpable = 1
kernel.core_uses_pid = 1

kernel.printk = 4 4 1 7
kernel.shmmax = 7516192768 
kernel.shmall = 1835008 

net.ipv4.ip_local_port_range = 8192 65535
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.netfilter.ip_conntrack_max = 1048576
net.ipv4.tcp_max_tw_buckets = 1048576
net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_rmem = 4096 87380 4120576
net.ipv4.tcp_wmem = 4096 16384 4120576

#vm.nr_hugepages = 0
其实每个'.'分割的就代表一个目录,例如,fs.file-max也就代表/proc/sys/fs/file-max。那么/proc/sys/是用来做什么的呢?大家都知道/proc是每次系统启动的时候都要重新挂载的,它反映了系统内存里面的一些状态。通过/proc/可以很好的了解到当前系统的一些信息。而/proc/sys/则是这些信息的一小部分而已。你可以通过ls /proc/查看,里面还是不是有很多其他的数字命名的目录?那就是单个进程的信息了,那个数字就是进程ID。例如之前写过一篇关于two many open files解决办法的文章,那么查看某个进程打开多少FD,则可以通过ls /proc//fd | wc -l来统计。
常用的有哪些呢?刚入门,自己用到的选项也不多。
1.  vm.nr_hugepages/vm.hugetlb_shm_group        # 第一个表示设置系统有多少大页内存,第二个表示哪些用户组的进程可以使用大页内存
2.  vm.swappiness                                                         # 如果设置为0表示禁用swap,否则值越大使用swap的可能性越高
3.  vm.overcommit_memory/vm.overcommit_ratio  # 这个设置是否可以超额分配内存,当然这是利用的virtual memory机制实现的。
前面那些参数都是在测试有什么方法防止mysqld使用swap,或者能否被避免Linux的OOM机制,详情请点击这里
还有在Linux上装Oracle会要设置kernel.shmmax这个参数吧(>_<,我还没在linux下安装过~) 这个也可以在/etc/sysctl.conf里面设置。

前面说过/etc/sysctl.conf与目录/proc/sys/的关系,那么常见设置方法有三个:
1.  echo value > /proc/sys/xx/yy
2.  vi /etc/sysctl.conf #vi编辑,然后添加设置 ; sysctl -p #生效
3.  sysctl -w kernel.domainname="example.com" #利用-w生效
另外需要注意,/etc/sysctl.conf 与 sysctl命令只有root用户才有权限执行

关于/etc/sysctl.conf的介绍就差不多了,理解了这个文件的作用,更关键的是要知道里面每项的含义,以及怎么设置来调优系统。不懂的太多了,只能靠慢慢积累了~ 


以上转载自:http://www.linuxidc.com/Linux/2012-05/59488.htm


二、部分参数说明

kernel.shmall = 2097152 # 可以使用的共享内存的总量。
kernel.shmmax = 2147483648 # 最大共享内存段大小。
kernel.shmmni = 4096 # 整个系统共享内存段的最大数目。
kernel.sem = 250 32000 100 128 # 每个信号对象集的最大信号对象数;系统范围内最大信号对象数;每个信号对象支持的最大操作数;系统范围内最大信号对象集数。
net.ipv4.ip_local_port_range = 1024 65000 # 应用程序可使用的IPv4端口范围。

fs.aio-max-nr = 1048576 文件系统最大异步io

这里,对每个参数值做个简要的解释和说明。
(1)shmmax:该参数定义了共享内存段的最大尺寸(以字节为单位)。缺省为32M,对于oracle来说,该缺省值太低了,通常将其设置为2G。
(2)shmmni:这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的默认值是 4096 。通常不需要更改。
(3)shmall:该参数表示系统一次可以使用的共享内存总量(以页为单位)。缺省值就是2097152,通常不需要修改。
(4)sem:该参数表示设置的信号量。
(5)file-max:该参数表示文件句柄的最大数量。文件句柄设置表示在linux系统中可以打开的文件数量。
修改好内核以后,执行下面的命令使新的配置生效。

kernel.shmmax:表示单个共享内存段的最大值,以字节为单位,此值一般为物理内存的一半,不过大一点也没关系,这里设定的为4GB,即"4294967295/1024/1024/1024=4G"。

  kernel.shmmni:表示单个共享内存段的最小值,一般为4kB,即4096bit。来源:www.examda.com

  kernel.shmall:表示可用共享内存的总量,单位是页,在32位系统上一页等于4kB,也就是4096字节。

  ip_local_port_range:表示端口的范围,为指定的内容。

  kernel.sem:表示设置的信号量,这4个参数内容大小固定。

#表示进程(例如一个worker进程)可能同时打开的最大句柄数,直接限制最大并发连接数
fs.file max = 999999

#1代表允许将状态为TIME-WAIT状态的socket连接重新用于新的连接。对于服务器来说有意义,因为有大量的TIME-WAIT状态的连接
net.ipv4.tcp_tw_reuse = 1

#当keepalive启用时,TCP发送keepalive消息的频率。默认是2个小时。将其调小一些,可以更快的清除无用的连接
net.ipv4.tcp_keepalive_time = 600

#当服务器主动关闭链接时,socket保持FN-WAIT-2状态的最大时间
net.ipv4.tcp_fin_timeout = 30

#允许TIME-WAIT套接字数量的最大值。超过些数字,TIME-WAIT套接字将立刻被清除同时打印警告信息。默认是180000,过多的TIME-WAIT套接字会使webserver变慢
net.ipv4.tcp_max_tw_buckets = 5000

#UDP和TCP连接中本地端口(不包括连接的远端)的取值范围
net.ipv4.ip_local_port_range = 1024  61000

#TCP接收/发送缓存的最小值、默认值、最大值
net.ipv4.tcp_rmem = 4096  32768  262142
net.ipv4.tcp_wmem = 4096  32768  262142

#当网卡接收的数据包的速度大于内核处理的速度时,会有一个队列保存这些数据包。这个参数就是这个队列的最大值。
net.core.netdev_max_backlog = 8096

#内核套接字接收/发送缓存区的默认值
net.core.rmem_default = 262144
net.core.wmem_default = 262144

#内核套接字接收/发送缓存区的最大值
net.core.rmem_max = 2097152
net.core.wmem_max = 2097152

#解决TCP的SYN攻击。与性能无关
net.ipv4.tcp_syncookies = 1

#三次握手建立阶段SYN请求队列的最大长度,默认是1024。设置大一些可以在繁忙时将来不及处理的请求放入队列,而不至于丢失客户端的请求
net.ipv4.tcp_max_syn_backlog = 1024


三、如果想屏蔽他人ping本地主机:

vi /etc/sysctl.conf

如果希望屏蔽别人 ping 你的主机,则加入以下代码:
# Disable ping requests
net.ipv4.icmp_echo_ignore_all = 1
编辑完成后,请执行以下命令使变动立即生效:
/sbin/sysctl -p
/sbin/sysctl -w net.ipv4.route.flush=1


转载自:http://www.linuxidc.com/Linux/2012-05/59488.htm

你可能感兴趣的:(linux)