kap*_*pso 153 virtualization linux memory top
我正在运行top
以监控我的服务器性能,我的 2 个 java 进程显示高达 800MB-1GB 的虚拟内存。那是一件坏事?
虚拟内存是什么意思?
哦顺便说一句,我交换了 1GB,它显示使用了 0%。所以我很困惑。
Java 进程 = 1 个 Tomcat 服务器 + 我自己的 Java 守护进程服务器 = Ubuntu 9.10 (karmic)
小智 173
虚拟内存甚至不一定是内存。例如,如果一个进程内存映射一个大文件,该文件实际上存储在磁盘上,但它仍然占用进程中的“地址空间”。
地址空间(即进程列表中的虚拟内存)不需要任何费用;这不是真的。真正的是RSS(RES)列,它是常驻内存。这就是进程占用的实际内存量。
但即使这也不是全部答案。如果一个进程调用 fork(),它会分成两部分,并且它们最初共享所有的 RSS。因此,即使 RSS 最初是 1 GB,分叉后的结果将是两个进程,每个进程的 RSS 为 1 GB,但您仍然只使用 1 GB 的内存。
还糊涂?以下是您真正需要知道的:free
在启动程序之前和之后(+/- buffers/cache
在线)使用命令并检查结果。区别在于您新启动的程序使用了多少新内存。
amp*_*ine 28
从顶部(1)手册页:
o: VIRT -- 虚拟映像 (kb)
任务使用的虚拟内存总量。它包括所有代码、数据和共享库以及已换出的页面和已映射但未使用的页面。
有关其他详细信息,请参阅“概述,Linux 内存类型”。
(文档的先前版本指出“VIRT = SWAP + RES。”其中 RES 表示 RESident 或使用的物理内存。)
实际上这是不正确的(不再)。当它说“交换”时,还包括程序已映射到其地址空间的文件,这些文件实际上可能正在或可能尚未消耗实际 RAM。这个内存是文件支持的,但不是真正的交换。
VIRT 还包括已分配但尚未用于任何内容的页面。这种状态下的任何页面都映射到内核零页(绝妙的概念——你应该查一下),所以它显示在 VIRT 中,但实际上并不消耗任何内存。
Fra*_*urt 23
我发现Mugurel Sumanariu 的这个解释非常清楚:
VIRT
代表进程的虚拟大小,它是它实际使用的内存、它映射到自身的内存(例如 X 服务器的视频卡的 RAM)、已映射到它的磁盘上的文件(大多数尤其是共享库),以及与其他进程共享的内存。VIRT 表示程序当前能够访问的内存量。
RES
代表常驻大小,这是一个进程消耗多少实际物理内存的准确表示。(这也直接对应于 %MEM 列。)这实际上总是小于 VIRT 大小,因为大多数程序依赖于 C 库。
SHR
表示实际可共享的 VIRT 大小(内存或库)。在图书馆的情况下,并不一定意味着整个图书馆都是常驻的。例如,如果一个程序只使用了一个库中的几个函数,则整个库被映射并计入 VIRT 和 SHR 中,但只有包含正在使用的函数的库文件的部分才会被实际加载并计入在 RES 下。
归档时间: |
|
查看次数: |
275731 次 |
最近记录: |