返回顶部
首页 > 资讯 > 数据库 >sysctl与/proc详解
  • 737
分享到

sysctl与/proc详解

2024-04-02 19:04:59 737人浏览 安东尼
摘要

目录一、sysctl简介二、sysctl命令使用三、sysctl配置文件/etc/sysctl.conf详解四、/proc目录简介五、/proc/sys下内核文件与配置文件sysctl.conf中变量的对应

目录

一、sysctl简介

二、sysctl命令使用

三、sysctl配置文件/etc/sysctl.conf详解

四、/proc目录简介

五、/proc/sys下内核文件与配置文件sysctl.conf中变量的对应关系


一、sysctl简介

      sysctl 是一个用来在系统运作中查看及调整系统参数的工具。有的sysctl参数只是用来查看目前的系统状况,例如查看目前已开机时间、所使用的操作系统版本、核心名称等等;而有的可以让我们修改参数以调整系统运作的行为,例如网络暂存内存的大小、最大的上线人数等等。

/etc/sysctl.conf就是sysctl的配置文件,而这些可以调整的参数中必须在一开机系统执行其它程序前就设定好,有的可以在开机完后任意调整。同大多数配置文件一样,我们可以对sysctl.conf进行配置来优化系统的性能.

二、sysctl命令使用

[root@www ~]# sysctl --help
usage:  sysctl [-n] [-e] variable ... 
        sysctl [-n] [-e] [-q] -w variable=value ... 
        sysctl [-n] [-e] -a 
        sysctl [-n] [-e] [-q] -p <file>   (default /etc/sysctl.conf) 
        sysctl [-n] [-e] -A

常用参数:

    -w   临时改变某个指定参数的值,如

          sysctl -w net.ipv4.ip_forward=1

    -a   显示所有的系统参数

    -p   从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载

三、sysctl配置文件/etc/sysctl.conf

[root@ElementServer ~]# cat /etc/sysctl.conf|grep -v '^#\|^$'
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
kernel.msgmnb = 5368760912
kernel.msgmax = 16777216
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
kernel.shmmni = 8192
fs.file-max = 6553560

解释一下sysctl.conf文件中参数的意义:

  • net.ipv4.ip_forward = 0:

  •     出于安全考虑,linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。这通常就是路由器所要实现的功能。

    配置Linux系统的ip转发功能,首先保证硬件连通,然后打开系统的转发功能

  • less /proc/sys/net/ipv4/ip_forward,该文件内容为0,表示禁止数据包转发,1表示允许,将其修改为1。可使用命令echo "1" > /proc/sys/net/ipv4/ip_forward 修改文件内容,重启网络服务或主机后效果不再。若要其自动执行,可在/etc/sysctl.conf中net.ipv4.ip_forward = 1

  • 捉着命令echo "1" > /proc/sys/net/ipv4/ip_forward 写入脚本/etc/rc.d/rc.local

  • 或者 在/etc/sysconfig/network脚本中添加 FORWARD_IPV4="YES"

  • kernel.shmmax

  • 是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值。设置应该足够大,能在一个共享内存段下容纳下整个的SGA ,设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降。至于导致系统下降的主要原因为在实例启动以及ServerProcess创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。

  • 官方建议值:

  • 32位linux系统:可取最大值为4GB(4294967296bytes)-1byte,即4294967295。建议值为多于内存的一半,所以如果是32为系统,一般可取值为4294967295。32位系统对SGA大小有限制,所以SGA肯定可以包含在单个共享内存段中。

  • 64位linux系统:可取的最大值为物理内存值-1byte,建议值为多于物理内存的一半,一般取值大于SGA_MAX_SIZE即可,可以取物理内存-1byte。例如,如果为12GB物理内存,可取12*1024*1024*1024-1=12884901887,SGA肯定会包含在单个共享内存段中。 

  • kernel.shmall

  •     该参数控制可以使用的共享内存的总页数。Linux共享内存页大小为4KB,共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大大小是16G,那么需要共享内存页数是16GB/4KB=16777216KB /4KB=4194304(页),也就是64Bit系统下16GB物理内存,设置kernel.shmall = 4194304才符合要求(几乎是原来设置2097152的两倍)。这时可以将shmmax参数调整到16G了,同时可以修改SGA_MAX_SIZE和SGA_TARGET为12G(您想设置的SGA最大大小,当然也可以是2G~14G等,还要协调PGA参数及OS等其他内存使用,不能设置太满,比如16G)

  • kernel.shmmni

  • 该参数是共享内存段的最大数量。shmmni缺省值4096,一般肯定是够用了。

  • fs.file-max

  • 该参数决定了系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中可以打开的文件的数量。

  • fs.aio-max-nr

  •       此参数限制并发未完成的请求,应该设置避免I/O子系统故障。

  •    推荐值是:1048576 其实它等于 1024*1024 也就是 1024K 个。

  • kernel.sem

  • 以kernel.sem = 250 32000 100 128为例:

  •        250是参数semmsl的值,表示一个信号量集合中能够包含的信号量最大数目。

  •        32000是参数semmns的值,表示系统内可允许的信号量最大数目。

  •        100是参数semopm的值,表示单个semopm()调用在一个信号量集合上可以执行的操作数量。

  •        128是参数semmni的值,表示系统信号量集合总数。

  • net.ipv4.ip_local_port_range

  •     表示应用程序可使用的IPv4端口范围。

  • net.core.rmem_default

  • 表示套接字接收缓冲区大小的缺省值。

  • net.core.rmem_max

  • 表示套接字接收缓冲区大小的最大值。

  • net.core.wmem_default

  • 表示套接字发送缓冲区大小的缺省值。

  • net.core.wmem_max

  • 表示套接字发送缓冲区大小的最大值

