嵌入式 > 详情

Linux操作系统修改内核参数的三种方法详细说明

发布时间:2024-01-03 发布时间:
|

linux内核的参数设置怎么弄呢,Linux操作系统修改内核参数有以下三种方式:

修改/etc/sysctl.conf文件;

在文件中加入配置项,格式为key=value,保存修改后的文件,执行命令sysctl-p加载新配置。

使用sysctl命令临时修改;

如:sysctl-wnet.ipv4.tcp_mem=“379008505344758016”直接修改/proc/sys/目录中的文件。

如:echo“379008505344758016”》/proc/sys/net/ipv4/tcp_mem注意:第一种方式在重启操作系统后自动永久生效;第二种和第三种方式在重启后失效。

内核参数

kernel.core_uses_pid=1

core_uses_pid可以控制core文件的文件名中是否添加pid作为扩展名。设置为1,表示添加pid作为扩展名,生成的core文件格式为core.xxx;设置为0(默认),表示生成的core文件统一命名为core。

kernel.core_pattern=core

core_pattern可以控制core文件的保存位置和文件格式。

如:kernel.core_pattern=“/corefile/core-%e-%p-%t”,表示将core文件统一生成到/corefile目录下,产生的文件名为core-命令名-pid-时间戳。

以下是参数列表:

%p-insertpidintofilename添加pid

%u-insertcurrentuidintofilename添加当前uid

%g-insertcurrentgidintofilename添加当前gid

%s-insertsignalthatcausedthecoredumpintothefilename添加导致产生core的信号

%t-insertUNIXTImethatthecoredumpoccurredintofilename添加core文件生成时的unix时间

%h-inserthostnamewherethecoredumphappenedintofilename添加主机名

%e-insertcoredumpingexecutablenameintofilename添加命令名

kernel.msgmax=8192

进程间的消息传递是在内核的内存中进行的。msgmax指定了消息队列中消息的最大值。(65536B=64KB)

kernel.msgmnb=16384

msgmnb规定了一个消息队列的最大值,即一个消息队列的容量。msgmnb控制可以使用的共享内存的总页数。Linux共享内存页大小为4KB,共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大大小是16G,那么需要共享内存页数是16GB/4KB=16777216KB/4KB=4194304(页),也就是64Bit系统下16GB物理内存,设置kernel.shmall=4194304才符合要求。

kernel.shmall=1048576

表示在任何给定时刻,系统上可以使用的共享内存的总量(bytes)。

kernel.shmmax=4294967295

表示内核所允许的最大共享内存段的大小(bytes)。用于定义单个共享内存段的最大值,64位linux系统,可取的最大值为物理内存值-1byte,建议值为多于物理内存的一半,一般取值大于SGA_MAX_SIZE即可,可以取物理内存-1byte。例如,如果为64GB物理内存,可取64*1024*1024*1024-1=68719476735。

实际可用最大共享内存段大小=shmmax*98%,其中大约2%用于共享内存结构。可以通过设置shmmax,然后执行ipcs-l来验证。

kernel.sysrq=0

控制系统调试内核的功能,不同的值对应不同的功能:

0完全禁用sysrq组合键

1启用sysrq组合键的全部功能

2启用控制台日志级别控制

4启用键盘控制(SAK、unraw)

8启用进程的调试信息输出等

16启用同步命令

32启用重新挂载为只读

64启用进程信号(终止、杀死、溢出杀死)

128允许重启/关机

256控制实时任务的优先级控制(nicing)

net.core.netdev_max_backlog=262144

表示当每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目。

net.core.rmem_default=8388608

为TCPsocket预留用于接收缓冲的内存默认值。

net.core.rmem_max=16777216

为TCPsocket预留用于接收缓冲的内存最大值。

net.core.somaxconn=128

listen(函数)的默认参数,挂起请求的最大数量限制。web应用中listen函数的backlog默认会给我们内核参数的net.core.somaxconn限制到128。nginx服务器中定义的NGX_LISTEN_BACKLOG默认为511。

net.core.wmem_default=8388608

为TCPsocket预留用于发送缓冲的内存默认值。

net.core.wmem_max=16777216

为TCPsocket预留用于发送缓冲的内存最大值。

net.ipv4.conf.all.accept_source_route=0、net.ipv4.conf.default.accept_source_route=0

处理无源路由的包。

net.ipv4.conf.all.rp_filter=1、net.ipv4.conf.default.rp_filter=1

开启反向路径过滤。

net.ipv4.ip_forward=0、net.ipv4.conf.all.send_redirects=0、v4.conf.default.send_redirects=0

不充当路由器。

net.ipv4.icmp_echo_ignore_broadcasts=1

避免放大攻击。

net.ipv4.icmp_ignore_bogus_error_responses=1

开启恶意ICMP错误消息保护。

net.ipv4.ip_local_port_range=102465535

增加系统IP端口限制。表示用于向外连接的端口范围。参考

net.ipv4.tcp_fin_TImeout=30

如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。对端可以出错并永远不关闭连接,甚至意外宕机。缺省值是60s,2.2内核通常是180s,你可以按这个设置,但要记住的是,即使你的机器是一个轻载的WEB服务器,也有因为大量的死套接字而内存溢出的风险,FIN-WAIT-2的危险性比FIN-WAIT-1要小,因为它最多只能吃掉1.5k内存,但是它们的生存期长些。

net.ipv4.tcp_keepalive_TIme=1200

