什么占用了我的 VPS 中的 RAM?

什么占用了我的 VPS 中的 RAM?

我运行 top,发现在 502968 KB 中,使用了 48064 KB,剩余 16884 KB 可用。但是当我查看各个进程时,我发现 mysql 偶尔会消耗 9.4% 的 RAM - 但其他进程似乎没有消耗任何东西。是什么消耗了我所有的 RAM?

以下是从顶部截取的屏幕截图:

top - 20:46:07 up 1 min,  1 user,  load average: 0.18, 0.05, 0.02
Tasks:  81 total,   1 running,  80 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.4 sy,  0.0 ni, 99.6 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem:    502968 total,   241236 used,   261732 free,    10488 buffers
KiB Swap:   524284 total,        0 used,   524284 free,   106756 cached

PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND
1584 dmackey   20   0 20508 1372 1000 R   0.4  0.3   0:00.01 top
1 root      20   0 26664 2456 1340 S   0.0  0.5   0:00.69 init
2 root      20   0     0    0    0 S   0.0  0.0   0:00.00 kthreadd
3 root      20   0     0    0    0 S   0.0  0.0   0:00.01 ksoftirqd/0
4 root      20   0     0    0    0 S   0.0  0.0   0:00.00 kworker/0:0
5 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 kworker/0:0H
6 root      20   0     0    0    0 S   0.0  0.0   0:00.00 kworker/u:0
7 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 kworker/u:0H
8 root      rt   0     0    0    0 S   0.0  0.0   0:00.00 migration/0
9 root      20   0     0    0    0 S   0.0  0.0   0:00.00 rcu_bh
10 root      20   0     0    0    0 S   0.0  0.0   0:00.24 rcu_sched
11 root      rt   0     0    0    0 S   0.0  0.0   0:00.00 watchdog/0
12 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 cpuset
13 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 khelper
14 root      20   0     0    0    0 S   0.0  0.0   0:00.00 kdevtmpfs
15 root       0 -20     0    0    0 S   0.0  0.0   0:00.00 netns
16 root      20   0     0    0    0 S   0.0  0.0   0:00.00 bdi-default

以下是免费的:

            total       used       free     shared    buffers     cached
Mem:        502968     355252     147716          0      10816     111548
-/+ buffers/cache:     232888     270080
Swap:       524284          0     524284

答案1

没有什么。

这是 Linux,这就是怎么运行的

它将使用“空闲”内存进行磁盘缓存,因为未充分利用的资源有什么意义呢?

当进程需要更多内存时,它会向内核请求内存,并且(通常会)获得内存。

哦.. MySQL 将使用它所需的量(如在中配置的/etc/my.cnf),以便索引、查询和表从磁盘缓存到内存中,从而加快访问时间。

答案2

它只是内存中遗留的垃圾,不管上次是如何使用的。最有可能的是,它是从磁盘读取或写入磁盘的数据。操作系统不会释放内存,因为这样做会造成浪费,原因有三:

  1. 如果内存不尽快使用,那么释放它就没有任何意义。

  2. 如果内存很快就会被使用,那么释放它只是一项必须撤消的工作,因为必须再次使用它。

  3. 如果再次需要内存中的信息,则释放内存意味着必须从磁盘而不是内存中获取该信息,这会慢得多。

现代操作系统只有在别无选择的情况下才会释放内存。如果你在想,“我现在想释放内存,以便以后使用”,那就打住。你不需要现在释放内存以便以后使用。这里没有权衡,保持内存处于使用状态直到需要时才是真正的胜利。

答案3

记录 top 的输出以供将来分析是回答您的问题的最佳方式。没有快速解决方案,需要随着时间的推移进行一些观察调查。我用来浏览占用内存内容的一次性方法是将其放入 root 的 crontab 中。

/bin/bash top -b -n 1 | head > `/var/log/date +%e_%T`

然后我使用一些文本处理和 pager-fu 来跟踪趋势。这个 stack overflow 帖子https://stackoverflow.com/questions/7908953/how-to-measure-cpu-usage有一些更全面的使用 top 的示例,例如这个,以及通过 top 自定义.toprcCPU 统计信息,但它也可以轻松地适应您的需要。

相关内容