我尝试监控我的 ubuntu 服务器中的内存使用情况。当我运行“top”命令时,它显示已使用 70% 的内存。(显示在“Mem:”行中)。但我想找到占用内存的进程并将它们加起来,结果远低于 70%。有人能帮我解释一下吗?
多谢!
这是我的 top 命令结果:
顶部 - 20:59:06 启动 23 天,33 分钟,3 个用户,平均负载:0.06、0.12、0.09 任务:共 92 个,1 个正在运行,91 个正在休眠,0 个已停止,0 个僵尸 CPU:0.3%us,0.2%sy,0.0%ni,99.5%id,0.0%wa,0.0%hi,0.0%si,0.0%st 内存:总计 4124236k,已用 2903104k,可用 1221132k,缓冲区 147508k 交换:总计 4192252k,已使用 440k,可用 4191812k,缓存 2596860k PID 用户 PR NI VIRT RES SHR S %CPU %MEM TIME+ 命令 30558 mysql 20 0 311米 36米 5956 S 0 0.9 0:00.74 mysqld 28848 jiechao 20 0 50688 9244 3144 S 0 0.2 0:05.65 python 956 根 20 0 11712 8004 2964 S 0 0.2 0:39.26 ddclient - 睡眠 28846 jiechao 20 0 49256 7652 3280 S 0 0.2 0:07.17 python 22284 jiechao 20 0 10400 6876 1664 S 0 0.2 0:00.49 bash 30433 jiechao 20 0 10344 6776 1620 S 0 0.2 0:00.46 bash 31053 jiechao 20 0 10344 6768 1612 S 0 0.2 0:00.47 bash 28847 jiechao 20 0 48168 6096 2980 S 0 0.1 0:00.59 python 29178 www-数据 20 0 228m 5392 2052 S 0 0.1 0:00.06 Apache2 29179 www-数据 20 0 12796 5148 1920 S 0 0.1 0:00.02 Apache2 29180 www-数据 20 0 12796 5148 1920 S 0 0.1 0:00.02 Apache2 29181 www-数据 20 0 12796 5148 1920 S 0 0.1 0:00.02 Apache2 29182 www-数据 20 0 12796 5148 1920 S 0 0.1 0:00.02 Apache2 29183 www-数据 20 0 12796 5148 1920 S 0 0.1 0:00.02 Apache2 999 根 20 0 11396 3948 2052 S 0 0.1 0:21.21 apache2 926 糟糕 20 0 24572 3284 2280 S 0 0.1 0:00.18 糟糕 30933 根 20 0 9604 3104 2484 S 0 0.1 0:00.00 sshd 22164 根 20 0 9604 3096 2484 S 0 0.1 0:00.01 sshd 30313 根 20 0 9604 3096 2480 S 0 0.1 0:00.00 sshd 24302 根 20 0 9632 3024 2428 S 0 0.1 0:00.07 sshd 787 根 20 0 6664 2424 1988 S 0 0.1 0:00.05 sshd 1 根 20 0 3504 1876 1276 S 0 0.0 0:01.57 初始化 24421 jiechao 20 0 9632 1596 992 S 0 0.0 0:00.00 sshd 812 系统日志 20 0 31044 1484 1008 S 0 0.0 1:47.00 rsyslogd
答案1
当然,这个数字是进程使用的 RAM 和文件缓冲区和缓存的总和。Linux 的理念是最大限度地利用 RAM 来访问文件,而不是让这些文件占用硬盘空间。
尝试使用该命令free
或通过此命令查看内核本身,cat /proc/meminfo.
自由的
% free
total used free shared buffers cached
Mem: 7987492 7717152 270340 0 314644 2435048
-/+ buffers/cache: 4967460 3020032
Swap: 5963772 1304 5962468
猫/proc/meminfo
% cat /proc/meminfo
MemTotal: 7987492 kB
MemFree: 284328 kB
Buffers: 314384 kB
Cached: 2427852 kB
SwapCached: 116 kB
Active: 4698232 kB
Inactive: 2374796 kB
Active(anon): 3756264 kB
Inactive(anon): 768392 kB
Active(file): 941968 kB
Inactive(file): 1606404 kB
Unevictable: 68 kB
Mlocked: 68 kB
SwapTotal: 5963772 kB
SwapFree: 5962468 kB
Dirty: 452 kB
Writeback: 0 kB
AnonPages: 4330964 kB
Mapped: 185540 kB
Shmem: 193864 kB
Slab: 306532 kB
SReclaimable: 261520 kB
SUnreclaim: 45012 kB
KernelStack: 6192 kB
PageTables: 94376 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 9957516 kB
Committed_AS: 9671884 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 585392 kB
VmallocChunk: 34359040964 kB
HardwareCorrupted: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 12288 kB
DirectMap2M: 8237056 kB
该free
命令将显示总 RAM 7987492,在我的情况下,其中 7717152 正在使用,270340 是空闲的。这是 RAM、缓冲区和缓存的组合。第二行显示缓冲区和缓存使用了多少 RAM,即 4967460,这意味着我实际上有 3020032 空闲的 RAM。
从itworld.com 文章了解内存使用情况:
缓冲区数表示内核访问磁盘时产生的内存块,例如内核需要读取文件内容时。缓存数告诉我们有多少 RAM 被用于缓存最近读取的文件的内容。当绕过文件系统层时,缓冲区数会增加,而当使用文件系统时,缓存数会增加。两者都会随着读取操作的增加而增长。
笔记:请记住,如果应用程序确实需要,Linux 内核的内存管理器将释放用于缓冲区和缓存的任何 RAM。
资源