《Linux从小白到高手》综合应用篇:详解Linux系统调优之内存优化

news2024/11/27 20:40:19

本篇介绍Linux服务器系统内存调优。
内存是影响Linux性能的主要因素之一,内存资源的充足与否直接影响应用系统的使用性能。内存调优的主要目标是合理分配和利用内存资源,减少内存浪费,提高内存利用率,从而提升系统整体性能。

1.内存相关重要命令及参数(不同版本略有区别,大家注意):

  1. uptime
    功能:查看系统当前时间、运行时间、登录用户数和平均负载。
    平均负载:显示系统在过去1、5和15分钟内的平均负载,有助于了解系统的负载情况。
    在这里插入图片描述
  2. free
    功能:查看内存使用的详细情况。
    参数:
    -k:以KB为单位显示内存的使用情况(默认);
    -m:以MB为单位显示内存的使用情况;
    -b:以byte为单位显示内存的使用情况;
    -h:以GB为单位显示内存的使用情况(常用)。
    输出内容:包括物理内存和交换空间的总量、已用量、空闲量和共享量等:
    在这里插入图片描述
  3. /proc/meminfo
    功能:查看buffer和cache的显示值,了解内存的使用情况:
    在这里插入图片描述
    buffer:缓冲,向磁盘中写入数据。
    cache:缓存,向磁盘中读数据。
  4. vmstat(Virtual Memory Statistics)
    功能:性能监控工具,显示关于系统各种资源之间相关性能的简要信息。
    输出内容:包括进程、内存、交换分区、块设备I/O、系统、CPU等方面的信息:
    在这里插入图片描述
    参数:
    -a:查看正在使用的内存量和一短时间内没有使用的内存量。
    -f:获取当前服务器的forks数量。
    -s:查看内存指标及系统事件信息。
    -d:查看磁盘的统计信息。
    -p:查看某一特定分区I/O信息。
  5. mpstat
    功能:统计处理器的详细信息:
    在这里插入图片描述
    参数:
    -P ALL:每秒钟打印一条所有CPU最新消息。
    -I:展示中断处理情况。
  6. iostat(这个命令主要是磁盘性能监控的,但也和内存息息相关,所以在此一并介绍)
    功能:监控磁盘使用情况。
    输出内容:包括CPU使用情况、设备(磁盘)的I/O统计信息等:
    在这里插入图片描述
    经验总结:
    –%idle值高,表示CPU较空闲。若%idle值高但系统响应慢,可能是CPU等待分配内存,此时应加大内存容量。
    –%idle小于70,I/O压力较大。
    –%idle值如果持续低于10,表明系统中最需要解决的资源是CPU。
    –如果%util比较大,说明I/O请求太多,硬盘可能存在瓶颈。
    –await大于svctm,差值越小,说明队列时间越短;反之差值越大,队列时间越长,说明系统出现了问题。
    –avgqu-sz队列长度也可衡量I/O负荷,avgqu-sz是单位时间内的平均值。
  7. cachestat命令
    功能:显示系统缓存的命中率等统计信息:
    输出内容:
    TOTAL:总的I/O次数。
    MISSES:缓存未命中的次数。
    HITS:缓存命中的次数。
    DIRTIES:新增到缓存中的脏页数。
    BUFFERS_MB:Buffers的大小(以MB为单位)。
    CACHED_MB:Cache的大小(以MB为单位)。
  8. cachetop命令
    功能:实时显示每个进程的缓存命中情况。
    输出内容:
    PID:进程ID。
    UID:用户ID。
    CMD:命令名。
    HITS:缓存命中次数。
    MISSES:缓存未命中次数。
    DIRTIES:新增到缓存中的脏页数。
    READ_HIT%:读缓存命中率。
    WRITE_HIT%:写缓存命中率。

2.内核参数调整

  1. vm.swappiness:定义了系统将内存页交换到磁盘的倾向程度。值为 0 表示尽量不使用交换分区,值为 100 表示积极使用交换分区(控制交换空间(swap)的使用)。值越低表示系统越倾向于使用物理内存,而不是交换空间;值越高表示系统越倾向于使用交换空间。对于内存较大的服务器,可以将这个值设置得较低,比如 10以下,以减少对交换分区的依赖,提高性能。
    –查看当前值:
cat /proc/sys/vm/swappiness

在这里插入图片描述
–设置swappiness:sudo sysctl vm.swappiness=[0,100]。
或者
–使用sysctl命令查看当前vm.swappiness的值:

sysctl vm.swappiness

