《Linux从小白到高手》综合应用篇:详解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进行内存分配,而不是从堆中分配。
–一些应用程序可能提供了特定的内存分配选项,可以根据应用程序的文档进行调整。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值