内核参数的作用域学习

内核,参数,作用域,学习 · 浏览次数 : 109

小编点评

**内核参数作用域** 内核参数的作用域是指该参数对哪些进程或线程有效。 * **全系统生效的参数**: * `net.ipv4.tcp_syncookies`:该参数设置 TCP 连接窗口大小。 * `net.ipv4.ip_local_port_range`:该参数设置了 TCP 端口范围。 * `net.ipv4.tcp_max_tw_buckets`:该参数设置了 TCP 流量缓存桶数量。 * **进程生效的参数**: * `fs.file-max`:该参数设置了文件打开数的限制。 * `fs.nr_open`:该参数设置了单个进程能够打开的最大文件数。 * `fs.file-nr`:该参数设置了全局文件描述符数量。 * **协同作用参数**: * `nofile`:该参数限制单个进程打开的文件数。

正文

内核参数作用域的情况

1. 全系统生效
2. 进程生效
3. 用户生效
4. 协同作用.

# 本文并不会按照范围进行单独阐述
# 会按照一个作用链条进行说明.

nofile

number of file 
本质是一个进程能够打开文件数的限制. 
是操作系统避免单个线程文件数打开过多,导致系统资源耗尽的一个保护机制. 
第一层是全局发生作用的一些参数
fs.file-max = 3265659
该参数是整个系统能够打开的file handler 的总量. 所有的进程打开文件数总和不能超过这个数. 
需要注意, 这个是针对整个系统的限制. 
fs.nr_open = 1048576
该参数是决定单个进程最大的打开文件数. 
需要注意 这个是针对单一进程的限制. 
fs.file-nr = 9792       0       3265659
这个是一个状态指示的文件,一共三个值,
第一个代表全局已经分配的文件描述符数量,
第二个代表自由的文件描述符(待重新分配的),
第三个代表总的文件描述符的数量。

需要注意, 这几个参数的默认是是不一样的. 云服务器的一般是300万多. 
自己搭建的centos 是 680万
但是国产操作系统的默认值是: 9223372036854775807
位数太多, 请自己数 !-_-!

有了如上三个参数之后 就是 Linux系统里面的 /etc/security/limits.conf
一般可以在文件的最后增加: 
* soft nofile 65535
* hard nofile 65535
需要注意, 这个参数是针对某些用户单个线程打开的文件数限制. 
作用域最小. 但是用到的最多. 

网络参数

网络参数已经多次讲述, 这里主要是想描述一下几个参数的作用域

# 全系统生效的参数:
net.ipv4.tcp_syncookies = 1
net.ipv4.ip_forward = 0 # 如果是docker后者是KMV必须打开
net.ipv4.tcp_rmem = 4096 87380 8388608
net.ipv4.tcp_wmem = 4096 87380 8388608
net.core.rmem_max = 8388608
net.core.wmem_max = 8388608
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_tw_buckets = 5000

# 针对具体进程生效的全局参数
net.core.netdev_max_backlog = 5000
net.ipv4.ip_local_port_range = 2000 65000
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 4096

网络参数

着重说明几个参数
1. backlog
backlog 是绝对单个进程TCP全连接大小的一个绝对因素.
都是配置全局生效,但是作用域是针对单个进程/线程来区分的.

2. net.ipv4.ip_local_port_range
的参数也类似. 是全局生效,但是一组相同的对端 TCP四元组来进行限制.
比如 我nginx可以使用portreuse的方式实现多个进程进行绑定 同一个端口号
但是port_range是针对TCP的四元组来进行限制,不是根据多个worker进程来进行成绩限制
他限制的是TCP级别的总量,而不是进程级别

3. net.ipv4.tcp_max_tw_buckets
这个参数是一个总计参数.
是所有的进程time_wait的总计个数.  不区分进程进行统计 
作用域是整个系统. 
所有的TCP连接的time_wait总量是这个数据. 

4. 关于文件参数和网络参数.
文件的TCP建立数量绝对不可能大于nofile的数量
unix 里面一切皆文件. 
C100K理论 至少两个进程 并且nofile 也要接近或者是超过100k个有可能实现. 

大页内存的优势

1. 大页内会不会因为内存压力导致被swap到磁盘空间.
   这会保证内存一直在物理内存中,性能最好. 
2. 大页内存占用的页表项比较少,相同大小的TLB可以管理更大空间的内容
   OS或者是Oracle在寻址时TLB被刷新的概率会减少.
   能够极大的提高系统的性能, 避免出现性能衰退. 

大页内存

Oracle数据库为了提高性能, 在大内存的情况下 要求启用大页内存
# 需要注意, Oracle要求关闭 红帽开发的透明大页. 
主要涉及的参数有:
第一步查看大页内存的大小
cat /proc/meminfo | grep Huge
Hugepagesize:       2048 kB
Hugepagesize:     524288 kB  # 华为云鲲鹏虚拟机. 
# 注意这个参数一般的系统默认值是 2MB, 但是华为云鲲鹏默认值是 512MB
支持的大页内存大小可以通过如下目录进行查看:
ls  /sys/kernel/mm/hugepages/
ARM机器的结果为:
hugepages-2048kB  hugepages-524288kB
x86机器的结果为:
hugepages-1048576kB  hugepages-2048kB
# 理论上可以修改.  内存页面的默认大小都是4KB. 不过部分ARM服务器是 64KB 
getconf PAGE_SIZE
部分ARM机器的为: 
65536
x86机器的为:
4096

