zoukankan      html  css  js  c++  java
  • linux包之procps之sysctl命令

    概述

    [root@localhost ~]# rpm -qf /sbin/sysctl
    procps-3.2.8-25.el6.x86_64

    我们常常在 Linux 的 /proc/sys 目录下,手动设定一些 kernel 的参数或是直接 echo 特定的值给一个 proc下的文件,大多数 Linux 发布版都定义了适当的缓冲区和其他 Transmission Control Protocol(TCP)参数。可以修改这些参数来分配更多的内存,从而改进网络性能。设置内核参数的方法是通过 proc 接口,也就是通过读写 /proc 中的值。幸运的是,sysctl 可以读取 /etc/sysctl.conf 中的值并根据需要填充/proc,这样就能够更轻松地管理这些参数。

    在linux下安装Oracle或者DB2数据库时,需要调整内核参数,这就需要sysctl了。
    sysctl是一个允许您改变正在运行中的Linux系统的接口。它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项。用sysctl可以读取设置超过五百个系统变量。
    基于这点,sysctl(8) 提供两个功能:读取和修改系统设置。sysctl是procfs软件中的命令,该软件包还提供了w, ps, vmstat, pgrep, pkill, top, slabtop等命令。
    Linux内核通过/proc虚拟文件系统向用户导出内核信息,用户也可以通过/proc文件系统或通过sysctl命令动态配置内核。比如,如果我们想启动NAT,除了加载模块、配置防火墙外,
    还需要启动内核转发功能。我们有三种方法:
    1. 直接写/proc文件系统
    # echo 1 > /proc/sys/net/ipv4/ip_forward临时生效
    2. 利用sysctl命令
    # sysctl -w net.ipv4.ip_forward=1 临时生效
    3. 编辑/etc/sysctl.conf
    添加如下一行,这样系统每次启动后,该变量的值就是1
    net.ipv4.ip_forward = 1 永久生效

    解释

    sysctl命令的作用是在运行时配置内核参数
    修改(配置)方法有三种

    临时生效2种
    # echo 1 > /proc/sys/net/ipv4/ip_forward // 开启路由功能
    # sysctl -w net.ipv4.ip_forward=1 // 用此选项来改变一个sysctl设置
    如果系统重启,或执行service network restart命令,所设置的值即会丢失
    /proc目录下的所有内容都是临时性的, 所以重启动系统后任何修改都会丢失。
    永久生效1种
    # vi /etc/sysctl.conf
    修改net.ipv4.ip_forward=0的值为1 // 打开数据包的转发功能
    # sysctl -p /etc/sysctl.conf // 重新载入/etc/sysctl.conf文件,如-p后未指定路径,则载入/etc/sysctl.conf
    指定的值在系统进入多用户模式之后被设定。并不是所有的变量都可以在这个模式下设定。
    sysctl 变量的设置通常是字符串、数字或者布尔型。 (布尔型用 1 来表示'yes',用 0 来表示'no')。

    样例
    [root@Firewall sys]# sysctl -a //查看所有参数
    [root@Firewall sys]# sysctl net.core.wmem_max //查看指定的参数
    net.core.wmem_max = 131071
    [root@Firewall sys]# sysctl net.core.wmem_max=256000 //修改指定的参数
    net.core.wmem_max = 256000

    sysctl -a所看到的参数全部来自/proc/sys/目录下的文件内容,可以用grep加sort加ll的方法来查看与对应
    [root@Firewall sys]# pwd
    /proc/sys
    [root@Firewall sys]# ll
    total 0
    dr-xr-xr-x 0 root root 0 Apr 12 14:29 crypto
    dr-xr-xr-x 0 root root 0 May 10 15:53 debug
    dr-xr-xr-x 0 root root 0 Apr 12 14:28 dev
    dr-xr-xr-x 0 root root 0 Apr 12 14:28 fs
    dr-xr-xr-x 0 root root 0 Apr 12 14:28 kernel
    dr-xr-xr-x 0 root root 0 Apr 12 14:28 net
    dr-xr-xr-x 0 root root 0 May 10 15:53 sunrpc
    dr-xr-xr-x 0 root root 0 May 10 15:53 vm

    [root@Firewall netfilter]# pwd
    /proc/sys/net/netfilter

    [root@fileserv ~]# sysctl net.ipv4查看一类参数
    [root@Firewall netfilter]# sysctl -a|grep net.net|sort
    net.netfilter.nf_conntrack_acct = 1
    net.netfilter.nf_conntrack_buckets = 16384
    net.netfilter.nf_conntrack_checksum = 1
    net.netfilter.nf_conntrack_count = 1739
    net.netfilter.nf_conntrack_expect_max = 256
    net.netfilter.nf_conntrack_generic_timeout = 600
    net.netfilter.nf_conntrack_icmp_timeout = 30
    net.netfilter.nf_conntrack_log_invalid = 0
    net.netfilter.nf_conntrack_max = 65536
    net.netfilter.nf_conntrack_tcp_be_liberal = 0
    net.netfilter.nf_conntrack_tcp_loose = 1
    net.netfilter.nf_conntrack_tcp_max_retrans = 3
    net.netfilter.nf_conntrack_tcp_timeout_close = 10
    net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
    net.netfilter.nf_conntrack_tcp_timeout_established = 432000
    net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
    net.netfilter.nf_conntrack_tcp_timeout_last_ack = 30
    net.netfilter.nf_conntrack_tcp_timeout_max_retrans = 300
    net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 60
    net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 120
    net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
    net.netfilter.nf_conntrack_tcp_timeout_unacknowledged = 300
    net.netfilter.nf_conntrack_udp_timeout = 30
    net.netfilter.nf_conntrack_udp_timeout_stream = 180
    [root@Firewall netfilter]# ll
    total 0
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_acct
    -r--r--r-- 1 root root 0 May 10 15:53 nf_conntrack_buckets
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_checksum
    -r--r--r-- 1 root root 0 May 10 15:53 nf_conntrack_count
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_expect_max
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_generic_timeout
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_icmp_timeout
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_log_invalid
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_max
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_tcp_be_liberal
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_tcp_loose
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_tcp_max_retrans
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_tcp_timeout_close
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_tcp_timeout_close_wait
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_tcp_timeout_established
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_tcp_timeout_fin_wait
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_tcp_timeout_last_ack
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_tcp_timeout_max_retrans
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_tcp_timeout_syn_recv
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_tcp_timeout_syn_sent
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_tcp_timeout_time_wait
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_tcp_timeout_unacknowledged
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_udp_timeout
    -rw-r--r-- 1 root root 0 May 10 15:53 nf_conntrack_udp_timeout_stream
    [root@Firewall core]# sysctl -a|grep net.core|sort
    net.core.dev_weight = 64
    net.core.message_burst = 10
    net.core.message_cost = 5
    net.core.netdev_budget = 300
    net.core.netdev_max_backlog = 1000
    net.core.optmem_max = 10240
    net.core.rmem_default = 111616
    net.core.rmem_max = 131071
    net.core.somaxconn = 8192
    net.core.warnings = 1
    net.core.wmem_default = 111616
    net.core.wmem_max = 131071
    net.core.xfrm_acq_expires = 30
    net.core.xfrm_aevent_etime = 10
    net.core.xfrm_aevent_rseqth = 2
    net.core.xfrm_larval_drop = 1
    [root@Firewall core]# ll
    total 0
    -rw-r--r-- 1 root root 0 May 10 15:53 dev_weight
    -rw-r--r-- 1 root root 0 May 10 15:53 message_burst
    -rw-r--r-- 1 root root 0 May 10 15:53 message_cost
    -rw-r--r-- 1 root root 0 May 10 15:53 netdev_budget
    -rw-r--r-- 1 root root 0 May 10 15:53 netdev_max_backlog
    -rw-r--r-- 1 root root 0 May 10 15:53 optmem_max
    -rw-r--r-- 1 root root 0 May 10 15:53 rmem_default
    -rw-r--r-- 1 root root 0 May 10 15:53 rmem_max
    -rw-r--r-- 1 root root 0 Apr 12 14:29 somaxconn
    -rw-r--r-- 1 root root 0 May 10 15:53 warnings
    -rw-r--r-- 1 root root 0 May 10 15:53 wmem_default
    -rw-r--r-- 1 root root 0 May 10 15:53 wmem_max
    -rw-r--r-- 1 root root 0 May 10 15:53 xfrm_acq_expires
    -rw-r--r-- 1 root root 0 May 10 15:53 xfrm_aevent_etime
    -rw-r--r-- 1 root root 0 May 10 15:53 xfrm_aevent_rseqth
    -rw-r--r-- 1 root root 0 May 10 15:53 xfrm_larval_drop

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

    下面是一些比较激进的网络设置。
      # Use TCP syncookies when needed
      net.ipv4.tcp_syncookies = 1
      # Enable TCP window scaling
      net.ipv4.tcp_window_scaling: = 1
      # Increase TCP max buffer size
      net.core.rmem_max = 16777216
      net.core.wmem_max = 16777216
      # Increase Linux autotuning TCP buffer limits
      net.ipv4.tcp_rmem = 4096 87380 16777216
      net.ipv4.tcp_wmem = 4096 65536 16777216
      # Increase number of ports available
      net.ipv4.ip_local_port_range = 1024 65000
    将这些设置添加到 /etc/sysctl.conf 的现有内容中。
    第一个设置启用 TCP SYN cookie。当从客户机发来新的 TCP 连接时,数据包设置了 SYN 位,服务器就为这个半开的连接创建一个条目,并用一个 SYN-ACK 数据包进行响应。
    在正常操作中,远程客户机用一个 ACK 数据包进行响应,这会使半开的连接转换为全开的。有一种称为 SYN 泛滥(SYN flood) 的网络攻击,它使 ACK 数据包无法返回,导致服务器用光内存空间,
    无法处理到来的连接。SYN cookie 特性可以识别出这种情况,并使用一种优雅的方法保留队列中的空间(细节参见参考资料一节)。大多数系统都默认启用这个特性,但是确保配置这个特性更可靠。

    启用 TCP 窗口伸缩使客户机能够以更高的速度下载数据。TCP 允许在未从远程端收到确认的情况下发送多个数据包,默认设置是最多 64 KB,在与延迟比较大的远程客户机进行通信时这个设置可能不够。窗口伸缩会在头中启用更多的位,从而增加窗口大小。

    后面四个配置项增加 TCP 发送和接收缓冲区。这使应用程序可以更快地丢掉它的数据,从而为另一个请求服务。还可以强化远程客户机在服务器繁忙时发送数据的能力。

    最后一个配置项增加可用的本地端口数量,这样就增加了可以同时服务的最大连接数量。在下一次引导系统时,或者下一次运行 sysctl -p /etc/sysctl.conf 时,这些设置就会生效。

    ip_conntrack :使用iptables的情况下系统会记录连接信息

    /proc/sys/net/ipv4/ip_conntrack_max :最大记录连接数,超过的话会导致新连接被丢弃
    /sys/module/ip_conntrack/parameters/hashsize : hash大小
    /proc/net/ip_conntrack : 记录每个连接信息
    /proc/sys/net/ipv4/netfilter/ip_conntrack_count : 当前记录的连接数

    增大hashsize

    # vi /etc/modprobe.conf
    options ip_conntrack hashsize=100000
    ip_conntrack_max 自动为ip_conntrack hashsize的8倍

    /proc/sys/net/core/rmem_max — 最大的TCP数据接收缓冲
    /proc/sys/net/core/wmem_max — 最大的TCP数据发送缓冲

    Q:本地同时与多个主机建立连接,如果这些主机同时发生数据到本地,而本地又没有调用recv进行处理,会出现什么情况?

    A:系统为每个socket建立一个缓存,ip层组包进程在收到数据包后会把数据放入socket缓存。调用recv将socket缓存的内容copy到程序定义的缓存,如果通信进程不能及时recv,将导致该socket缓存满。如果用tcp协议,socket缓存满以后,系统会向对方发出错误消息,对方回收到wsaewouldblock错误,如果是用udp协议,系统会把该socket的以后收到的数据丢弃~
    在WinXP上,接收缓冲区8192字节,发送缓冲区64512字节。
    TCP/UDP所返回的缓冲区大小是一致的。
    TCP在建立连接的时候,SYN分节会相互通告窗口,此窗口就是TCP内核的缓冲区大小,通常要求其为MSS的偶数倍。
    为了充分利用TCP连接,需要估计TCP连接的传输速度和RTT值,得到在网络上传输的字节流大小,通过SO_RCVBUF和SO_SNDBUF可以查看本地socket的发送和接受缓冲区大小。
    SO_RCVLOWAT和SO_SNDLOWAT 表示本地TCP接受low water,如果接受的字节大于该值,内核将其标识为可读;如果发送缓冲区的可用空间大于SO_SNDLOWAT,内核将其标识为可写;一般该值缺省为2048字节。

    具体可查看UNIX网络编程P165。

    tcp窗口大小就是缓冲区的概念

    修改/etc/rc.d/rc.local,加入:
      echo ‘131072′ > /proc/sys/fs/file-max
      echo ‘131072′ > /proc/sys/fs/inode-max
      (1G内存值修改成:65535 2G内存值修改成:131072 4G内存值修改成:262144)
    修改/etc/sysctl.conf文件,加入:
      net.core.rmem_default = 8388608
      net.core.rmem_max = 8388608
      net.core.wmem_default = 8388608
      net.core.wmem_max = 8388608
      net.ipv4.tcp_timestamps = 0
      net.ipv4.tcp_sack =1
      net.ipv4.tcp_window_scaling = 1
      net.core.netdev_max_backlog=3000
      #Modify i-node
      sys.fs.file-max= 65535
      sys.fs.inode-max= 65535
      #Set System Memory
      vm.bdflush="30 500 0 0 500 3000 60 20 0"
      vm.kswapd="1024 32 64"
      #Disable HackAttack!
      net.ipv4.conf.eth0.accept_source_route=0
      net.ipv4.conf.lo.accept_source_route=0
      net.ipv4.conf.default.accept_source_route=0
      net.ipv4.conf.all.accept_source_route=0
      net.ipv4.conf.lo.accept_redirects=0
      net.ipv4.conf.all.accept_redirects=0
      net.ipv4.conf.eth0.accept_redirects=0
      net.ipv4.conf.default.accept_redirects=0
      net.ipv4.conf.lo.secure_redirects=0
      net.ipv4.conf.all.secure_redirects=0
      net.ipv4.conf.eth0.secure_redirects=0
      net.ipv4.conf.default.secure_redirects=0
      net.ipv4.conf.eth0.send_redirects=0
      net.ipv4.conf.lo.send_redirects=0
      net.ipv4.conf.default.send_redirects=0
      net.ipv4.conf.all.send_redirects=0
      net.ipv4.tcp_syncookies=1
      net.ipv4.icmp_echo_ignore_broadcasts=1
      net.ipv4.icmp_ignore_bogus_error_responses=1
      #Web Servers
      net.ipv4.tcp_tw_reuse=1
      net.ipv4.tcp_tw_recycle=1
      net.ipv4.tcp_fin_timeout=30
      net.ipv4.tcp_keepalive_time=1800
      net.ipv4.core.wmem_max=16777216
      net.ipv4.core.rmem_max=16777216
      net.ipv4.tcp_rmem="4096 87380 8388608"
      net.ipv4.tcp.wmem="4096 87380 8388608"
      net.ipv4.tcp_max_syn_backlog=8192

    与oracle相关的内核参数

    在安装Oracle的时候需要调整linux的内核参数,但是各参数代表什么含义呢,下面做详细解析。
    Linux安装文档中给出的最小值:
    fs.aio-max-nr = 1048576
    fs.file-max = 6815744
    kernel.shmall = 2097152
    kernel.shmmax = 4294967295
    kernel.shmmni = 4096
    kernel.sem = 250 32000 100 128
    net.ipv4.ip_local_port_range = 9000 65500
    net.core.rmem_default = 262144
    net.core.rmem_max = 4194304
    net.core.wmem_default = 262144
    net.core.wmem_max = 1048586

    各参数详解:
    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子系统故障。
    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/acpi

    https://www.suse.com/zh-cn/documentation/sles10/book_sle_reference/data/sec.pmanage.acpi.html
    
    yum install acpid
    
    ACPI
    ACPI(高级配置和电源接口)支持操作系统设置和控制各个硬件部件。 ACPI 可以取代 PnP 和 APM。 它提供有关电池、AC 适配器、温度、风扇和系统事件(例如 “合上机盖” 或 “电池电量低”)的信息。
    BIOS 提供包含有关各个部件和硬件访问方法信息的表。 操作系统使用这些信息执行指派中断或激活和取消激活部件等任务。 因为操作系统执行 BIOS 中储存的命令,所以功能取决于 BIOS 实施。 /var/log/boot.msg 中报告了 ACPI 能够检测并装载的表。
    
    使用 ACPI
    如果内核在引导系统时检测到 ACPI BIOS,则会自动激活 ACPI。某些较旧的计算机可能需要引导参数 acpi=force。 计算机必须支持 ACPI 2.0 或更高版本。 检查 /var/log/boot.msg 中的内核引导消息,了解是否已激活了 ACPI。 
    
    随后,必须装载多个模块。 这是由 Aacpid 的启动脚本完成的。 如果这些模块中的任何一个模块引起问题,则可以在 /etc/sysconfig/powersave/common 中排除相应模块的装载或卸载。系统日志 (/var/log/messages) 包含模块的消息,使您了解检测到了哪些组件。
    /proc/acpi 目前包含多个文件,这些文件提供有关系统状态的信息,也可用于更改某些状态。 某些功能仍在开发中,所以尚不能使用,而对某些功能的支持主要取决于制造商的实施。
    通过 cat 可以读取所有文件(dsdt 和 fadt 除外)。
    
    /proc/acpi/dsdt 和 /proc/acpi/fadt
    这些文件包含 ACPI 表 DSDT(区分系统说明表)和 FADT(固定 ACPI 说明表)。可以使用 acpidmp、acpidisasm 和 dmdecode 读取这些文件。 包 pmtools 中提供了这些程序及其文档。 例如,acpidmpDSDT | acpidisasm。 

    /proc 在 Linux 中是一个比较奇妙的目录,保存了当前系统所有的详细信息,包括进程、文件系统、硬件…… 而且还可以通过 /proc 来即时修改系统中的某些参数。
    你可能会认为,“文件”指的就是硬盘上保存的数据,要么是文本,要么就是二进制文件。而在 Linux 的世界中,所有的东西都可以通过文件来表示和管理,哪怕是硬件设备,也可以通过 /dev 下的设备文件来操作硬件设备。
    /proc 就是这样一种文件,它并不存在于硬盘上,每当系统启动的时候,操作系统自动创建 /proc 下的内容,你可以查看这些文件的列表,但是你会发现大部分文件的大小都是 0 ,这并不奇怪,因为这些文件属于“virtual files“,也就是说,当你读取这些文件的时候,系统内核为你即时生成文件中的内容。
    /proc 下还有一个 self 文件,实际上是一个连接,指向了当前运行中的进程目录。
    /proc/cmdline: 显示内核的启动参数,一般就是你 grub 中传入内核的那些参数,比如我的就是: root=/dev/sda9 video=uvesafb:1680x1050-32,mtrr:3,ywrap
    /proc/filesystems 为当前系统支持的文件系统列表,你可以在程序中读取这个文件,以获得当前系统对文件系统的支持信息。
    /proc/mounts: 系统当前的挂载信息。

    除此之外,还有一些文件和硬件相关,比如 /proc/interrupts 为终端信息,/proc/irq 为 IRQ 信息,还有 /proc/pci、/proc/bus 等等。
    /proc/fs
    /proc/irq
    /proc/mpt
    /proc/tty
    /proc/bus
    /proc/sys
    /proc/ipmi
    /proc/scsi
    /proc/acpi
    /proc/driver

    每个数字目录都代表了一个正在运行的进程,进程目录下面都有啥
        * cmdline: 启动进程的命令和参数。
        * cwd: 指向进程当前目录的一个连接。
        * environ: 进程所有的环境变量。
        * fd: 进程所有打开的文件描述符,目录下是一个个以数字为名称的连接,指向了进程当前正在使用的文件。
        * maps, statm, mem: 进程的内存信息。
        * stat, status: 进程的状态信息,比如查看 /proc/status 中是否含有 “Zombie”字样,来查看僵尸进程。

    sysctl -a所看到的参数全部来自/proc/sys/目录下的文件内容,可以用grep加sort加ll的方法来查看与对应
    sysctl -a列出全部
    sysctl -p列出/etc/sysctl.conf中设置的,重新载入/etc/sysctl.conf文件,如-p后未指定路径,则载入/etc/sysctl.conf,指定的值在系统进入多用户模式之后被设定。并不是所有的变量都可以在这个模式下设定。
    sysxtl -w临时设置
    sysctl net.core.wmem_max 查看指定参数
    sysctl net.core.wmem_max=256000 修改指定的参数

    参数调整
    /proc/sys 下的可配置的选项很多,主要有 6 类: debug、dev、fs、kernel、net、vm,只要文件属性是可读写的,一般都对应了系统某个可以修改的参数。不过系统重启之后参数就恢复默认值了,其实有专门的工具来修改这些参数,那就是 sysctl 和 /etc/sysctl.conf 这个配置文件。

    如果系统重启,或执行service network restart命令,临时生效设置的值即会丢失。

    解释说明:想启动NAT,除了加载模块、配置防火墙外,还需要启动内核转发功能
    即时生效:echo 1 > /proc/sys/net/ipv4/ip_forward
          sysctl -w net.ipv4.ip_forward=1
    永久生效:vi /etc/sysctl.conf,加入net.ipv4.ip_forward = 1 要么重启生效,要么执行sysctl -p一下

    解释说明:要使别人ping不到自己,就调整下面这个参数,默认是0可以通,为1不能通。
    即时生效:echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
    永久生效:vi /etc/sysctl.conf,加入net.ipv4.icmp_echo_ignore_all = 1 重启生效

    解释说明:file-max是设置系统所有进程一共可以打开的文件数量。同时一些程序可以通过setrlimit调用,设置每个进程的限制。
    即时生效:echo 6553560 > /proc/sys/fs/file-max
    永久生效:vi /etc/sysctl.conf,加入fs.file-max = 6553560 重启生效

    解释说明:配置Linux内核如何更新dirty buffers到磁盘缓冲区用于暂存磁盘的数据。相对于内存来讲,磁盘缓冲区的速度很慢。因此,如果服务器使用这类内存,性能会成问题。当缓冲区内的数据完全dirty,vm.bdflush有9个参数。
    临时生效:sysctl -w vm.bdflush="30 500 0 0 500 3000 60 20 0"

    解释说明:配置kswapd daemon,指定Linux的内存交换页数量
    临时生效:sysctl -w vm.kswapd="1024 32 64"

    echo 3 > /proc/sys/vm/drop_caches


    tcp窗口大小就是缓冲区的概念
    /proc/sys/net/core/rmem_max — 最大的TCP数据接收缓冲
    /proc/sys/net/core/wmem_max — 最大的TCP数据发送缓冲

  • 相关阅读:
    zookeeper
    linux命令大全
    多态1
    单例模式
    java this
    java 构造代码块
    java return
    mapreduce实现分组求最大
    数据相关脚本
    mapreduce实现社交中共同好友
  • 原文地址:https://www.cnblogs.com/createyuan/p/3740917.html
Copyright © 2011-2022 走看看