【发布时间】:2011-09-20 16:01:04
【问题描述】:
在顶部,我注意到我的 c 程序(使用 CUDA 3.2)的虚拟大小为 28g 或更多(查看 VIRT),从一开始就开始运行。这对我来说没有任何意义。常驻内存是有意义的,在我最大的数据集上只有 2g 左右。我知道在过去的某个时候虚拟大小并没有那么大,但我不确定更改发生的时间。
为什么我的进程会使用 28g 的虚拟内存(或者为什么 top 的 VIRT 会这么大)?我了解 VIRT 包括可执行二进制文件(仅 437K)、共享库和“数据区”。什么是“数据区”?如何找出共享库需要多少内存?我的进程总内存的其他元素呢?
/proc/
smaps 中的一个条目显示其中一个占其中的大部分,但没有标签...我如何才能找出这个“空白”条目是什么,它有 28gb?
200000000-900000000 ---p 00000000 00:00 0
Size: 29360128 kB
Rss: 0 kB
Pss: 0 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 0 kB
Anonymous: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
--
ubuntu 11.04 64 位
16 GB 内存
【问题讨论】:
-
请粘贴 /proc/(你的程序的 PID)/smaps 的内容,对诊断问题有很大帮助
-
如果不知道/看到你的程序就很难说
-
@bdonlan smaps 很长 - 我以前从未使用过 pastebin,如果它不起作用,请告诉我。
-
@BlackBear 对我如何诊断或查看什么有任何帮助?绝对不是我分配 30g 内存的情况 - 启动进程后立即虚拟大小为 30g。
-
@jmilloy:问题可能出在任何地方,电脑目前没有做任何事情。
标签: c linux memory cuda virtual