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

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

时间:2024-10-12 20:46:21浏览次数:8  
标签:缓存 sysctl 白到 系统 swappiness vm 调优 内存 Linux

本篇介绍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进行内存分配,而不是从堆中分配。
–一些应用程序可能提供了特定的内存分配选项,可以根据应用程序的文档进行调整。

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

标签:缓存,sysctl,白到,系统,swappiness,vm,调优,内存,Linux
From: https://blog.csdn.net/qq_45732829/article/details/142855074

相关文章

  • 【应急响应+Linux】常见的rootkit隐藏手段:前言
    原文首发在:奇安信攻防社区https://forum.butian.net/share/3796本文主要针对黑灰产相关的蠕木僵毒等恶意软件在Linux上常用的rootkit手段做一些总结,以及详细分析常见应急响应中遇到的进程、文件隐藏手段的原理以及排查和恢复方法;前言本文主要针对黑灰产、以及蠕木僵毒等恶意软......
  • 【应急响应+Linux】常见的rootkit隐藏手段:通过用户层劫持加载器/连接器隐藏进程pld(用
    原理linux在进程启动后,和windows加载dll一样会按照一定的顺序加载动态链接库,相关顺序如下:加载环境变量LD_PRELOAD指定的动态库加载文件/etc/ld.so.preload指定的动态库搜索环境变量LD_LIBRARY_PATH指定的动态库搜索路径搜索路径/lib64下的动态库文件攻击者常见使用的劫......
  • 【应急响应+Linux】常见的rootkit隐藏手段:通过劫持shell环境,实现文件、进程名隐藏等操
    原理修改或构造/etc/profile.d/下sh文件,劫持环境变量,从而实现覆盖常见的命令,如:ps、ls、lsof等;实现:1、配置环境变量shell脚本:重新登录用户之后;或者使用命令source/etc/profile更新配置,使生效;2、根目录下存在的myshell.sh文件被隐藏:执行ls命令效果:排查方法:使用strace......
  • 【应急响应+Linux】常见的rootkit隐藏手段:通过挂载/proc/pid实现pid隐藏
    原理ps、netstat是遍历/proc来显示pid的原理,通过隐藏相关/proc/pid文件夹来实现pid隐藏实现运行如下命令,将pid对应文件夹挂载到隐藏目录上面mount-obind/home/.hidden/proc/9212现象:如下图,使用root权限调用netstat发现PID和Programname都是空:排查方法1、ca......
  • openEuler、Linux操作系统常见操作-(6)如何登录Linux
    如何登录Linux·Linux登陆方式主要有如下两种: 。本地登陆   。一个典型的Linux系统将运行六个虚拟控制台和一个图形控制台,openEuler目前暂未支持图形化界面;·可以通过Ctrl+Alt+F[1-6]在6个虚拟控制台之间进行切换。远程登录。默认情况下openEuler支持......
  • lnav: 用于 Linux 的高级日志文件浏览器
    原创咬到舌头的小蛇IT开DD那点小事如果你想调试或排除问题,使用像lnav这样的高级日志文件查看器是非常必要的。它在任何Linux系统的终端中都能发挥巨大的作用。lnav:日志文件查看器lnav可以即时解压缩所有的压缩日志文件,并将它们合并在一起进行漂亮的显示。显示是根据......
  • Linux的zookeeper安装部署
    1.zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是hadoop和HBASE的重要组件2.下载zookeeper安装包zookeeper安装包https://archive.apache.org/dist/zookeeper/zookeeper-3.5.9/移动到Linux解压解压到/export/server文件夹命令:   tar-xvfapache-zoo......
  • Linux下(CentOS 7.6)安装并使用sql server 2017的操作步骤,以及中文乱码解决方法
    一、安装SQLServer1、安装SQLServer所需的python2(由于我这边是装了宝塔的,用的好像是python3,所以不需要,如果你们的情况一样,也可以跳过这个步骤)sudoalternatives--configpython如果未配置,请使用以下命令安装Python2和OpenSSL10:sudoyuminstallpython2sudoyum......
  • Linux压缩解压缩命令tar使用说明
    在Linux中,tar命令是常用的用于打包和压缩文件的工具。以下是关于它的压缩和解压命令的介绍:1、压缩文件1.1打包文件(不进行压缩):命令:tar-cvf目标文件名.tar源文件或目录例如:tar-cvfmyfiles.tarfile1.txtfile2.txtdirectory1,这会将file1.txt、file2.txt和directory1打包成......
  • 【linux安全】Linux上加密技术的应用
    一、加密的重要性二、加密技术及应用2.1常见的加密技术2.2在Linux中加密文件2.3加密磁盘和文件系统三、实例演示3.1使用GPG加密文件3.2使用OpenSSL加密文件3.3使用dm-crypt加密磁盘原创星火可以燎燃星火技术今天,我们将探讨如何在Linux系......