大页内存

第二步 设置大页数量
编辑配置文件: sysctl.conf
增加一行
vm.nr_hugepages = 10240
在2MB大页的情况下, 会创建20G的大页空间. 
sysctl -p 可以使之生效. 

另外还有一些参数: 
shmall 是全部允许使用的共享内存大小,
shmmax 是单个段允许使用的大小。这两个可以设置为内存的 90%。
例如 16G 内存:
shmmax 的大小为 16*1024*1024*1024*90% = 15461882265,
shmall 的大小为 15461882265/4k(getconf PAGESIZE可得到) = 3774873。

增加memlock的限制
*    hard   memlock           unlimited
*    soft   memlock           unlimited

大页内存的其他设置

1. Oracle更改SGA或者是memory_target的数值
   注意这个数值不能的大于 getconf PAGESIZE * vm.nr_hugepages
   建议要稍微小一些. 
   也不能大于shmmax

2. JVM启动服务时的设置. 
   增加配置节: -XX:+UseLargePages  -XX:LargePageSizeInBytes=2m
   一般只有大于32G的堆区设置大页内存才会有提升. 较小的堆区意义不大. 
   建议与Oracle一样, 不要大于系统的设置值. 
   因为大页内容相当于申请出来,一程序不会进行使用的. 

与内核参数的作用域学习相似的内容:

内核参数的作用域学习

内核参数作用域的情况 1. 全系统生效 2. 进程生效 3. 用户生效 4. 协同作用. # 本文并不会按照范围进行单独阐述 # 会按照一个作用链条进行说明. nofile number of file 本质是一个进程能够打开文件数的限制. 是操作系统避免单个线程文件数打开过多,导致系统资源耗尽的一

阿里140逆向纯与补

声明 本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 目标网站 aHR0cHM6Ly93d3cuanVtaW5nLmNvbS8= 分析逆向流程 今天我们看看ali的的n参数为140

[转帖]正则表达式边玩边学

最近在学习极客时间的《正则表达式入门课》,感觉很适合入门玩,所以简单作一些笔记方便查找参考。 正则,就是正则表达式,英文是 Regular Expression,简称 RE。顾名思义,正则其实就是一种描述文本内容组成规律的表示方式。在编程语言中,正则常常用来简化文本处理的逻辑。在 Linux 命令中

[转帖]Linux 生产内核网络参数调优分析

https://www.jianshu.com/p/634ea67ac23a Linux 生产内核网络参数调优分析 本文总结了常见的 Linux 内核参数及相关问题。修改内核参数前,您需要: 从实际需要出发,最好有相关数据的支撑,不建议随意调整内核参数。 了解参数的具体作用,且注意同类型或版本环境的

[转帖]Linux内核参数net.ipv4.ip_local_port_range对服务器连接数影响的正确解释

首先明确一下该参数的意义:net.ipv4.ip_local_port_range表示本机作为客户端对外发起tcp/udp连接时所能使用的临时端口范围。 对于TCP连接,本机所能发起的tcp连接数受四元组(源地址*源端口*目标地址*目标端口)限制。 而对于UDP连接,本机所能发起的udp连接数则受二

[转帖]Nginx10万+并发 内核优化

由于默认的linux内核参数考虑的是最通用场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数,是的Nginx可以拥有更高的性能; 在优化内核时,可以做的事情很多,不过,我们通常会根据业务特点来进行调整,当Nginx作为静态web内容服务器、反向代理或者提供压缩服

[转帖]Linux之系统参数overcommit_memory

https://www.modb.pro/db/25980 前言:作为DBA,内存的使用情况是重要的监控指标之一,了解内存使用很重要。下面有一个系统参数,对于内存的调用起到重要的作用。大家可以了解一下。 参数overcommit_memory:overcommit的中文意思是过量使用,那overco

[转帖]基于 Nginx 实现 10万+ 并发,Linux 内核优化

来源:http://t.cn/EyQTMwG 由于默认的Linux内核参数考虑的是最通用场景,这明显不符合用于支持高并发访问的Web服务器的定义,所以需要修改Linux内核参数,是的Nginx可以拥有更高的性能; 在优化内核时,可以做的事情很多,不过,我们通常会根据业务特点来进行调整,当Nginx作

[转帖]一个简单的内核参数优化

一个简单的内核参数优化 作者:孤风孤影 https://www.bilibili.com/read/cv15200947/ 出处:bilibili net.ipv4.tcp_keepalive_time=600 #此参数表示TCP发送keepalive探测消息的间隔时间(秒) net.ipv4.tc

《系列二》-- 2、bean 的作用域: Scope 有哪些

[TOC] > 阅读之前要注意的东西:本文就是主打流水账式的源码阅读,主导的是一个参考,主要内容需要看官自己去源码中验证。全系列文章基于 spring 源码 5.x 版本。 写在开始前的话: 阅读spring 源码实在是一件庞大的工作,不说全部内容,单就最基本核心部分包含的东西就需要很长时间去消化了