我正在研究Rails应用程序的内存使用情况(它通过Resque使用后台进程),而且由于“有多less工作人员太多”这个问题的常见问题是“testing和看见”,所以我运行了一些内存命令如果有人可以帮助确定内存使用是否足够高,或者我仍然可以添加一些额外的工人。
所以(这是所有的最大负载下):
$ free -t -m total used free shared buffers cached Mem: 1756 1532 223 0 12 229 -/+ buffers/cache: 1291 464 Swap: 895 10 885 Total: 2652 1543 1108 $ vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- rb swpd free buff cache si so bi bo in cs us sy id wa 0 0 10588 156172 13400 326476 1 6 4 0 5 4 1 0 99 0
如果有任何额外的信息可以帮助我解答,我很乐意这样做。 如果这个问题在某种程度上是奇怪的,请让我知道我很乐意修复等。
显然,如果你正在积极交换,你有太多。 交换使用并不意味着你正在交换。 交换I / O意味着你正在交换。
但是,积极的交换不是过度使用内存使用会伤害到你的唯一方式。 应用程序正在使用的每个内存字节都是一个不能用作磁盘caching的内存字节。 如果你的应用程序不能非常的接触磁盘,这个没关系。 但是,如果这样做,即使没有交换,由于caching命中率较低,您可能会遭受非常差的性能。
首先要看的是有多less内存是免费的或被用作caching。 如果这太低,那么你冒险交换。 在这种情况下,大约是400MB。 所以你没有交换的风险。
第二件要看的是磁盘caching是否适合您的应用程序。 一个棘手的问题是是否将可用内存计数为磁盘caching的一部分。 在你的情况下,可用的内存可能是内存stream失所需要的。 也就是说,它不能用作磁盘caching,因为随着应用程序内存使用量的增加和减less,caching不断被挤压。 所以你的磁盘caching约200MB。
这是否足够取决于你的应用程序如何使用磁盘。 但是,如果不是,赠品将是过度的磁盘I / O和性能差。
你应该检查文件/ proc / meminfo。 它包含你正在寻找的详细的答案。 记住这一点,caching和缓冲区本质上是空闲的内存,禁止在caching中的脏页面。
从磁盘读取文件时,将其caching到内存中。 系统中存在同一文件的两个副本,一个caching,另一个在磁盘中。 因此,当需要回收内存时,清理caching比清理板内存或交换更容易。
在你的情况下,有一些交换。 除非发生颠簸,否则交换并不坏。 内存上似乎没有资源紧缩,如果在系统使用率最高的情况下可以捕获系统的/ proc / meminfo输出和体系结构,那就太好了。
从你所表示的看,我看到一些交换的证据,但在快照上并不是很高。 我可能会停止在你正在使用的设置,退后一点点。 你真正想要避免的一件事是交换,这是基本上表示内存耗尽的地方。