我读过许多有关top
内存使用的问题但我认为它们都没有回答这个问题。
这是跑步中最重要的部分top
:
top - 01:11:41 up 4 days, 1:06, 3 users, load average: 0.00, 0.03, 0.26
Tasks: 86 total, 1 running, 84 sleeping, 0 stopped, 1 zombie
Cpu(s): 0.4%us, 0.4%sy, 0.0%ni, 99.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1022816k total, 986704k used, 36112k free, 11200k buffers
Swap: 1048572k total, 419088k used, 629484k free, 408172k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2022 django 20 0 463m 87m 688 S 0.4 8.7 0:44.06 redis-server
6047 django 20 0 106m 25m 3900 S 0.4 2.6 0:16.57 python
6046 django 20 0 40892 13m 2852 S 0.0 1.4 0:00.14 python
6887 postgres 20 0 98752 5240 4100 S 0.0 0.5 0:00.60 postgres
6512 root 20 0 70820 2528 1776 S 0.0 0.2 0:00.03 sshd
3614 root 20 0 70820 2452 1696 S 0.0 0.2 0:00.03 sshd
6892 postgres 20 0 99028 2044 720 S 0.0 0.2 0:00.53 postgres
12983 django 20 0 18332 1968 1156 S 0.0 0.2 0:00.06 bash
3627 joe 20 0 71148 1660 632 S 0.0 0.2 0:00.84 sshd
6890 postgres 20 0 98752 1640 500 S 0.0 0.2 0:02.59 postgres
3628 joe 20 0 18056 1588 1056 S 0.0 0.2 0:00.10 bash
6537 postgres 20 0 18000 1580 1100 S 0.0 0.2 0:00.04 bash
6893 postgres 20 0 70296 1564 296 S 0.0 0.2 0:00.38 postgres
708 mysql 20 0 166m 1560 408 S 0.0 0.2 3:08.15 mysqld
9221 root 20 0 31724 1456 1148 S 0.0 0.1 0:00.01 sudo
这表明 1022816k 中 986704k 已被使用(我估计是 96%)。但是前 3 个进程的百分比加起来是 12.7%。有些进程几乎占用了我所有的 RAM,但我不知道是什么。free
显示了类似的数字。
关于尝试找出这一切的用途,您有什么建议吗?
(我注意到有 1 个僵尸进程。可能是这个吗?)
答案1
简短的回答是,剩余的内存用于缓存应用程序。
详细答案可以在这里找到这里。
答案2
不管那里发生了什么,最有可能的是读取或写入磁盘的数据。释放这些内存在很多层面上都是一个失败的提议:
1) 如果再次需要数据,并且系统释放内存,则必须从磁盘读取数据。
2) 释放内存需要付出努力,如果内存需要用于其他用途,系统就必须再次使用它,浪费加倍。将内存直接从一种用途转换为另一种用途比一步到位更有效率。
3) 对内存的需求较低。因此,几乎不需要任何空闲内存。
因此,现代操作系统只有在内存中根本没有任何有用的东西可以保存,或者需要释放内存时,才会释放内存。否则,释放的内存就是浪费的内存。这并不意味着今天使用得少,明天就可以使用得更多。