首页 > 其他分享 >内核参数的作用域学习

内核参数的作用域学习

时间:2023-02-01 13:59:14浏览次数:43  
标签:大页 作用域 参数 内核 进程 net ipv4 内存

内核参数作用域的情况

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一样, 不要大于系统的设置值. 
   因为大页内容相当于申请出来,一程序不会进行使用的. 

标签:大页,作用域,参数,内核,进程,net,ipv4,内存
From: https://www.cnblogs.com/jinanxiaolaohu/p/17082280.html

相关文章