在这里插入图片描述
–使用sysctl命令设置新的vm.swappiness值:sysctl -w vm.swappiness=新值,例如,设置为1:
sysctl -w vm.swappiness=1;
–为了使更改永久生效,可以将新的值添加到/etc/sysctl.conf文件中:echo “vm.swappiness=新值” >> /etc/sysctl.conf:
在这里插入图片描述
2. vm.vfs_cache_pressure:
控制内核回收目录项缓存和 inode 缓存的倾向程度。值较低时,内核倾向于保留缓存,以提高文件系统的访问速度;值较高时,内核会更积极地回收缓存,为其他内存需求让出空间。
查看当前值:cat /proc/sys/vm/vfs_cache_pressure。
设置值:sudo sysctl vm.vfs_cache_pressure=[新的值]。
3. vm.min_free_kbytes:
指定系统保留的最小空闲内存量。适当调整这个值可以确保系统在高负载时有足够的内存可用,避免内存耗尽。
查看当前值:cat /proc/sys/vm/min_free_kbytes。
设置值:sudo sysctl vm.min_free_kbytes=[新的值]。
4. dirty_background_ratio和vm.dirty_ratio=40
这两个参数也很关键,我自己就碰到过这两参数设置不当引起的服务器内存飙升问题,具体参见《基于Oracle DB的linux服务器性能调优》(博文地址:https://blog.csdn.net/qq_45732829/article/details/142098261),大家可以参考。

3. 大页内存(Huge Pages)和透明大页(Transparent Huge Pages)

很多人可能对大页内存(Huge Pages)和透明大页(Transparent Huge Pages)存在很多迷糊,尤其是是在数据库服务器和大型应用上,这个内容较多,下篇博文专题介绍。

4. 内存分配策略

–对于某些内存密集型应用,可以考虑调整内存分配器的策略。例如,使用glibc的malloc函数时,可以通过设置环境变量来调整分配策略:
MALLOC_ARENA_MAX:限制malloc使用的内存区域数量,避免过多的内存碎片;
MALLOC_MMAP_THRESHOLD:控制何时使用mmap进行内存分配,而不是从堆中分配。
–一些应用程序可能提供了特定的内存分配选项,可以根据应用程序的文档进行调整。

本篇完结。
码字不易,宝贵经验分享不易,请各位支持原创,转载注明出处,多多关注作者,家人们的点赞和关注是我笔耕不辍的动力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2206815.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

选择智能工单系统的理由,功能与效益分析

智能工单管理系统提升企业客户服务效率和质量,具备多渠道接收、智能分配、自动化处理等功能。ZohoDesk等系统通过实时响应、数据分析等优化服务流程,成为企业提升竞争力的关键工具。 一、智能工单管理系统的概念与优势 1. 智能工单管理系统概念 智能工…

【三】【算法】P1007 独木桥,P1012 [NOIP1998 提高组] 拼数,P1019 [NOIP2000 提高组] 单词接龙

P1007 独木桥 独木桥 题目背景 战争已经进入到紧要时间。你是运输小队长,正在率领运输部队向前线运送物资。运输任务像做题一样的无聊。你希望找些刺激,于是命令你的士兵们到前方的一座独木桥上欣赏风景,而你留在桥下欣赏士兵们。士兵们十分愤…

H3C GRE VPN基本配置实验

H3C GRE VPN基本配置实验 实验拓扑 ​​ 实验需求 按照图示配置 IP 地址在 R1 和 R3 上配置默认路由使公网区域互通在 R1 和 R3 上配置 GRE VPN,使两端私网能够互相访问,Tunnel 口 IP 地址如图在 R1 和 R3 上配置动态路由协议来传递两端私网路由 实…

盘点2024年双十一最值得入手的好物,双十一必买清单大汇总

随着科技的飞速发展,数码产品已成为我们生活中不可或缺的伙伴。2024年双十一购物狂欢节即将来临,众多消费者早已摩拳擦掌,准备在这个年度盛事中淘到心仪的数码好物。在这个信息爆炸的时代,如何从琳琅满目的商品中挑选出性价比高、…

项目管理系统介绍,核心概念与操作技巧

项目管理系统通过分解任务、管理工时、规划项目等提升效率,支持多种使用场景,具备高度可定制性,适合不同用户群体,注重数据安全,能与其他软件集成。ZohoProjects因全面功能、低价和友好界面受中小企业青睐。 一、项目管…

视频背景音乐怎么提取出来?音乐爱好者必看:视频音轨提取指南

在数字媒体时代,视频成为了一种非常流行的信息传播方式。有时候,我们在观看视频时会被其中的背景音乐所吸引,想要将其提取出来单独欣赏或用于其他用途。那么,视频背景音乐怎么提取出来呢?本文将为您详细介绍几种提取视…

【Windows】【DevOps】Windows Server 2022平台启用WinRM实现远程powershell登陆 采用自签名证书开启HTTPS方案

快速配置开启WinRM(HTTP) quiciconfig 在目标服务器上,管理员权限启动powershell,执行指令 winrm quickconfig 输入y,完整日志如下 PS C:\Windows\system32> winrm quickconfig 已在此计算机上运行 WinRM 服务。 WinRM 没有设置成为了…

探索SAM:介绍、应用与衍生方向

Segment Anything Model(简称SAM)是Facebook Research团队开发的一项先进的图像分割技术。它通过使用深度学习模型,能够识别并分割出图像中的各个物体。SAM的创新之处在于其能够通过不同的交互方式(如鼠标悬停、点击、框选和全图分…

pyQT生成界面,更改后不清除自定义代码的方法

基本原理就是作个子类继承生成的界面,在子类里写代码 工程结构 dialog_ui.py 界面子类 from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtGui import QStandardItemModel, QStandardItem, QColor, QFont from PyQt5.QtCore import Qt import Ui_dialog i…

带隙基准Bandgap电路学习(一)

一、原理图 Bandgap中的运放(折叠式Cascode)采用P输入对,是因为运放输入端接的PNP三极管发射极端的电位,电压小,为了确保输入对管能够饱和工作,故采用P输入对管。此外,P管作为输入管&#xff0c…

UE5.3.2查看引擎真正版本

编译好的插件给别人用,发现引擎不一致,而且双方都是5.3.2版本引擎 打开Help->About Unreal Editor可以看到引擎版本 或者直接查看引擎版本文件:XXXXX\Engine\Build\Build.version 里面能看到对应的分支名字

【AIGC】OpenAI Canvas发布,代码能力秒杀Copilot,360°碾压Claude

目录 在Canvas界面中,你可以:Canvas有哪些强大功能?写作助手的升级编程功能的提升 网友反响如何?[如何直接使用ChatGPT4o、o1、OpenAI Canvas](https://www.nezhasoft.cn/) 10月3日凌晨1点、太平洋时间的上午 10 点,Op…

RK3568平台(平台总线篇)IIC光感BH1721模块调试

一.BH1721硬件信息 总上,读取数据全过程为: 通过查看数据手册得知BH1721的设备地址为0x23,光感并不是直接去读取设备地址上某个寄存器的地址,而是通过向0x23直接写入数据0x01 0x10后直接读取光感值。 第一步:通过I2C总线,主机给bh1721设备发送数据:0x01 ——> (Pow…

PyQt5 布局管理、事件、信号以及对话框

布局管理 绝对定位 每个程序都是以像素为单位区分元素的位置,衡量元素的⼤⼩。所以我们完全可以使⽤绝对定位搞定每个元素和窗⼜的位置。 局限性: 元素不会随着我们更改窗⼜的位置和⼤⼩⽽变化不能适⽤于不同的平台和不同分辨率的显⽰器更改应⽤字体…

老板的“神助攻”:公司电脑监控软件

在当今的商业世界中,企业管理者都希望员工能全身心投入工作,为企业创造更多价值。然而,员工上班摸鱼的现象却让许多老板头疼不已。公司电脑监控软件的出现,为解决这一问题提供了可能。接下来,我们将详细介绍几款优质的…

新160个crackme - 079-DueList.5

运行分析 提示需要注册 PE分析 32位程序,PE Diminisher壳 手动脱壳 x32dbg打开程序,按一下F8,根据ESP定律,在此处下断点按一下F9,两下F8,来到OEP处00401000打开Scylla,点击转储保存文件点击IAT自…

深入理解Dubbo源码核心原理-Part3

到此开始讲解Dubbo消费端的源码 在消费一端,需要关注两件事情。第一,接口的proxy如何生成。第二,请求如何发送。 首先看到启动类 接下来看真正inject方法 现在需要思考,待注入的Bean从哪儿来,这个Bean必然注入的是一…

Basic penetration_1靶机渗透

项目地址 plain https://download.vulnhub.com/basicpentesting/basic_pentesting_1.ova 实验过程 开启靶机虚拟机 ![](https://img-blog.csdnimg.cn/img_convert/4135d3c176bdca1f661f756b8321c97a.png) 使用nmap进行主机发现,获取靶机IP地址 plain nmap 192.1…

如何删除不需要的右键菜单

比如要删除以下右键菜单: 1. 打开“命令提示符”,并输入“regedit”以打开注册表编辑器。或使用快捷键“WinR”打开“运行”窗口,输入“regedit”以打开注册表编辑器。 2. 在注册表编辑器中,找到路径“计算机HKEY_CLASSES_ROOT/Di…

IterComp: 从模型图库中迭代合成感知反馈学习,用于文本到图像的生成

我们从多个模型中收集组成感知模型偏好,并采用迭代反馈学习方法,使基础扩散模型和奖励模型都能逐步自我完善。 我们提出了一种迭代反馈学习方法,通过多次迭代,使基础扩散模型和奖励模型逐步自我完善,从而以闭环方式增…