我使用以下命令运行4个java进程:
java -Xmx256m -jar …
系统在Fedora 12下有8Gb的内存。
然而它显然正在交换。
那如果4 x 256m = 1Gb怎么可能?
编辑:另外,如何使用所有8Gb的内存分配到基本上唯一的东西运行这么less的内存?
是不是Java的垃圾收集,因为操作系统告诉它,它不需要或什么?
最佳:
top - 20:13:57 up 3:55, 6 users, load average: 1.99, 2.54, 2.67 Tasks: 251 total, 6 running, 245 sleeping, 0 stopped, 0 zombie Cpu(s): 50.1%us, 2.9%sy, 0.0%ni, 45.1%id, 1.1%wa, 0.0%hi, 0.8%si, 0.0%st Mem: 8252304k total, 8195552k used, 56752k free, 34356k buffers Swap: 10354680k total, 74044k used, 10280636k free, 6624148k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1948 xxxxxxxx 20 0 1624m 240m 4020 S 96.8 3.0 164:33.75 java 1927 xxxxxxxx 20 0 139m 31m 27m R 91.8 0.4 38:34.55 postgres 1929 xxxxxxxx 20 0 1624m 200m 3984 S 86.2 2.5 183:24.88 java 1969 xxxxxxxx 20 0 1624m 292m 3984 S 65.6 3.6 154:06.76 java 1987 xxxxxxxx 20 0 137m 29m 27m R 28.5 0.4 75:49.82 postgres 1581 root 20 0 159m 18m 4712 S 22.5 0.2 52:42.54 Xorg 2411 xxxxxxxx 20 0 309m 9748 4544 S 20.9 0.1 45:05.08 gnome-system-mo 1947 xxxxxxxx 20 0 137m 28m 27m S 13.3 0.4 44:46.04 postgres 1772 xxxxxxxx 20 0 135m 25m 25m S 4.0 0.3 1:09.14 postgres 1966 xxxxxxxx 20 0 137m 29m 27m S 3.0 0.4 64:27.09 postgres 1773 xxxxxxxx 20 0 135m 732 624 S 1.0 0.0 0:24.86 postgres 2464 xxxxxxxx 20 0 15028 1156 744 R 0.7 0.0 0:49.14 top 344 root 15 -5 0 0 0 S 0.3 0.0 0:02.26 kdmflush 1 root 20 0 4124 620 524 S 0.0 0.0 0:00.88 init 2 root 15 -5 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT -5 0 0 0 S 0.0 0.0 0:00.00 migration/0 4 root 15 -5 0 0 0 S 0.0 0.0 0:00.04 ksoftirqd/0
内存pipe理器会自动把东西交换,即使物理内存不足,根据它认为是最好的。 有什么理由不希望它进入交换? 它实际上是否影响程序的运行?
您将需要closures交换为了testing有或没有交换的速度。
另外,它什么时候使用交换? 不断地或之后它已经运行了一下? 您还必须考虑到底层系统也需要内存。 以及您正在使用的任何IDE,以及任何正在运行的其他程序。 所以你可能需要交换比你意识到的更多。
你系统的整体内存消耗看起来不错。 请记住从“使用”部分中减去“caching”和“缓冲区”以获得精确的可用内存量。 高速缓冲存储器用于在未来访问的情况下在RAM中caching文件。 如果Linux需要更多的内存,它将简单地减less这个内存量,所以在确定内存利用率时通常不会考虑它。 由于caching池中有6 GB,因此如有必要,可以使用大量内存。
个别的过程也很好。 Res列表示实际允许的额定内存大小,这似乎接近指定的堆大小。 virt列仅仅表示了进程可以处理的ram的数量,但是在这一点上并不需要分配。
如何使用所有的8Gb的内存分配基本上唯一的东西运行这么less的内存?
这是Linux内存pipe理devise工作的方式。 这是一个性能优化,将内存空置(否则将被浪费)来caching可能需要从文件系统重新读取的数据。
虽然这似乎是一个不整洁的工作方式,但速度更快。 操作系统一旦能够更好地使用,就可以有效地回收这些内存。
你只用了70MB的交换。
操作系统的内存pipe理器可以把事情放在最好的地方。 如果您希望避免使用交换空间,则需要将其closures。
有关swapoff
信息,请参阅http://linux.about.com/library/cmd/blcmdl8_swapoff.htm 。