什么占用了我所有的内存?理解 top 的输出

什么占用了我所有的内存?理解 top 的输出

我读过许多有关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) 对内存的需求较低。因此,几乎不需要任何空闲内存。

因此,现代操作系统只有在内存中根本没有任何有用的东西可以保存,或者需要释放内存时,才会释放内存。否则,释放的内存就是浪费的内存。这并不意味着今天使用得少,明天就可以使用得更多。

相关内容