四、/proc目录简介

       大家都知道进程都 是在内存中,而内存中的数据都写入到了/proc/目录中的文件中去了,所以很有必要分析这个文件夹内的内容。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。

1、proc文件系统总览 
       在类Unix系统中体现了一种良好的抽象哲学,就是几乎所有的数据实体都被抽象成一个统一的接口--文件来看待,这样我们就可以用一些简单的基本工具完成大量复杂的操作。

在Linux中存在着一类特殊的伪文件系统,用于使用与文件接口统一的操作来完成各种功能,例如ptyfs、devfs、sysfs和procfs。而procfs就是其中应用最广泛的一种伪文件系统。 
      procfs是Linux内核信息的抽象文件接口,大量内核中的信息以及可调参数都被作为常规文件映射到一个目录树中,这样我们就可以简单直接的通过echo或cat这样的文件操作命令对系统信息进行查取和调整了。同时procfs也提供了一个接口,使得我们自己的内核模块或用户态程序可以通过procfs进行参数的传递。在当今的Linux系统中,大量的系统工具也通过procfs获取内核参数,例如ps、lspci等等,没有procfs它们将可能不能正常工作。 
procfs的使用如同常规的文件系统一样,例如加载一个procfs (首先确定你的内核已经支持procfs默认如此): 
# mount -t proc none /proc 
也可以在/etc/fstab中加入如下一行使系统在启动时自动加载procfs(大多数系统中也是默认如此): 
none /proc proc defaults 0 0 
在proc文件系统中,主要包含三大类内容,进程相关部分,系统信息部分,以及系统子系统部分。

在下面我们可以看到一个典型的procfs布局: 

[root@www ~]# ls /proc
1     1230  147  2198   283  41   750        cpuinfo      ipmi        misc          slabinfo       vmstat
10    1238  148  22     284  42   8          crypto       irq         modules       softirqs       zoneinfo
1007  1249  15   2265   29   5    8958       devices      kallsyms    mounts        stat
1037  1262  156  22958  293  586  9          diskstats    kcore       mpt           swaps
1046  1264  157  22966  3    6    9271       dma          keys        mtd           sys
1047  1266  158  23     30   7    935        driver       key-users   mtrr          sysrq-trigger
1076  1268  16   23062  31   705  951        execdomains  kmsg        net           sysvipc
1091  1271  17   23215  32   706  acpi       fb           kpagecount  pagetypeinfo  timer_list
11    1273  18   24     33   707  asound     filesystems  kpageflags  partitions    timer_stats
1110  1274  19   25     369  708  buddyinfo  fs           loadavg     sched_debug   tty
1198  1275  2    26     38   709  bus        interrupts   locks       schedstat     uptime
12    13    20   27     39   710  cgroups    iomem        mdstat      scsi          version
1222  14    21   28     4    72   cmdline    ioports      meminfo     self          vmallocinfo

在上面中我们可以看到procfs包含的内容: 
* 进程相关部分 (只读) 
      这部分文件都是以数字为名的子目录,这个数字就是相关进程的进程ID,在后面中会详细介绍进程相关子目录的结构和信息。 
需要注意的是procfs中进程子系统部分的一个特殊点,就是/proc/self,它是指向当前执行进程的符号连接,或者说--是指向未来你将要执行指令的心灵感应: 
> cat self/cmdline 
catself/cmdline 
在这个命令中,我们希望它显示当前进程的cmdline参数,它恰恰就显示了当前进程--我们所执行的这条命令,cat self/cmdline。幸好这条指令显示出的信息会忽略空格,导致显示略微的不正常,否则我们倒是可以很容易的使用`cat self/cmdline`这样的命令制造出永远循环执行的进程来。;> 
* 内核信息部分 (只读) 
       这部分文件同样处于/proc的顶层目录,不过它们大部分都是常规、只读的文本文件,可以直接用cat查看信息。作为系统内核执行体的抽象,我们也可以把它看作内核"进程"的信息部分,当然虽然并不存在这个进程实体。这里比较特别的一个文件是 /proc/cmdline : 
