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

本文详细介绍了Linux系统中用于配置系统信息的控制文件/etc/sysctl.conf。内容涵盖该文件的基本概念、常用配置参数及其意义,如共享内存设置、文件句柄数量等,并提供了设置方法和调优技巧。

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


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/<pid>/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
<think>首先,用户的问题是:“我想查找或编辑与MySQL相关的系统配置文件请问如何配置/etc/sysctl.d/mysql.conf文件或其作用和参数说明”。这是一个关于MySQL配置的具体文件问题。根据系统级指令,我需要:-所有行内数学表达式使用`$...$`格式。-独立公式使用`$$...$$`格式并单独成段。-LaTeX语法正确。-使用中文回答。-生成相关问题。-在回答中引用的段落末尾自然地添加引用标识,例如[^1]。用户还提供了几个引用:-引用[1]:提到了一些配置文件,包括MySQL的配置文件`/etc/mysql/my.cnf`,但不是用户问的`/etc/sysctl.d/mysql.conf`。-引用[2]:是关于Docker中运行MySQL的步骤,涉及密码和远程访问,但焦点是MySQL服务配置,不是系统级内核参数。-引用[3]:提到了`/etc/sysctl.conf`中的参数设置,用于OracleRAC,涉及文件系统和AIO设置。-引用[4]:解释了`/etc/sysctl.conf`中的参数,如`kernel.sem`和`net.ipv4.ip_local_port_range`。用户特别指出:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。”所以,我不应该过多依赖这些引用,而是聚焦于用户当前的查询。用户上一次的问题是什么?系统消息中显示的上一个查询是:“参考站内引用:...”但这个似乎是当前查询的一部分,因为它包括“用户可见层”的提问。历史记录是:“上述引用仅供参考...”,然后用户说“我想查找或编辑...”,所以用户的上一个问题可能是这些引用提供的上下文,但用户说不是真正的需求。我应该直接回答当前问题。现在,用户的问题是关于配置`/etc/sysctl.d/mysql.conf`文件,包括它的作用、参数说明和如何配置。首先,回忆一下Linux系统中`sysctl`是什么:-`sysctl`是用于配置Linux内核参数的实用程序。-这些参数在运行时可以调整,通过`/etc/sysctl.conf`文件或`/etc/sysctl.d/`目录下的文件来永久设置。-`/etc/sysctl.d/`目录允许放置独立的配置文件,这样更模块化,易于管理。对于MySQL,配置`/etc/sysctl.d/mysql.conf`文件通常涉及优化内核参数以提升MySQL性能,比如文件句柄限制、网络设置、虚拟内存设置等,因为MySQL作为数据库服务器可能需要更高的资源限制。关键参数说明:-常见的与MySQL性能相关的`sysctl`参数包括:-`fs.file-max`:最大文件打开数。MySQL可能需要更多文件句柄来处理连接。-`net.core.somaxconn`:套接字监听队列的最大长度,影响并发连接。-`kernel.shmmax`:最大共享内存段大小(相关但不直接,MySQL使用innodb_buffer_pool等)。-`vm.swappiness`:虚拟内存交换的倾向性,降低可以减少交换频率,提高性能。-`net.ipv4.tcp_max_syn_backlog`:TCPSYN队列大小,用于处理并发连接。引用中提到的一些参数:[^3]有`fs.aio-max-nr`(异步I/O请求数)和`fs.file-max`(最大打开文件数),这直接相关,因为MySQL可能使用异步I/O。[^4]有`kernel.sem`(信号量)和`net.ipv4.ip_local_port_range`(本地端口范围),后者对于MySQL连接可能有影响。但用户指定要配置`/etc/sysctl.d/mysql.conf`,而不是主`/etc/sysctl.conf`。习惯上,为了MySQL,我们会在`/etc/sysctl.d/`下创建一个文件如`mysql.conf`,并设置相关参数。如何配置:-编辑文件:使用文本编辑器如`vi`或`nano`编辑`/etc/sysctl.d/mysql.conf`。-内容示例:添加参数如:```#ForMySQLoptimizationfs.file-max=100000net.core.somaxconn=1024net.ipv4.tcp_max_syn_backlog=1024vm.swappiness=10fs.aio-max-nr=1048576```-保存后,运行`sysctl-p/etc/sysctl.d/mysql.conf`或在某些系统上运行`sysctl--system`来使配置生效。作用:提升MySQL的性能和稳定性,通过调优内核限制。在回答中,我需要使用中文。结构回答:-解释文件的作用。-提供常见参数的说明。-说明如何配置。-给出步骤。-自然地添加引用标识。引用[3]和[4]提供了一些参数说明,所以我可以在相关位置添加[^3]或[^4]。例如,提到fs.aio-max-nr时加[^3]。生成相关问题:在结尾,生成相关问题,类似于示例。示例生成了快速排序的问题,所以我需要生成MySQL配置相关的问题。相关问题例子:-如何验证`/etc/sysctl.d/mysql.conf`配置已生效?-哪些内核参数对MySQL性能最关键?-MySQL自己的配置文件`/etc/mysql/my.cnf`与这个有何区别?-如何监控MySQL性能调优的效果?保持相关。最后,确保LaTeX:用户问题中没有明显的数学表达式,所以可能不需要使用。但如果提到参数如`fs.file-max`的值,它可以作为行内文本处理,而不是数学表达式;但如果涉及公式计算如`512*processes`,我可以使用`$...$`但在这个上下文中,可能不需要。用户说“所有行内数学表达式使用”,但这里没有数学公式,所以我可以忽略,除非我介绍一些计算。例如,在解释时,说“最大文件打开数设置为$100000$”但`$100000$`不是数学表达式,它是值。最好当作普通文本处理。避免不必要的LaTeX。输出格式:先回答问题,然后生成相关问题。</think> ### 如何配置 /etc/sysctl.d/mysql.conf 文件及其作用和参数说明 在 Linux 系统中,`/etc/sysctl.d/mysql.conf` 文件是用于永久设置与 MySQL 数据库性能相关的内核参数的配置文件。它位于 `/etc/sysctl.d/` 目录下,这是一种模块化的配置方式,使你可以针对特定服务(如 MySQL)独立管理内核设置,而无需修改主 `/etc/sysctl.conf` 文件。这些参数通常优化系统资源,以提升 MySQL 的并发连接能力、文件处理和网络性能。 #### 文件的作用 - **主要目的**:调整 Linux 内核参数以支持 MySQL 的高负载场景。MySQL 作为数据库服务器,经常需要更高的文件句柄数、更强的异步 I/O 处理能力,以及优化的网络栈设置,以确保在处理大量并发查询时不会因系统限制而卡顿或崩溃。例如,调高文件描述符限制可以避免 “too many open files” 错误,这在 MySQL 高连接场景下很常见。 - **优势**:通过专用文件(如 `mysql.conf`),配置更易于维护和更新。修改后,可以使内核设置永久生效,而不仅限于临时调整(使用 `sysctl` 命令临时修改参数)[^3][^4]。 #### 常见参数说明 在 `/etc/sysctl.d/mysql.conf` 文件中,常见的参数包括以下几类。这些参数基于优化MySQL性能的经验值,具体数值可能需要根据服务器资源(如内存大小和 CPU 核心数)调整。以下是关键参数及其说明: - **文件系统相关参数**: - `fs.file-max = 100000`:设置系统最大文件打开数(文件描述符数量)。MySQL 的每个连接和表都会占用文件句柄,设置值建议在 $50000$ 以上以防止资源耗尽。例如,公式参考值为 $512 \times \text{max\_connections}$,其中 $\text{max\_connections}$ 是 MySQL 配置的最大连接数。参数作用:增加该值能显著减少文件句柄不足的错误[^3]。 - `fs.aio-max-nr = 1048576`:控制异步 I/O(AIO)请求的最大数量。MySQL 如使用 InnoDB 存储引擎会依赖 AIO 提升磁盘 I/O 性能。推荐值为 $1048576$(1024 \times 1024),作用是优化读写效率并避免 I/O 瓶颈[^3]。 - **网络相关参数**: - `net.core.somaxconn = 1024`:设置套接字监听队列的最大长度(即半连接队列的大小)。这对 MySQL 的并发连接处理至关重要(MySQL 默认使用端口 3306)。作用:提升 TCP 连接接受能力,减少连接超时[^4]。 - `net.ipv4.tcp_max_syn_backlog = 1024`:指定 TCP SYN 队列的大小,用于处理未完成的连接请求。MySQL 高流量场景下,设置高值能缓冲 SYN 泛洪攻击的影响。作用:增强网络稳定性[^4]。 - `net.ipv4.ip_local_port_range = 9000 65500`:定义系统可用于临时端口的范围。MySQL 客户端的连接会使用此范围,扩宽范围可以避免 “no free ephemeral ports” 错误。作用:支持更多出站连接[^4]。 - **内存和信号量相关参数**: - `vm.swappiness = 10`:控制虚拟内存交换(swap)的倾向性。值越低表示系统更倾向于使用物理内存而非 swap;设置为 $10$(推荐)能减少不必要的磁盘 I/O,避免 MySQL 性能下降(因为 MySQL 内存敏感)。值范围是 $0$ 到 $100$ [^3]。 - `kernel.shmall = 4294967296` 和 `kernel.shmmax = 68719476736`:这些参数影响共享内存大小(单位字节)。虽然现代 MySQL 较少依赖 System V 共享内存,但如果使用旧版或有特定设置(如 memcached),调高值能支持更大缓冲区。作用:优化内存分配[^4]。 - **其他参数**: - `kernel.msgmax` 和 `kernel.msgmnb`:用于进程间通信(IPC)的队列大小。对 MySQL 集群或使用消息的场景可能相关。 - **通用原则**:这些参数值通常基于经验公式或基准测试得出。例如,`fs.file-max` 的计算参考:$ \text{fs.file-max} \approx \text{max\_connections} \times (5 \text{ to } 10) $,确保有足够余量。 #### 如何配置 /etc/sysctl.d/mysql.conf 文件 配置步骤简单清晰,涉及编辑文件和应用更改。**注意:在修改前,备份现有配置以避免错误。推荐使用 root 权限操作。** 1. **创建或编辑配置文件**: - 使用文本编辑器(如 `vim` 或 `nano`)打开文件: ```bash sudo nano /etc/sysctl.d/mysql.conf ``` - 添加所需参数。以下是针对 MySQL 优化的示例配置内容: ``` # MySQL kernel optimization parameters # 文件系统设置 fs.file-max = 100000 fs.aio-max-nr = 1048576 # 网络设置 net.core.somaxconn = 1024 net.ipv4.tcp_max_syn_backlog = 1024 net.ipv4.ip_local_port_range = 9000 65500 # 内存和swap设置 vm.swappiness = 10 # 信号量设置 (可选) kernel.sem = 250 32000 100 128 ``` 说明:如果文件不存在,创建新文件;如已有内容,添加新行。 2. **应用配置使生效**: - 运行以下命令加载新配置: ```bash sudo sysctl -p /etc/sysctl.d/mysql.conf # 仅加载指定文件 ``` 或者: ```bash sudo sysctl --system # 加载所有 /etc/sysctl.d/ 下的文件 ``` 验证参数是否生效,使用: ```bash sysctl -a | grep <参数名> # 例如:sysctl -a | grep fs.file-max ``` 3. **重启服务**(可选但推荐): - 为使 MySQL 充分利用新内核设置,重启 MySQL 服务: ```bash sudo systemctl restart mysql ``` 4. **性能测试**:应用后,进行数据库负载测试(如使用 `sysbench`),以验证改进。 #### 注意事项 - **安全性和兼容性**:始终测试新设置在非生产环境中。值过高可能导致资源浪费或不稳定(如内存耗尽)。参考 MySQL 官方文档和服务器规格调整参数。 - **文件优先级**:`/etc/sysctl.d/` 中的文件按字母顺序加载,会覆盖 `/etc/sysctl.conf` 的冲突设置。因此,确保文件名有逻辑顺序(例如,`00-mysql.conf` 以提前加载)。 - **监控工具**:使用 `vmstat`、`iostat` 或 MySQL 的 `SHOW GLOBAL STATUS` 监控内核参数的效果。 通过合理配置 `/etc/sysctl.d/mysql.conf`,可以显著提升 MySQL 在高并发和数据密集场景下的性能和可靠性[^3][^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值