关于内存配置相关内核参数的再学习

关于,内存,配置,相关,内核,参数,学习 · 浏览次数 : 146

小编点评

## 服务器内存配置参数解析 **1. `vm.swappiness`** * 描述:该参数用于控制内核将数据从 RAM交换到 swap 空间的频率。 * 值:介于 0 和 100 之间的百分比,表示交换频率。 * 建议值:根据应用程序的内存配置或服务器用途,在某些情况下可调整。 **2. `vm.min_free_kbytes`** * 描述:当可用内存低于此参数时回收 cache 的最小空闲内存量。 * 单位: KB。 * 建议值:根据系统内存实际需求进行调整。 **3. `vm.vfs_cache_pressure`** * 描述:该参数用于控制内核回收目录和 inode cache 的倾向。 * 值:100 表示内核将倾向于保留目录和 inode cache。 * 建议值:建议给机器保留最较大的最小可用内存,并适当调整该数值。 **4. `vm.dirty_background_ratio`** * 描述:当缓存数据所占总内存的比例超过此参数时触发刷磁盘操作。 * 值:表示大小比例。 * 建议值:根据性能需求进行调整。 **5. `vm.dirty_ratio`** * 描述:当缓存数据所占比例超过此参数时停止应用层IO写操作,等待刷完数据后恢复IO。 * 值:默认值为 0,表示不限制缓存数据大小。 * 建议值:如果IO很好,并且有BBU,可以适当改大。 **6. `vm.dirty_expire_centisecs`** * 描述:与 `vm.dirty_background_ratio` 一起作用,表示刷盘的条件。 * 值:表示大小比例。 * 建议值:默认值为 30 秒,可根据性能进行调整。 **7. `vm.dirty_writeback_centisecs`** * 描述:刷磁盘频率。 * 值:默认值为 5 秒,可根据性能进行调整。 **一些建议:** * 建议给服务器留足的最小可用内存空间。 *适当调整 `vm.min_free_kbytes`、`vm.vfs_cache_pressure` 和 `vm.dirty_background_ratio` 等参数。 * 在进行内存配置优化时,需要考虑性能和内存利用效率之间的平衡。

正文

关于内存配置相关内核参数的再学习


摘要

上周一台192G内存的跑着重型拆分微服务的服务器宕机了.
服务器上面还有一套30个pdb的Oracle数据库. 

实际原因是因为内存耗尽. 导致机器无响应.
控制台没有任何反馈. 没办法的情况下进行了重启操作. 

当时没有进行彻查. 今天有同事反馈这台服务器上面的消息队列出现异常
怀疑跟上次宕机有关系, 但是实际上.消息队列服务器不在同一台机器上面.

但是为了自证清白, 想着将宕机问题给梳理一下. 

涉及到的内存参数

vm.swappiness
vm.min_free_kbytes 
vm.vfs_cache_pressure
vm.dirty_ratio
vm.dirty_background_ratio 
vm.dirty_expire_centisecs
vm.dirty_writeback_centisecs

本次学习参考了比较多的文档主要有如下几个:
https://www.modb.pro/db/34028
https://blog.csdn.net/weixin_35974217/article/details/116740461
https://blog.csdn.net/weixin_39472686/article/details/124707607

参数说明-1

vm.swappiness :
swappiness参数是将数据从RAM交换到swap空间的频率。
这是一个介于0和100之间的值,代表一个百分比。

!! 如果值接近 0,除非绝对必要,否则内核不会将数据交换到硬盘。

记住,与swap文件的交互是“昂贵的”,因为它们比与RAM的交互花费的时间要长得多,并且会导致性能显著降低。
告诉系统不要太依赖swap通常会使系统更快。

!! 如果接近100的值将尝试将更多数据放入swap,以保持更多的RAM空间。

根据应用程序的内存配置文件或服务器的用途,在某些情况下这可能会更好。

应用服务器其实可以关闭swap 执行swpaoff -a 的命令.
数据库服务器不建议如此操作, 如果当时数据库crash, 会出现灾难性的问题. 

参数说明-2

vm.min_free_kbytes
表示强制Linux VM最低保留多少空闲内存
当可用内存低于这个参数时,系统开始回收cache内存,以释放内存,直到可用内存大于这个值
注意单位是 KB

vm.vfs_cache_pressure
该文件表示内核回收用于directory和inode cache内存的倾向;

缺省值100表示内核将根据pagecache和swapcache,把directory和inode cache保持在一个合理的百分比;
降低该值低于100,将导致内核倾向于保留directory和inode cache;
增加该值超过100,将导致内核倾向于回收directory和inode cache。

建议给机器保留最较大的最小可用内存.
并且建议适当改大这个数值. 保证内存可以有合理的使用期间, 避免被缓存占用. 
# 注意服务器比较大可以等比例扩大, 我暂时写一个5G
# 因为我们这边对稳定性要求高于RT,所以我把数值改大.

参数说明-3

vm.dirty_background_ratio 
当cached中缓存当数据占总内存的比例达到这个参数设定的值时将触发刷磁盘操作。
把这个参数适当调小,这样可以把原来一个大的IO刷盘操作变为多个小的IO刷盘操作,从而把IO写峰值削平。

对于内存很大和磁盘性能比较差的服务器,应该把这个值设置的小一点。

vm.dirty_ratio
如果cached的数据所占比例(这里是占总内存的比例)超过这个设置,
系统会停止所有的应用层的IO写操作,等待刷完数据后恢复IO。
所以万一触发了系统的这个操作,对于用户来说影响非常大的。