>cat cmdline 
ro root=/dev/hda2 
在这个文件中存放的是系统内核引导时的命令行参数。
* 内核各子系统相关部分 (部分可调) 
      这部分是系统内核参数调整的重头戏,在procfs中,除去上面所述的两部分内容外,还有很大一部分信息文件被存放在了一些并非以数字命名的特殊目录中,这些目录下的信息就是内核各个重要子系统的信息和可调参数,

主要有: 
bus 总线信息(只读) 
drivers 驱动信息(只读) 
fs 文件系统特别信息(只读) 
ide IDE接口信息(只读) 
irq IRQ信息(只读) 
net 网络子系统信息(只读) 
scsi SCSI系统信息(只读) 
sysvipc IPC子系统信息(只读) 
tty tty子系统信息(只读) 
sys 系统内核可调参数 (可调) 
作为Linux系统内核参数的抽象文件接口,Linux内核的大部分默认可调参数都被放在了 /proc/sys目录下,这些参数都以常规文件的形式体现,并且可以用echo/cat等文件操作命令进行调整,调整的效果是即时的,并且在系统运行的整个生命周期之间都有效(直到再次改变它们或者系统重启)。 
当然Linux也提供了另外一种途径sysctl来调整这些参数,sysctl是从BSD系统继承而来的一种系统参数动态调整方法,sysctl的使用更为简单,并且可以使用/etc/sysctl.conf保存配置以在下次启动时自动加载这些设置

     在/proc/sys目录下存放着大多数的内核参数,并且设计成可以在系统运行的同时进行更改, 可以通过更改/proc/sys中内核参数对应的文件达到修改内核参数的目的(修改过后,保存配置文件就马上自动生效),不过重新启动机器后之前修改的参数值会失效,所以只能是一种临时参数变更方案。(适合调试内核参数优化值的时候使用,如果设置值有问题,重启服务器还原原来的设置参数值了。简单方便。)

      但是如果调试内核参数优化值结束后,需要永久保存参数值,就要通过修改/etc/sysctl.conf内的内核参数来永久保存更改。但只是修改sysctl文件内的参数值,确认保存修改文件后,设定的参数值并不会马上生效,如果想使参数值修改马上生效,并且不重启服务器,可以执行下面的命令:

#sysctl –p 

五、/proc/sys下内核文件与配置文件sysctl.conf中变量的对应关系

由于可以修改的内核参数都在/proc/sys目录下,所以sysctl.conf的变量名省略了目录的前面部分(/proc/sys)。 

即将/proc/sys中的文件转换成sysctl中的变量依据下面两个简单的规则:

1.去掉前面部分/proc/sys

2.将文件名中的斜杠变为点

这两条规则可以将/proc/sys中的任一文件名转换成sysctl中的变量名。 

例如:

/proc/sys/net/ipv4/ip_forward =》 net.ipv4.ip_forward

/proc/sys/kernel/hostname =》 kernel.hostname

可以使用下面命令查询所有可修改的变量名

# sysctl –a


您可能感兴趣的文档:

--结束END--

本文标题: sysctl与/proc详解

