问题标签 [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.

0 投票
1 回答
38 浏览

vim - 为什么文件恢复后vim不能正常工作?

我去 vim 中打开一个日志文件,但被警告说已找到交换文件。其中一个警告表明我可能想使用 vim -r filename.log 打开文件。我这样做了,但是现在当我在文件中“vim”时,我必须输入“GG”(而不是“G”)才能让它带我到最后,并且“gg”(而不是“g” ) 让它带我到开始。当我使用 j 和 k 向上/向下移动一行时,它会突出显示该行的一部分(请参见下面屏幕截图中的蓝色和绿色光标),而之前没有突出显示。任何线索可能会发生什么?

在此处输入图像描述

谢谢!

0 投票
1 回答
387 浏览

vim - vim 恢复已删除的交换文件

我删除了交换文件并丢失了修改。*.bash 文件返回到它的原始版本。是否可以撤消对交换文件的删除(即恢复或恢复已删除的 *.bash.swp 文件)?

0 投票
0 回答
362 浏览

python - 在 python 程序中使用交换空间是个好主意吗?

我目前正在编写一个使用大量 RAM 的 python 程序。我知道我可以使用垃圾收集器来“释放”内存并避免这个问题。但是,我使用 Numba 来加速我的代码,这使得我需要释放 RAM 的部分与垃圾收集器不兼容。另外,它会减慢我的代码到它无论如何都完全没用的地步。现在我正在一台 32 GB RAM 的 MacBook Pro 上测试代码。我对软件开发略知一二,但对硬件一窍不通。我要将我的代码从 Mac 翻译到树莓派和 Nano Pi Fire 3 上。这是因为我使用的是多处理模块(Raspberry Pi 有 4 个内核,Nano Pi Fire 3 有 8 个)。我显然也在使用 MPI 模块来传递消息。我发现在简单搜索后添加更多 RAM 的一种解决方案是交换文件,在我使用的两种类型的板上设置这些文件相当容易。但是,我想知道这对于 python 代码是否真的是一个可行的选择?如果我允许 128 GB 的交换文件并使用 zRAM。这适用于其唯一目的是运行此代码的板,我会不再遇到 RAM 问题吗?

这就是为什么我认为这是 RAM 的问题:

第一个迹象是,如果我不使用 Numba 加速特定功能,那么程序运行完全正常,除了慢一点。但是,当我使用 Numba 的加速时,这是我收到的崩溃报告:

因此,可以看出在我的程序中使用了很多 RAM 和交换空间。如果我找不到解决方案,或者在板上添加交换空间不起作用,那么显然我将不得不牺牲实际工作的速度。但是,如果在我可能浪费时间这样做之前知道我认为可行的解决方案实际上会起作用,那就太好了。

0 投票
1 回答
154 浏览

java - 让java明白swap存在,并鼓励他使用它

所以,我有一个 java jar 可以在我的树莓派上运行,它需要大量内存。我在外部 USB 闪存驱动器上设置了 2 GB 交换。但是当我用 -Xmx2048M 启动 jar 时,它说它无法为 2097152KB 对象堆保留足够的空间。我知道这是一个坏主意,但我还是想这样做。如何让 java 将交换识别为堆空间?

0 投票
1 回答
45 浏览

linux - 缺页时如何通过虚拟地址找到唯一的交换页

例如,如果有 3 个进程,每个进程都使用0x400000文本部分的虚拟地址。并且用户进程只有一个4KB物理页面。

假设进程 0 正在使用物理页面(虚拟地址0x400000)。假设物理页数据为page_pid_0_0x400000

当操作系统调度进程 1 时page_pid_1_0x400000,进程 1 将从可执行文件加载到物理页面中。然后page_pid_0_0x400000应该将数据换出到磁盘。

当进程 2 也被加载时,page_pid_2_0x400000物理页面上的数据也应该被换出到磁盘。

现在,在磁盘上,我们有相同虚拟地址空间的 2 个副本,即0x400000:page_pid_1_0x400000page_pid_0_0x400000.

如果现在调度进程 1,我(操作系统)如何识别page_pid_1_0x400000来自虚拟地址0x400000(因为内存访问指令只知道虚拟地址0x400000而不知道进程 ID)?

0 投票
1 回答
47 浏览

caching - 如何将分页系统(按需分页)视为另一层缓存?

我尝试解决以下问题


考虑一台具有 128MiB(即 2^27 字节)主内存和一个 MMU 的机器,其页面大小为 8KiB(即2^13 字节)。操作系统为大型旋转磁盘提供按需分页。将此分页系统视为处理器的最后一级缓存 (LLC) 之下的另一层缓存,请回答以下有关此“缓存”特性的问题:

行大小(以字节为单位)?2^13(每页有 2^13 个字节)

关联性?全联想

缓存中的行数?2^14(内存大小/页面大小)

标签大小以位为单位?14(缓存中的行数为 2^14,这为我们提供了 14 位用于标记)

换货政策?我完全不确定(可能是近似 LRU 的时钟算法)

回写还是直写?回写(始终与磁盘不一致) 写分配?是的,因为在页面错误之后,我们将页面带到内存中进行写入和读取

排他性/包容性?我认为非包容性和非独占性(NINE),可能是因为内存映射文件部分在内存中,部分在交换文件或 ELF 文件(程序文本)中。例如,进程堆栈仅在内存中,除非我们用完内存并将其发送到交换文件。我对吗?


如果有人检查我的答案并帮助我正确解决这个问题,我会很高兴,谢谢!抱歉,如果这里不是问这些问题的地方

0 投票
1 回答
195 浏览

linux - Dotnet Core 不会使用 Swap

我编写了一个dotnet分配内存的简单应用程序。它耗尽了机器上的所有物理内存,然后以OutOfMemoryException. 但是我的系统有一个交换文件,它从未被dotnet. 其他应用程序使用交换就好了。我玩过swappiness(60、100、1),但这没有效果。

我的理解是,Linux 上的进程可以消耗它想要的所有物理内存,如果没有剩余内存,则该内存将被写入交换文件/分区。只有当交换和物理内存都已满时,应用程序才会因 OOM 而崩溃。这是其他应用程序所做的,但不是dotnet应用程序。

我试过 dotnet core 3.1 和 5.0,使用的操作系统是 Ubuntu 20.04。

编辑:我的测试代码:

0 投票
1 回答
136 浏览

centos7 - CentOS 7:“free”命令未显示 LVM 交换扩展

我在 Windows 上的 VirtualBox 6 上运行 CentOS 7 来宾。free 命令的结果如下:

显示交换分区有 1.2 GB。我需要将其扩展至至少 2GB。因此,在来宾停止的情况下,我添加了一个 1.2 GB 的新卷,并且在重新启动后,我执行了以下操作:

现在,lvdisplay 命令显示新创建的卷,如下所示:

fstab 文件如下所示:

显示交换是在 /dev/mapper/centos-swap 分区上分配的。这是 fstab 命令的输出:

但重新启动后, swapon 命令似乎没有反映扩展名:

出于某种原因,交换似乎不在 /dev/mapper/centos-swap 分区上,而是在 /dev/dm-1 上,甚至不存在。并且 free 命令仍然显示与开头相同的结果:

和/proc/swaps:

我在这里想念什么?

西摩

0 投票
0 回答
253 浏览

linux - 在 qemu 下运行的客户机中配置交换空间

我已按照链接设置内核开发环境。总之,我正在运行具有自定义根文件系统的 Linux 内核 5.11.5。我正在使用buildroot创建根文件系统。现在,文件系统映像大小是固定的,因此我什至无法在运行时从来宾内部创建目录。所以,我无法创建交换空间。

请提供一种为访客创建交换空间的方法。

0 投票
0 回答
132 浏览

amazon-web-services - 如何分配内存以用作 Amazon EC2 上的交换空间?

我正在尝试使用硬盘驱动器上的分区分配内存以用作 Amazon EC2 实例上的交换空间。我正在按照此处列出的说明进行操作

但是这样做会导致错误消息,并且不会创建分区。这是我的尝试:

问题是,重新启动后似乎没有应用beeb。并尝试设置交换区域失败:

任何人都知道为什么指南中列出的步骤在这种情况下不起作用?