对于写压力特别大的,建议把这个参数适当调大;对于写压力小的可以适当调小;

因为我这边机器的IO都很垃圾, 我把参数修改为默认值的一半. 如果IO很好,并且有BBU,可以适当改大. 

参数说明-4

vm.dirty_expire_centisecs
这个参数会和参数vm.dirty_background_ratio一起来作用,
一个表示大小比例,一个表示时间;
即满足其中任何一个的条件都达到刷盘的条件。
跟Redis的 save方式是一样的, 量或者是时间有一个打到就可以进行刷盘处理. 
单位是 1/100 秒. 默认值是30秒

vm.dirty_writeback_centisecs
理论上调小这个参数,可以提高刷磁盘的频率,从而尽快把脏数据刷新到磁盘上。
但一定要保证间隔时间内一定可以让数据刷盘完成。
默认值是 5 秒. 理论上可以改短. 保证数据安全. 根据性能来单独确定. 

理论上改小了 可以实现削峰填谷. 对整天的吞吐量有一定的好处. 
但是如果是经常突发流量请求. 可能表现不如持久均衡的流量来的好.
任何决策都是需要均衡的. 

某些情况下的最佳实践

sysctl -w vm.swappiness=10
sysctl -w vm.min_free_kybtes=5,242,880
sysctl -w vm.vfs_cache_pressure=200
sysctl -w vm.dirty_background_ratio=5
sysctl -w vm.dirty_ratio=10
sysctl -w vm.dirty_expire_centisecs=1500
sysctl -w vm.dirty_writeback_centisecs=300

与关于内存配置相关内核参数的再学习相似的内容:

关于内存配置相关内核参数的再学习

# 关于内存配置相关内核参数的再学习 ## 摘要 ``` 上周一台192G内存的跑着重型拆分微服务的服务器宕机了. 服务器上面还有一套30个pdb的Oracle数据库. 实际原因是因为内存耗尽. 导致机器无响应. 控制台没有任何反馈. 没办法的情况下进行了重启操作. 当时没有进行彻查. 今天有同事反

TCP内核参数与Nginx配置的简单测试

背景 昨天晚上整理了下几个TCP内核的参数. 学习到了一点内核参数的影响. 但是因为时间比较晚了没有继续钻研与nginx的关系 今天想着继续研究一下TCP的部分参数与nginx的关系 每个系统都不一样. 结果可能跟内核版本和内核参数强相关. 我这里用的是基于ARM的银河麒麟 还有基于x86的Open

[转帖]jvm一般相关配置OutOfMemoryError关参数配置解释

一般运行java应用都会根据实际情况设置一些jvm相关运行参数 特别是有关内存和oom溢出等参数,方便后续问题定位和解决 如常用的以下配置 nohup java -Xms256m -Xmx24g -Xmn8g -verbose:gc -XX:+PrintGCDateStamps -XX:+Print

35个Redis企业级性能优化点与解决方案

Redis作为企业级应用中广泛使用的高性能键值存储数据库,其性能优化是一个复杂且多面的话题。以下是V 哥整理的一些关键的优化点和相应的解决方案,提供给兄弟们参考。 Redis的性能优化涉及到硬件选择、配置调整、客户端优化、持久化策略等多个层面。 1. 硬件优化 解决方案:选择更快的CPU、更多的内存

Nuxt3页面开发实战探索

摘要:这篇文章是关于Nuxt3页面开发实战探索的。它介绍了Nuxt3的基础入门,安装与配置,项目结构,内置组件与功能,以及页面与路由的相关内容。Nuxt3是基于Vue 3的服务器端渲染框架,旨在简化Vue应用程序的开发流程,提供最佳的性能和开发

Strimzi Kafka Bridge(桥接)实战之一:简介和部署

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于《Strimzi Kafka Bridge(桥接)实战》 在strimzi技术体系中,桥接(bridge)是很要的功能,内容也很丰富,因此将桥接相关的

【ASP.NET Core】MVC控制器的各种自定义:应用程序约定的接口与模型

从本篇起,老周会连发N篇水文,总结一下在 MVC 项目中控制器的各种自定义配置。 本文内容相对轻松,重点讨论一下 MVC 项目中的各种约定接口。毕竟你要对控制器做各种自定义时,多数情况会涉及到约定接口。约定接口的结构都差不多,均包含一个 Apply 方法,实现类需要通过这个方法修改关联的模型设置。

[转帖]crash工具分析Kdump下vmcore文件常用命令总结(三)(实例易懂)

一、简介 本文主要介绍使用crash工具对kdump生成的vmcore文件进行分析,解析常见的crash命令,前面已讲述两章关于Kdump的内容,读者感兴趣可以点击下面的链接: 1、Kdump调试机理总结(一) 2、Kdump配置及使用详细总结(二) 系统产生异常时,触发Kdump机制,启动捕获内核

MyBatis 关于查询语句上配置的详细内容

1. MyBatis 关于查询语句上配置的详细内容 @目录1. MyBatis 关于查询语句上配置的详细内容2. 准备工作3. SQL查询结果,返回为POJO实体类型4. SQL查询结果,返回为List 集合类型5. SQL查询结果,返回为Map 集合6. SQL查询结果,返回为List

Linux的free命令与OOM的简单总结

简介 查看操作系统配置最关键的几个命令是 lscpu 查看CPU信息 以及free 查看内存信息. 不过free信息有一个疑惑点 他的 free的值可能很小. 会让搭建产生误解. 这里简单说明一下. free free -m 可以简单的以 MBytes 为单位展示系统的内存使用情况. free -m