问题标签 [virtual-memory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
23921 浏览

windows - sysinternals 进程资源管理器中的“虚拟大小”是什么

我的应用程序运行了几个小时,任务管理器的任何值(vmsize,内存)都没有增加。但几个小时后,我得到了内存错误。

在 sysinternals 中,我看到“虚拟大小”不断增加,当它达到 2 GB 左右时,我开始出现内存错误。

那么这是什么类型的内存泄漏呢?我如何用代码演示它?是否可以使用任何内存值都没有增加但只有 sysinternsl 进程资源管理器中的虚拟大小增加的代码来重现相同的东西?

感谢您的任何建议

0 投票
1 回答
513 浏览

linux - Linux:页面错误和网络文件系统

如果 Linux 系统用完了物理内存,它会丢弃不活动的可执行代码页吗?我认为答案是肯定的,因为没有理由将它们保留在交换中,所以它们只是被丢弃并在必要时重新加载(据我所知,这就是 FreeBSD 所做的)。

如果上述情况适用于 Linux,我的问题是,它如何处理从网络文件系统(例如 NFS)运行的可执行文件?如果出现页面错误,它是否会通过网络获取可执行页面?

0 投票
2 回答
3004 浏览

.net - .NET 垃圾收集器和 x64 虚拟内存

在具有 16GB RAM 的 Windows Server 2008 x64 上运行 .NET 应用程序。该应用程序需要获取和分析非常大量的数据(大约 64GB),并且一次将其全部保存在内存中。

我期望看到的:进程大小从 16GB 扩展到 64GB。Windows 使用虚拟内存根据需要将额外数据分页到磁盘或从磁盘分页。这是经典的虚拟内存用例。

我实际看到的:进程大小仅限于物理内存量(16GB)。应用程序将 99.8% 的时间花在垃圾收集器上。

为什么我们的应用程序无法使用虚拟内存?这是 .NET 垃圾收集器的配置问题,还是 Windows x64 虚拟内存管理器本身的问题?我该怎么做才能让我们的应用程序使用虚拟内存而不是仅限于物理内存?

谢谢。

——布赖恩

更新:我编写了一个非常小的程序,它表现出相同的行为:

如果您想尝试它,请确保为 x64 构建。您可能需要稍微修改常量以对系统施加压力。我看到的行为是进程在接近 16GB 大小时陷入困境。没有错误消息或异常抛出。性能监视器报告 GC 中的 CPU 时间百分比接近 100%。

这不是不能接受吗?虚拟内存系统在哪里?

0 投票
1 回答
325 浏览

c++ - 进程在不同机器上的虚拟内存大小

进程的虚拟内存在不同的机器(CPU、内存)上是否可以有不同的大小?该过程在两台机器上执行相同的工作。

平台是RHEL 5.3(内核2.6.18),进程是gcc(4.1.2)编译的C++。

0 投票
3 回答
1222 浏览

c - 探索虚拟内存 (ProcessWalker)

我正在阅读 MSDN 上的这篇文章 “在 Win32 中管理堆内存”

他们在其中解释了一个名为 ProcessWalker.exe 的工具

在文章中他们解释说他们可以使用这个工具来探索任何进程的虚拟内存的内容。

  1. 有谁知道我可以从哪里下载这个工具。或者 ProcessWalker 可能已被弃用。有谁知道任何其他这样的工具?

  2. 而且我不明白这样的工具怎么可能存在,这样的工具不会导致安全漏洞吗?

0 投票
2 回答
423 浏览

memory-management - 获取windows中最低的空闲虚拟内存地址

标题几乎说明了一切:有没有办法在 windows 下获得最低的空闲虚拟内存地址?我应该补充一点,我在程序开始时对这些信息感兴趣(在完成任何动态内存分配之前)。

为什么我需要它:尝试malloc在 Windows 下构建一个实现。如果不可能,我将不得不在VirtualAlloc()将 NULL 作为第一个参数时返回任何返回值。虽然您希望它做一些明智的事情,比如在可用的底部分配内存,但不能保证。

0 投票
1 回答
805 浏览

unix - 限制常驻内存使用

我想限制一个进程可以使用的物理内存量,而不限制它可以使用的虚拟内存量。我这样做是为了测量各种算法在内存压力下的行为,并且我需要使用许多不同数量的可用物理内存来测试它们的性能 - 所以我要么需要购买大量模糊大小的内存,或者我需要一个支持以某种方式限制进程的常驻内存的操作系统。

不幸的是,Linux 不尊重/强制执行setrlimit(RLIMIT_RSS, ...),OSX 也没有。 [1] 你能给我推荐一个可以做到这一点的操作系统吗?任何非OSX BSD?在 Solaris 中是否有执行此操作的机制?Windows 的某些变体可以做到这一点吗?


[1] Linux 完全忽略该请求,OSX 仅使用它来决定在物理内存耗尽时首先交换什么。当只有 X Megs 内存可供使用时,这两种方法都不能帮助我分析算法的行为。事实证明,Linux 在内核中没有任何机制可以做到这一点,所以它几乎完全被淘汰了,除非有人能指出一个可以实现这一点的内核分支。Solaris 甚至没有那个选项setrlimit(),但它可能有另一种我不知道的方式。

0 投票
4 回答
3183 浏览

c++ - 在不使用交换的情况下分配最大缓冲区

在 Linux 下的 C/C++ 中,我需要分配一个大的(几千兆字节)内存块,以便存储来自连接到以太网端口的传感器的实时数据和大约 110MB/s 的流数据。我想分配尽可能多的内存,以最大化我可以存储的数据序列的长度。但是,我还需要确保不会发生磁盘交换,因为由此产生的延迟和磁盘访问的有限带宽会导致传感器的(非常有限的)缓冲区溢出。

确定要分配多少内存的最佳方法是什么?我是否仅限于分配比报告的可用内存略小的块,还是可以更直接地与 linux 虚拟内存管理器交互?

0 投票
4 回答
1070 浏览

c++ - 虚拟字节增长 2 倍私有字节的原因是什么?

应用程序的虚拟字节增长为私有字节的 2 倍。

这是否表明内存泄漏?糟糕的应用程序设计?

操作系统为 32 位

欢迎任何想法。应用程序是流数据库。

0 投票
3 回答
450 浏览

virtual-memory - 当页面从磁盘出现故障时,哪个(OS X)dtrace 探针会触发?

我正在写一个关于页面错误的文档并试图获得一些具体的数字来使用,所以我编写了一个简单的程序来读取 12*1024*1024 字节的数据。简单的:

所以是的,它会遍历并读取整个文件。问题是我需要在此过程中将触发 1536 次的 dtrace 探针(12M/8k)。即使我计算了所有 fbt:mach_kernel:vm_fault*: 探测器和所有 vminfo::: 探测器,我也没有达到 500,所以我知道我没有找到正确的探测器。

任何人都知道我在哪里可以找到当页面从磁盘出现故障时触发的 dtrace 探测器?

更新:

如果问题在于 stdio 函数中正在进行一些智能预取,我尝试了以下操作:

这个版本需要更长的时间来运行(42 秒实时,其中 10 秒是用户时间,其余是系统时间 - 我猜是页面错误),但仍然会产生五分之一的错误,正如我预期的那样。

出于好奇,时间增加并不是由于循环开销和强制转换(char 到 int)。执行这些操作的代码版本需要 0.07 秒。