procps包里面的sysctl命令

procps包里面的sysctl命令

--http://www.cnblogs.com/createyuan/p/3740917.html?utm_source=tuicool&utm_medium=referral

概述

[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

procps包里面的sysctl命令
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。
procps包里面的sysctl命令

/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数据发送缓冲

SYSCTL()                                                            SYSCTL()

NAME
sysctl - configure kernel parameters at runtime SYNOPSIS
sysctl [-n] [-e] variable ...
sysctl [-n] [-e] [-q] -w variable=value ...
sysctl [-n] [-e] [-q] -p [filename]...
sysctl [-n] [-e] -a
sysctl [-n] [-e] -A DESCRIPTION
sysctl is used to modify kernel parameters at runtime. The parameters
available are those listed under /proc/sys/. Procfs is required for
sysctl() support in Linux. You can use sysctl() to both read and write
sysctl data. PARAMETERS
variable
The name of a key to read from. An example is kernel.ostype. The
available are those listed under /proc/sys/. Procfs is required for
sysctl() support in Linux. You can use sysctl() to both read and write
sysctl data. PARAMETERS
variable
The name of a key to read from. An example is kernel.ostype. The
'/' separator is also accepted in place of a '.'. variable=value
To set a key, use the form variable=value, where variable is the key
and value is the value to set it to. If the value contains quotes
or characters which are parsed by the shell, you may need to enclose
the value in double quotes. This requires the -w parameter to use. -n Use this option to disable printing of the key name when printing
values. -e Use this option to ignore errors about unknown keys. -N Use this option to only print the names. It may be useful with
shells that have programmable completion. -q Use this option to not display the values set to stdout. -w Use this option when you want to change a sysctl setting. -p Load in sysctl settings from the file(s) specified or
/etc/sysctl.conf if none given. Specifying - as filename means
reading data from standard input. -a Display all values currently available. -A Same as -a EXAMPLES
/sbin/sysctl -a /sbin/sysctl -n kernel.hostname /sbin/sysctl -w kernel.domainname="example.com" /sbin/sysctl -p /etc/sysctl.conf NOTES
Please note that modules loaded after sysctl is run may override the set-
tings (example: sunrpc.* settings are overridden when the sunrpc module is
loaded). This may cause some confusion during boot when the settings in
sysctl.conf may be overriden. To prevent such a situation, sysctl must be
run after the particular module is loaded (e.g., from /etc/rc.d/rc.local or
by using the install directive in modprobe.conf) FILES
/proc/sys /etc/sysctl.conf SEE ALSO
sysctl.conf(), modprobe.conf() AUTHOR
George Staikos, <staikos@0wned.org>
上一篇:Android手机app启动的时候第一个Activity必须是MainActivity吗


下一篇:Android学习路线(十二)Activity生命周期——启动一个Activity