什么是在VPS中使用我的RAM?

我运行顶部,我看到在502968 KB,48064 KB使用离开16884 KB免费。 但是当我看到个别进程时,我发现mysql正在占用我内存的9.4% – 但是没有其他任何东西似乎在消耗任何东西。 什么是消耗我所有的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 

没有。

这是Linux,这就是它的工作原理 。

它将使用“空闲”内存进行磁盘caching,因为使用不足的资源有什么意义?

当一个进程需要更多的内存时,它会从内核请求它,并且(通常)得到它。

噢,MySQL会尽可能地使用它(在/etc/my.cnfconfiguration),以便将索引,查询和表从磁盘caching到内存中,从而加快访问速度。

这就是无论从最后使用的垃圾中遗留下来的垃圾。 最有可能的是,它是从磁盘读取或写入磁盘的数据。 操作系统不会使内存免费,因为这是一个浪费,有三个原因:

  1. 如果内存很快就没有使用,那么免费完成任何事情。

  2. 如果内存很快就被使用,那么免费的工作就是必须重新使用的工作。

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

现代操作系统只有在没有其他select的情况下才能使内存自由。 如果你在想,“我现在想要这个记忆,所以我可以晚点使用”,停下来。 您现在不需要内存就可以使用,以便以后使用。 这里没有任何折衷,这是一个纯粹的胜利,保持内存使用,直到需要。

logging最高的输出以供将来分析是解决您的问题的最佳方法。 没有快速的解决办法,一些观察调查是必要的。 我使用的一次性浏览了使用我内存的内容是把它放到root的crontab中。

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

然后我使用一些文本处理和pager-fu来跟踪趋势。 这个堆栈溢出posthttps://stackoverflow.com/questions/7908953/how-to-measure-cpu-usage有一些更全面的例子,像这样使用top,并通过.toprc自定义顶部的CPU统计,但它可以同样也很容易适应您的需求。