麒麟系统内存虚高需排查shared内存:先用df -h | grep tmpfs定位tmpfs占用,再用du扫描/dev/shm大文件,接着cat /proc/meminfo查shmem总量,最后用ipcs -m检查system v共享段并清理残留。

当麒麟操作系统出现内存使用率虚高、可用内存远低于物理总量,或系统提示“内存不足”但top中进程RSS总和并不大的情况时,必须排查shared内存是否异常膨胀——这部分内存被多个进程共享,不会在单个进程的RES中重复计算,却真实占用物理RAM。
用df -h快速定位tmpfs挂载点占用
shared内存主要体现为tmpfs类型的虚拟文件系统,如/dev/shm、/run、/sys/fs/cgroup等,它们直接从物理内存分配空间。
打开终端,执行:df -h | grep tmpfs
观察输出中Size、Used、Use%三列:若/dev/shm显示Used达数GB,或/run超过1GB,即表明shared内存已实质性占用大量物理RAM。
【注意】/dev/shm默认无上限,程序写入大文件会直接吃光内存,且不触发OOM Killer
用du逐层扫描/dev/shm下的大文件
tmpfs挂载点内容可被普通命令读取,/dev/shm是shared内存最常被滥用的位置。
执行:cd /dev/shm && sudo du -sh * 2>/dev/null | sort -hr | head -n 5
这一步列出当前最大的5个文件或目录。若看到类似postgres_12345、chrome-shared-6789或无意义长名文件,基本就是罪魁祸首。
对可疑项继续下钻:例如发现myapp_cache占1.2G,则运行sudo du -sh myapp_cache/* 2>/dev/null | sort -hr | head -n 3定位具体文件。
用cat /proc/meminfo确认shared内存总量
内核统计的Shmem字段即为所有tmpfs及匿名共享内存页总和,是判断全局shared压力的最终依据。
执行:cat /proc/meminfo | grep ^Shmem
输出形如Shmem: 3245672 kB,换算为GB(÷1024÷1024)后,若超过物理内存的15%,需立即干预。
该值与df -h中所有tmpfs的Used之和应基本一致;若偏差超200MB,说明存在未挂载的匿名共享内存段,需结合ipcs -m进一步排查。
用ipcs -m检查System V共享内存段
传统IPC机制创建的共享内存段独立于tmpfs,不会出现在df中,但同样计入Shmem总量。
第一步:执行ipcs -m列出所有活动段
第二步:关注SEGSZ(段大小)和CPID(创建进程PID)两列
第三步:对SEGSZ > 100MB的段,用ps -p [CPID] -o pid,comm,args查清归属进程
【关键动作】若发现残留段(如CPID已不存在),执行ipcrm -m [shmid]立即释放,否则该内存永不回收











