`

linux几个内核参数优化配置

 
阅读更多

1、设置内存分配策略:vm.overcommit_memory

#查看配置

cat /proc/sys/vm/overcommit_memory

#解释

0、表示内核将检查是否有足够的可用内存供应用进程使用;如果有足够的可用内存,内存申请允许;否则,内存申请失败,并把错误返回给应用进程。

1、表示内核允许分配所有的物理内存,而不管当前的内存状态如何。

2、表示内核允许分配超过所有物理内存和交换空间总和的内存

#修改配置值为1,三种方式(root权限):

A、echo "vm.overcommit_memory=1" > /etc/sysctl.conf  或 vi /etc/sysctl.conf,然后reboot重启机器

B、echo 1 > /proc/sys/vm/overcommit_memory  不需要启机器就生效

C、sysctl vm.overcommit_memory=1

#什么是Overcommit和OOM

Linux对大部分申请内存的请求都回复"yes",以便能跑更多更大的程序。因为申请内存后,并不会马上使用内存。这种技术叫做Overcommit。当linux发现内存不足时,会发生OOM killer(OOM=out-of-memory)。它会选择杀死一些进程(用户态进程,不是内核线程),以便释放内存。

当oom-killer发生时,linux会选择杀死哪些进程?选择进程的函数是oom_badness函数(在mm/oom_kill.c中),该函数会计算每个进程的点数(0~1000)。点数越高,这个进程越有可能被杀死。每个进程的点数跟oom_score_adj有关,而且oom_score_adj可以被设置(-1000最低,1000最高)。

 

2、swapiness

#解释

linux 会使用硬盘的一部分做为SWAP分区,用来进行进程调度--进程是正在运行的程序--把当前不用的进程调成‘等待(standby)‘,甚至‘睡眠(sleep)’,一旦要用,再调成‘活(active)’,睡眠的进程就躺到SWAP分区睡大觉,把内存空出来让给‘活动’的进程。

如果内存够大,应当告诉linux不必太多的使用SWAP分区,可以通过修改swappiness的数值。swappiness=0的时候表示最大限度使用物理内存,然后才是swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。

#修改前的准备

cat /proc/version,查看linux内核版本

如果linux内核版本<3.5,那么swapiness设置为0,这样系统宁愿swap也不会oom killer(杀掉进程)

如果linux内核版本>=3.5,那么swapiness设置为1,这样系统宁愿swap也不会oom killer

#临时修改

echo 0 > /proc/sys/vm/swappiness

#永久修改,需要reboot

echo vm.swapiness=0 >> /etc/sysctl.conf 或 vi /etc/sysctl.conf,然后reboot重启机器

 

3、ulimit

#解释

显示(或设置)用户可以使用的资源的限制(limit),这限制分为软限制(当前限制)和硬限制(上限),其中硬限制是软限制的上限值,应用程序在运行过程中使用的系统资源不超过相应的

软限制,任何的超越都导致进程的终止。

#命令参数解释

-a 列出所有当前资源极限

-c 设置core文件的最大值.单位:blocks

-d 设置一个进程的数据段的最大值.单位:kbytes

-f Shell 创建文件的文件大小的最大值,单位:blocks

-h 指定设置某个给定资源的硬极限。如果用户拥有 root 用户权限,可以增大硬极限。任何用户均可减少硬极限

-l 可以锁住的物理内存的最大值

-m 可以使用的常驻内存的最大值,单位:kbytes

-n 每个进程可以同时打开的最大文件数

-p 设置管道的最大值,单位为block,1block=512bytes

-s 指定堆栈的最大值:单位:kbytes

-S 指定为给定的资源设置软极限。软极限可增大到硬极限的值。如果 -H 和 -S 标志均未指定,极限适用于以上二者

-t 指定每个进程所使用的秒数,单位:seconds

-u 可以运行的最大并发进程数

-v Shell可使用的最大的虚拟内存,单位:kbytes

#查看单个进程最多打开的资源数(即并发连接)

ulimit -n

#修改配置

ulimit -n 65536

 

4、somaxconn

#解释

对于一个TCP连接,Server与Client需要通过三次握手来建立网络连接.当三次握手成功后, 我们可以看到端口的状态由LISTEN转变为ESTABLISHED,接着这条链路上就可以开始传送数据了。

每一个处于监听(Listen)状态的端口,都有自己的监听队列.监听队列的长度

#查看队列大小

cat /proc/sys/net/core/somaxconn

#修改队列大小

echo 1024 > /proc/sys/net/core/somaxconn

或者

永久生效: 

vim /etc/sysctl.conf net.core.somaxconn=32768 

sysctl -p 

立即生效:

sysctl -w net.core.somaxconn=32768

备注

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

的系统性能。用sysctl可以读取设置超过五百个系统变量。

-n:打印值时不打印关键字;

-e:忽略未知关键字错误;

-N:仅打印名称;

-w:当改变sysctl设置时使用此项;

-p:从配置文件“/etc/sysctl.conf”加载内核参数设置;

-a:打印当前所有可用的内核参数变量和值;

-A:以表格方式打印当前所有可用的内核参数变量和值。

分享到:
评论

相关推荐

    u-boot向linux内核传递启动参数(详细).pdf

    U-Boot是嵌入式设备常用的...掌握U-Boot如何向Linux内核传递启动参数的知识,对于开发嵌入式Linux系统至关重要,能够帮助开发者理解系统启动时的底层细节,以及如何配置和优化这些参数,以确保系统的稳定性和性能。

    Linux内核配置与文件系统的优化方法研究

    优化内核配置包括以下几个方面: 1. **裁剪无用模块**:根据服务器的硬件特性和服务类型,去除不必要的驱动程序和功能模块,减小内核体积,提高启动速度和运行效率。 2. **启用性能优化选项**:比如开启预读取...

    [Linux内核精髓:精通Linux内核必会的75个绝技]---高清版.pdf

    - 掌握如何通过调整内核参数来优化系统性能。 4. 文件系统 - 熟悉Linux内核支持的各种文件系统,如ext4、btrfs等。 - 学习文件系统的挂载、卸载以及文件系统的维护技术。 - 理解虚拟文件系统(VFS)的概念和...

    linux-2.6.28内核配置中文手册

    配置内核时,我们需要了解以下几个关键概念: 1. **内核编译选项**:内核配置通常通过`make menuconfig`命令启动图形化的配置界面,或者使用`make config`、`make oldconfig`等命令。用户可以在此选择启用、禁用或...

    Linux内核设计的艺术 图解Linux操作系统架构设计与实现原理.pdf

    为了深入理解Linux内核的设计艺术,我们可以从以下几个方面着手分析: 一、主奴机制设计思想 Linux内核的核心设计思想之一是主奴机制,它规定了操作系统内核与用户进程之间的关系,就像主人和奴隶一样,内核拥有对...

    《Linux设备驱动开发详解——基于最新的Linux4.0内核》源码.zip

    驱动程序的开发通常分为以下几个步骤: 1. **驱动程序的结构**:理解Linux驱动的基本结构,包括初始化、设备注册、设备注销、中断处理等关键函数。 2. **字符设备驱动**:学习如何创建和管理字符设备,使用`struct...

    Linux内核模块和驱动的编写.rar_linux 妯″潡_linux内核_内核_内核模块_驱动内核删除

    编写Linux内核模块主要涉及以下几个关键点: 1. **模块头文件**:每个内核模块都需要包含`&lt;linux/module.h&gt;`和`&lt;linux/kernel.h&gt;`头文件,它们提供了内核模块所需的定义和函数声明。 2. **初始化和退出函数**:每...

    Linux内核代码阅读心得体会.pdf

    文档中提到的几个关键步骤包括内核的生成、BIOS的作用、setup辅助程序、内核解压缩、开启页面映射和链接脚本等。这些步骤是理解操作系统如何从计算机加电开始,逐步加载并初始化的过程。例如,BIOS作为计算机启动时...

    Linux2.6内核的vivi分区及内核MTD分区.pdf

    在Nand Flash中,Vivi将存储空间划分为几个区域,包括vivi、param、kernel和root,每个区域都有特定的用途。例如,vivi分区可能用于存放Bootloader自身的代码,param分区存储系统参数,kernel分区用于存放Linux内核...

    Linux 内核参数详解-KERNEL.docx

    以上列出的Linux内核参数涵盖了从系统调度到安全、从进程管理到随机数生成等多个方面。正确理解和使用这些参数对于优化Linux系统的性能和稳定性至关重要。在调整这些参数之前,建议详细了解它们的作用以及可能带来的...

    LINUX内核源码剖析-下册.zip

    9. 性能优化:探讨内核性能分析工具,如 perf,以及优化策略,如何通过调整内核参数提升系统性能。 通过阅读《LINUX内核源码剖析-下册》这本书,读者不仅可以了解Linux内核的基本架构,还能掌握如何分析和修改内核...

    linux内核研究与探索

    10. **性能优化**:讨论如何通过系统调用、内核参数调整和硬件配置提升Linux系统的整体性能。 通过《Linux内核研究与探索》,读者不仅可以学习到Linux内核的基本原理,还能了解到实际开发和优化过程中所涉及的技巧...

    Linux内核解读入门

    本篇文章将从以下几个方面详细介绍Linux内核的入门知识: 一、Linux内核概述 Linux内核是由林纳斯·托瓦兹(Linus Torvalds)在1991年创建的,它是一个自由、开放源码的类Unix操作系统内核。Linux内核被设计成模块...

    Linux2.6内核usb gadget驱动移植

    配置过程中会涉及到几个关键的选项: - `&lt;M&gt;` File-backed Storage Gadget:选择此选项以编译`g_file_storage.ko`模块,该模块可以将存储设备(如SD卡)模拟成U盘。 - `USB Peripheral Controller (S3C2410 USB ...

    疯狂内核之——Linux预备知识.pdf

    当一个程序在Linux环境下运行时,它的执行过程可以分为以下几个阶段: 1. **加载**:当用户执行一个程序时,操作系统会将程序的二进制代码加载到内存中。 2. **正文区**:程序的主要执行代码所在的内存区域。 3. **...

    Linux内核源代码情景分析 (上下册 高清非扫描 )

    - **2.3 几个重要的数据结构和函数** - 数据结构如`struct page`、`struct mm_struct`等,它们是内存管理的核心组成部分。 - 函数如`alloc_pages`用于分配物理页面,`free_pages`用于释放物理页面等。 - **2.4 ...

    linux启动时间优化

    - **调整内核参数**:如调整swap空间、内存分配策略等,以优化启动过程中的资源利用。 ##### 文件系统 - **选择合适的文件系统**:例如使用ext4代替ext3,可以提高读写速度。 - **优化文件系统参数**:如设置正确...

Global site tag (gtag.js) - Google Analytics