本文链接: https://lsjlt.com/news/42596.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • sysctl与/proc详解
    目录一、sysctl简介二、sysctl命令使用三、sysctl配置文件/etc/sysctl.conf详解四、/proc目录简介五、/proc/sys下内核文件与配置文件sysctl.conf中变量的对应...
    99+
    2024-04-02
  • Linux中proc目录的详细介绍
    这篇文章主要讲解了“Linux中proc目录的详细介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux中proc目录的详细介绍”吧!1.什么是proc观察LINUX F8的/etc/...
    99+
    2023-06-13
  • CHAR与VARCHAR详解
    前言:  前面写过一篇介绍int类型的文章,一直想写一篇介绍字符串字段类型的文章,一直拖着也没思路要怎么下手。最近多关注了下这方面的文章,决定还是把拖了好久的文章了结了吧。本篇文章主要会介绍字符串类型cha...
    99+
    2024-04-02
  • SurfaceView 与 TextureView 详解
    前言 播放视频或者渲染其他的动画的时候,有两个 View 组件可供选择,SurfaceView 和 TextureView,GLSurfaceView 是 SurfaceView 的子类,在 Surf...
    99+
    2023-08-31
    1024程序员节 android 音视频 面试
  • Mongodb详解与安装
    NOSQL的数据存储模型键值模型:(key-avalue存储)优点:查找速度快缺点:数据无结构,通常只被当作字符串或二进制数据应用场景:内容缓存实例:Redis,Dynamo列式模型数据模型:数据按列存储,...
    99+
    2024-04-02
  • Java Stack与Queue详解
    目录一、Stack二、Queue一、Stack 示例: package StackPack; import java.util.Stack; public class Sta...
    99+
    2024-04-02
  • 详解Matisse与Glide--java.lang.NoSuchMethodError:com.bumptech.glide.RequestManager.load
    问题描述 在使用 Matisse 与 glide 4.0.0 以及 4.0.0 之后的版本过程中,发现通过 Matisse 的 wiki 代码调用选取图片的方式后,会出现本文标题...
    99+
    2024-04-02
  • ListPreference详解与使用
    ListPreference是Android中的一个Preference子类,用于显示一个可选择的列表,并且可以保存用户所选择的值。...
    99+
    2023-09-14
    使用
  • java 中Comparable与Comparator详解与比较
    java 中Comparable与Comparator详解今天查看TreeMap的源码,发现其键必须是实现Comparable或者Comparator的接口时产生了一些兴趣,比如在TreeMap中的put方法分别对Comparable和Co...
    99+
    2023-05-31
    java comparable comparator
  • Android adb说明与详解
    Android adb 说明与详解 Android Debug Bridge(ADB)是一个非常有用的工具,它可以帮助开发人员在Android设备和计算机之间进行通信,以便在设备上进行调试、测试和安装...
    99+
    2023-09-02
    android adb
  • 详解spring与shiro集成
    Shiro的组件都是JavaBean/POJO式的组件,所以非常容易使用Spring进行组件管理,可以非常方便的从ini配置迁移到Spring进行管理,且支持JavaSE应用及Web应用的集成。在示例之前,需要导入shiro-spring及...
    99+
    2023-05-31
    spring shiro 集成
  • 详解Vue.jsClass与Style绑定
    目录Vue.js Class与Style绑定绑定HTML Class对象语法数组语法绑定内联样式对象语法数组语法自动添加前缀总结Vue.js Class与Style绑定 对于数据绑定...
    99+
    2024-04-02
  • 详解nginx的root与alias
    文章目录 1. 结论2. 详解root2.1 基本用法2.2 location的最左匹配原则2.3 index2.4 nginx location解析url工作流程2.5 末尾'/' 3. 详解alias3.1 基本用法 4...
    99+
    2023-08-19
    nginx 运维 服务器
  • python ast 详解与用法
    目录 基本概念节点类型ast.Assignast.Nameast.Constantast.Callast.Attribute 结点的遍历ast源码示例 结点的修改示例 参考链接 基本概念 在 python 中,我们可...
    99+
    2023-08-24
    python 开发语言 java
  • Vue3中ref与reactive的详解与扩展
    目录一、ref和reactive1.reactive2.ref 二、shallowRef和shallowReactive1. ref和shallowRef2. reactive和sh...
    99+
    2024-04-02
  • 详解JWT与Token的应用与原理
    目录JWT的应用Token的组成原理JWT对称加密JWT非对称加密生成私钥和公钥前言:JWT全称“JSON Web Token”,是实现Token的机制。官网...
    99+
    2023-05-16
    JWT应用与原理 Token应用与原理
  • C#实现加密与解密详解
    目录一、Hash加密,使用HashAlgorithm哈希算法类的派生类(MD5、SHA1等)1、使用抽象类HashAlgorithm2、使用抽象类MD53、使用MD5CryptoSe...
    99+
    2024-04-02
  • JavaScript实现加密与解密详解
    目前原生JS貌似并没有提供MD5计算相关的函数方法,只能自己实现或者使用前辈大神写好的。 一、使用crypto.js库进行加密 GitHub的 https://github...
    99+
    2024-04-02
  • SpringBoot@Import与@Conditional注解使用详解
    目录@Import@Conditional说明:基于atguigu学习笔记。 在了解spring boot自动配置原理前,再来了解下两个注解@Import注解和@Conditiona...
    99+
    2022-11-13
    SpringBoot @Import注解 SpringBoot @Conditional注解
  • 详解MySQL中的pid与socket
    目录1.pid-file介绍2.socket文件介绍总结: socket文件:当用Unix域套接字方式进行连接时需要的文件。 pid文件:MySQL实例的进程ID文件。 1.pid-file介绍 M...
    99+
    2022-05-12
    MySQL socket MySQL pid
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作