表示当keepalive起作用的时候,TCP发送keepalive消息的频度。(单位:秒,缺省值:2小时)

net.ipv4.tcp_max_orphans=3276800

表示系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。这个限制仅仅是为了防止简单的DoS攻击,不能郭飞依赖依靠它或者认为地减小这个值,如果增加了内存之后,更应该增加这个值。

net.ipv4.tcp_max_syn_backlog=262144

记录的是那些尚未收到客户端确认信息的连接请求的最大值。对于有128M内存的系统而言,缺省值是1024,小内存的系统则是128。

net.ipv4.tcp_max_tw_buckets=6000

表示系统同时保持TIME_WAIT套接字的最大数量,默认是180000。

net.ipv4.tcp_mem=94500000915000000927000000

确定TCP栈应该如何反映内存使用;每个值的单位都是内存页(通常是4KB):

第一个值是内存使用的下限。

第二个值是内存压力模式开始对缓冲区使用应用压力的上限。

第三个值是内存上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。对于较大的BDP可以增大这些值(但是要记住,其单位是内存页,而不是字节)。

net.ipv4.tcp_sack=1

启用有选择的应答(1表示启用),通过有选择地应答乱序接收到的报文来提高性能,让发送者只发送丢失的报文段,(对于广域网通信来说)这个选项应该启用,但是会增加对CPU的占用。

net.ipv4.tcp_synack_retries=1

为了打开对端的连接,内核需要发送一个SYN并附带一个回应前面一个SYN的ACK。也就是所谓三次握手中的第二次握手。这个设置决定了内核放弃连接之前发送SYN+ACK包的数量。

net.ipv4.tcp_syncookies=1

开启SYN洪水攻击保护。

net.ipv4.tcp_syn_retries=1

在内核放弃建立连接之前发送SYN包的数量。

net.ipv4.tcp_TImestamps=0

该参数用于设置时间戳,可以避免序列号的卷绕。一个1Gbps的链路肯定会遇到以前用过的序列号。时间戳能够让内核接受这种“异常”的数据包。设置为0表示将其关掉。

net.ipv4.tcp_tw_recycle=0

是否开启TCP连接中TIME-WAITsockets的快速回收,0表示关闭,1表示开启。当tcp_tw_recycle与tcp_timestamp同时开启时会降低连接成功率。

net.ipv4.tcp_tw_reuse=1

是否开启重用,允许将TIME-WAITsockets重新用于新的TCP连接,0表示关闭,1表示开启。

net.ipv4.tcp_window_scaling=1

启用RFC1323定义的windowscaling,要支持超过64KB的TCP窗口,必须启用该值(1表示启用),TCP窗口最大至1GB,TCP连接双方都启用时才生效。

net.ipv6.conf.all.disable_ipv6=1、net.ipv6.conf.default.disable_ipv6=1

禁用IPv6

linux内核的功能有哪些

内核主要有以下4能:系统内存管理;软件程序管理;硬件管理;文件系统管理;

(1)系统内存管理

内存管理是操作系统内核的主要功能之一。内核不仅能管理可用的物理内存,还可以创建并管理虚拟内存。

内存管理必须使用硬盘空间,该空间被称为交换空间。内核不断的在该交换空间和实际物理内存之间交换虚拟内存位置的内容。这样系统的可用内存比实际内存多。

将内存位置分组为多个数据块,此操作被称为分页。内核定位物理内存或交换空间中的每个内存分页,然后维护一个内存分页页表,此表说明位于物理内存的分页和交换到磁盘的分页。内存跟踪使用的分页,并且自动将一段时间没有用到的内存分页复制到交换空间区域,称为换出过程。即使内存够也执行这个过程。当程序需要访问已经换出的分页时,内存必须换出另一个分页,以在物理内存中为该内存分页腾出空间,然后从交换空间换入需要的分页。

在Linux系统上运行的每个进程都有自己的内存分页,一个进程不能访问另一个进程正在使用的分页。内核也有自己的内存区域,出于安全考虑,任何进程都不能访问内核进程正在使用的内存。

(2)软件程序管理

正在运行的程序被称为进程。进程可以在前台运行,也可以在后台运行。

内核创建的第一个进程被称为初始进程,该进程在系统上启动所有其它进程。内核启动的时候,初始进程被加载到虚拟内存中,内存每启动一个其它进程,都将在虚拟内存中为其分配一个唯一的空间,用于储存该进程的数据和代码。

(3)硬件管理

Linux系统需要与之通信的设备都必须在内核代码中插入驱动程序代码。驱动程序代码使内核能够向设备传输数据。在Linux中插入设备驱动的程序有两种方法:

1.在内核中编译驱动程序。

2.向内核添加驱动程序模块。

Linux将硬件设备标识为特殊文件,称为设备文件。设备文件分为3种:

1.字符

2.块

3.网络

字符设备文件用于那些一次仅处理一个字符的设备。块文件用于那些一次可处理大量数据块的设备。网络文件用于那些使用数据包发送和接收数据的设备。

(4)文件系统管理

Linux系统可以使用不同类型的文件系统与硬盘传输数据。除了本身的文件系统外,还可以通过其他的操作系统使用的文件系统传输数据。Linux内核使用虚拟文件系统与每个文件系统进行连接。为内核与其他文件系统类型的通信提供了一个标准接口,挂载和使用每个文件系统时。虚拟文件系统中缓存相关的信息。

以上的内容你了解了吗?


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
开机进不了windows系统怎么办