概述

[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.htmlyum install acpidACPI
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数据发送缓冲

linux包之procps之sysctl命令相关推荐

  1. (转) Linux 内核运行参数修改——sysctl命令

    原文:https://blog.csdn.net/u012707739/article/details/78254241 sysctl命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目 ...

  2. linux包之iproute之ip命令

    [root@localhost ~]# rpm -qf /sbin/ip iproute-2.6.32-31.el6.x86_64 ip 是个命令, ip 命令的功能很多!基本上它整合了 ifconf ...

  3. linux包之bash之内置命令ulimit

    概述 [root@localhost ~]# rpm -qa|grep bash bash-4.1.2-15.el6_4.x86_64 linux limits.conf 配置 limits.conf ...

  4. #linux包之sysstat之iostat命令

    概述 对于I/O-bond类型的进程,我们经常用iostat工具查看进程IO请求下发的数量.系统处理IO请求的耗时,进而分析进程与操作系统的交互过程中IO方面是否存在瓶颈. 同vmstat一样,ios ...

  5. Linux命令完全指南sysctl,Linux的Sysctl命令

    作为Linux系统管理员,有时您可能需要修改默认内核的行为. 例如,您可能需要启用魔术SysRq键或增加内核接受的连接数. 可以在构建内核时,系统引导时或运行时设置内核参数. 本文介绍了如何在运行时使 ...

  6. Linux命令完全指南sysctl,linux的sysctl命令以及相关应用

    一,sysctl命令简介 sysctl命令被用于在内核运行时动态地修改内核的运行参数,可用的内核参数在目录/proc/sys中.它包含一些TCP/ip堆栈和虚拟内存系统的高级选项, 这可以让有经验的管 ...

  7. Linux系统中sysctl命令详解 sysctl -p、sysctl -a、sysctl -w

    sysctl命令用于运行时配置内核参数,这些参数位于/proc/sys目录下.sysctl配置与显示在/proc/sys目录中的内核参数.可以用sysctl来设置或重新设置联网功能,如IP转发.IP碎 ...

  8. Linux的sysctl 命令参数详解

    Linux内核通过/proc虚拟文件系统向用户导出内核信息,用户也可以通过/proc文件系统或通过sysctl命令动态配置内核.比如,如果我们想启动NAT,除了加载模块.配置防火墙外,还需要启动内核转 ...

  9. linux方法参数,Linux的sysctl 命令 参数

    Linux内核通过/proc虚拟文件系统向用户导出内核信息,用户也可以通过/proc文件系统或通过sysctl命令动态配置内核.比如,如果我们想启动NAT,除了加载模块.配置防火墙外,还需要启动内核转 ...

最新文章

  1. itertools中常用的工具(chain,islice)
  2. 多个sphinx配置文件合并
  3. VS中怎样对C#项目进行单元测试
  4. MaxCompute 2.0—从ODPS到MaxCompute
  5. Hadoop学习很好的书籍,理论和代码都有
  6. mysql 查看个人版,MySQL系列-权限管理
  7. 亲历腾讯WEB前端开发三轮面试经历及面试题
  8. 264,avs重要的变量:
  9. 一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别...
  10. Broadcasting in Python
  11. 汉语字典_Android版最新官方版,汉语字典专业版2020
  12. 一次 注册dll失败 的经历
  13. android gps 速度,Android 获取GPS速度
  14. 卸载计算机安全证书,卸载https证书详细的步骤有哪些
  15. 世界坐标系和相机坐标系,图像坐标系的关系
  16. 教你用Python分析投资收益
  17. 网游无间道:你所忽略的托儿
  18. Matlab论文插图绘制模板第46期—帕累托图(Pareto)
  19. compiz在debian上的安装和使用
  20. 基于PaddlePaddle实现的目标检测模型SSD

热门文章

  1. 报错解决:fatal error: json/json.h: No such file or directory
  2. adf的主要功能之一是_浅析高性能纤维纸基功能材料
  3. 灾难恢复级别_如何实施云计算灾难恢复
  4. java 跳表_数据结构跳表学习并用Java实现
  5. kafka项目启动_Kafka 探险 源码环境搭建
  6. Android Action Bar 详解篇
  7. 多个相机拍摄定位_两种方式拍照易泄露隐私 | 如何避免照片记录 iPhone 定位信息?...
  8. rdp连接工具_如何在Windows10中清除RDP连接历史记录?
  9. 常用的 分布式事务 都有哪些?我该用哪个?
  10. mysql命令行显示乱码_mysql命令行显示乱码的解决方法