问题标签 [swapfile]
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.
amazon-web-services - 在 AWS/EC2 中创建交换分区
我有一个 t2.micro Ubuntu Server 1GB RAM 和 30GB 硬盘 (HD)。我需要从 30GB HD 中取出 2GB 来创建交换分区。有人可以帮我解决这个问题吗?
我怀疑是否应该按照上面的要求创建交换分区,还是应该创建一个交换文件,如下面的第 1 项和第 2 项所示:
1 -
要在重新启动后默认启用它,请将此行添加到 /etc/fstab:
2 -
也就是说,哪一个最好?交换分区或交换文件?
非常感谢您抽出宝贵时间。
node.js - Nodejs 进程是否可以使用比可用物理内存更多的内存(通过使用交换内存)?
我正在使用 Node.js。我打算增加 Nodejs 应用程序的内存限制。
在谷歌搜索时,我发现了这篇文章:增加 Node.js 内存限制。
作者说他的服务器只有8GB
物理内存,但他的Nodejs进程正在使用28GB
内存。我假设它正在使用physical + swap
内存。文章还提到,一个著名的 Nodejs 框架的开发者在15GB
他的 Nodejs 中使用了内存限制。
我试图从其他编程语言中搜索一些示例。在 Java 中,将交换内存用于 JVM 堆似乎不是一个好主意。参考这篇文章:如何增加交换大小允许我增加堆大小?,为 JVM 堆使用交换内存会产生很大的问题。
我不确定JVM GC和Nodejs GC之间是否有任何区别。
Nodejs 进程是否可以使用比可用物理内存更多的内存(通过使用交换内存)?
mysql - 为什么在同一个磁盘上配置数据库文件和系统交换空间会出现问题?
为什么将数据库文件和系统交换空间配置在同一个磁盘上会出现问题?会发生什么?
linux-kernel - 在 Linux 中交换页面
我已经确定 mm/memory.c 中的函数do_swap_page用于交换 Linux 内核中的 IN 页面。但是,该函数的输入参数包含一个 pte_t* 和一个 pte_t。这两个参数的使用有什么区别?任何帮助,将不胜感激。
linux - 交换 LINUX 内核中的特定页面
我正在使用add_to_swap换出特定页面。然而,即使在我调用了这个返回成功 ( 1 ) 的函数之后,显示页表条目pte_t的系统仍然存在。add_to_swap 是换出页面的正确函数还是我应该查看的 LINUX 内核中的其他函数?我查看了 KSWAPD 模块,但没有找到它用于交换特定页面的函数。
linux - 重新启动后交换文件恢复到原始大小
我正在尝试增加我的树莓派 3 上的交换文件大小。我在 DigitalOcean 上遵循本指南。
成功增加文件并使用 mkswap 和 swpon 命令进行设置后,一切正常。我什至尝试用随机数据填充我的 ram,看看它是否会使用新的交换空间并且它工作得很好。
但是,在我重新启动树莓派后,交换文件返回到之前的(默认)大小 100MB。有没有办法使这种变化永久化?
我在 Raspbian Jessie 上运行 Raspberry pi 3。
osrm - 2 个 HD 上的 OSRM 提取和最佳交换 stxxl 位置
我想设置汽车配置文件数据,但现在需要 3 天,而且仍然是 100% 图表(所以还有更多的路要走),我在想,也许我的交换和 stxxl 设置不当。
我有以下系统
- 2HDs 4 TB SATA 6 Gb/s 7200 rpm HDD 企业级
- 64 GB DDR4 内存
- 英特尔® 酷睿™ i7-6700 四核 Skylake,包括。超线程
HD1 具有
- 系统
- 程式
- osm.pbf 文件就可以了
- 提取的数据必须放在这个上
- 具有 32G 交换的分区
HD2 大部分是空的(但其他一些大数据将需要空间)
我的提取方法是在 HD2 上设置另一个 300G 的交换,在 HD2 上设置 300G 的 stxxl。但似乎太慢了。iotop 有一些阅读和写作活动,但没什么大不了的。htop 没有显示任何显着的 cpu 使用率。我从 8 个进程开始。
使用/开启
- 行星-latest.osm.pbf (37G)
- OSRM 5.9.0(现在直接从 OSRM github 尝试 5.12.0 docker,没有速度提升)
xxxxxxxxx
- 有没有更好的方法来设置额外的交换和 stxxl(可能是 HD1 上的交换,只有 HD2 上的 stxxl)?
如果我可以根据需要移动提取数据的文件和目标位置,那么在 HD1 上执行 .pbf、在 HD1 上进行所有交换和 stxxl 并在 hd2 上提取数据(然后将其复制到 HD1)会更好吗?谢谢
编辑 4.9.2017 似乎 stxxl 被禁用了几个版本,需要手动启用。所以这可能会给我一些动力。然而,我仍然对跨两个 HD 的最佳分割感兴趣。
memory - 在嵌入式 Linux 中检测内存不足的情况
我的团队开发了一个在嵌入式 Linux 上运行的基于 C++ 的复杂多进程系统。由于没有交换分区,逐渐增长的内存泄漏可能会造成很大的麻烦。(为了便于讨论,我们假设系统中分配的所有内存都填充了非零数据。)
现在,正如这里(简洁地)回答的那样,当操作系统用完 RAM 并且没有交换时,它会丢弃干净的页面。据我了解,在这种情况下唯一的“干净”页面是那些包含 const 数据和当前/最近从 Linux 环境执行的代码,特别是我们的可执行文件和共享库,它们可能会被无害地丢弃,然后根据需要从文件系统重新加载.
起初,最近最少使用的页面会最先被删除,因此几乎不会注意到这一点,但随着分配的内存越来越多,回旋余地的数量减少,需要的代码更频繁地被换出然后再重新进入。系统开始无声无息地颠簸,但我们看到的唯一迹象是系统变得更慢且响应更慢,直到最终内核的 oom-killer 介入并完成它的事情。
这种情况不一定需要发生内存泄漏;这可能只是因为我们软件的自然内存需求超过了可用 RAM。这种情况更难捕捉,因为系统不会崩溃,并且由抖动引起的性能损失并不总是立即引起注意,并且可能与导致性能不佳的其他原因(例如效率低下的算法)相混淆。
我正在寻找一种在性能开始受到影响之前明确地捕捉和标记这个问题的方法;理想情况下,我想监视发生的干净页面丢弃的数量,希望不需要专门重建的内核。然后我可以建立一些阈值,超过这个阈值就会引发错误。当然,任何更好的想法也会受到赞赏。
我尝试了其他解决方案,例如使用 监控进程内存使用情况top
,或者使用 让进程自我监管,mallinfo(3)
但这仍然不能捕捉所有情况或清楚地回答总体内存使用状态的问题。我看过的另一件事是输出中的“免费”列,free
但无论是否发生颠簸,它都会显示一个低值。
linux - Linux `top` 命令:交换空间中物理存储了多少进程内存?
假设我在具有 64 Gb RAM 的 64 位 Linux 机器上运行我的程序。在我开始后立即执行的非常小的 C 程序中
这将我的数据段向前移动了 120 Gb。
在我的进程的上述sbrk
调用top
条目显示RES
为某个低值之后,VIRT
at120g
和SWAP
at 120g
。
在此操作之后,我在上述区域的前 90 Gb 中写入了一些内容
top
这导致我的流程的条目发生了一些变化:VIRT
预期保持在120g
,RES
几乎变成64g
,SWAP
下降到大约56g
。
Swap
输出标题中的常见统计数据top
显示交换文件使用量增加,这是预期的,因为我的程序必须将大约 26 Gb 的内存页面推送到交换文件中。
因此,根据上述观察,SWAP
column 仅报告我的进程的非RES
地址空间,而不管该地址空间是否已“物化”,即无论我是否已将某些内容写入该虚拟内存区域。
但是有没有办法弄清楚这个SWAP
大小中有多少实际上已经“物化”并由存储在交换文件中的东西支持?即有什么方法可以top
为我的进程显示 26 Gb 的值吗?
hardware - 关于LRU,操作系统如何知道有效的内存帧使用情况
在虚拟内存中,LRU 算法是关于换出最近最少使用的页面框架,但是操作系统如何知道框架的使用,因为它在有效时不会引发任何异常?
在 MMU 中是否有使用某种计数器,或者操作系统是否通过使页面无效而不真正交换它们来进行定期检查,只是为了对页面错误进行统计?
我想也许可以通过谷歌找到信息,但我没有找到正确的方法:-/