相关疑难解决方法(0)

使 Linux 读交换回内存

当我运行使用大部分 16GB 物理内存的应用程序时,Linux 内核会从内存中换出大部分页面。应用程序完成后,每个操作(键入命令、切换工作区、打开新网页等)都需要很长时间才能完成,因为首先需要从交换中读回相关页面。

有没有办法告诉 Linux 内核将页面从交换区复制回物理内存,而无需手动接触(和等待)每个应用程序?我运行了很多应用程序,所以等待总是很痛苦。

我经常swapoff -a && swapon -a用来使系统再次响应,但这会从交换中清除页面,因此下次运行脚本时需要再次写入它们。

是否有内核接口(可能使用 sysfs)来指示内核从交换中读取所有页面?

编辑:我确实在寻找一种方法来使所有交换交换缓存。(感谢德罗伯特!)

[PS serverfault.com/questions/153946/...serverfault.com/questions/100448/...是相关主题,但没有解决如何让Linux内核在不清除swap的情况下将页面从swap复制回内存的问题。]

linux kernel memory swap sysfs

33
推荐指数
4
解决办法
5320
查看次数

我们如何知道谁在伪终端设备的另一端?

如果我做:

echo foo > /dev/pts/12
Run Code Online (Sandbox Code Playgroud)

某些进程foo\n将从其文件描述符中读取到主端。

有没有办法找出那个(那些)过程是什么?

或者换句话说,我怎么能找出哪个 xterm/sshd/script/screen/tmux/expect/socat... 在 的另一端/dev/pts/12

lsof /dev/ptmx将告诉我在任何 pty 的主端具有文件描述符的进程。一个进程本身可以使用ptsname()TIOCGPTNioctl)根据自己的fd找出从设备到主端,所以我可以使用:

gdb --batch --pid "$the_pid" -ex "print ptsname($the_fd)"
Run Code Online (Sandbox Code Playgroud)

对于lsof构建该映射而返回的每个 pid/fd ,是否有更直接、可靠且侵入性更小的方法来获取该信息?

terminal-emulator open-files pty

29
推荐指数
2
解决办法
6391
查看次数

暂停/恢复到/从磁盘的单个进程

有时,我们希望暂停 Ubuntu 和 OS X 服务器上的内存密集型进程,以暂时释放一些 RAM 用于其他作业。如果我们担心的只是 CPU 使用率,那么简单的方法Ctrl-Z就行了。但是,我们需要能够释放 RAM(通过将其写入磁盘)然后重新启动进程(磁盘 -> RAM)或换句话说“休眠”单个进程。关于如何做到这一点的任何线索?(最好来自 CLI。)谢谢。

process memory suspend

23
推荐指数
3
解决办法
8659
查看次数

如何将所有正在运行的应用程序从交换空间重新加载到 RAM 中?

如果我的桌面内存不足并且交换了很多,那么我会释放或杀死浪费我 RAM 的应用程序。但是,在那之后,我所有的桌面/应用程序都被交换了并且速度非常慢,你知道一种“取消交换”(从交换空间重新加载到内存中)我的桌面/应用程序的方法吗?

linux desktop memory swap

21
推荐指数
3
解决办法
2万
查看次数

读取另一个进程的堆栈?

我正在尝试读取子进程的堆栈,但没有运气。我知道可以使用ptrace,但是ptrace的界面允许您一次只读取一个单词,我正在尝试扫描堆栈的更大部分。

我还尝试在首先使用 ptrace 附加到文件后/proc/$pid/mem/proc/$pid/maps文件中提取的堆栈边界读取(如建议here),但读取一直失败(即使以 root 身份运行),尽管相同的代码在尝试时成功从进程的不同部分(例如堆)读取。

我究竟做错了什么?还有其他选择吗?

linux kernel memory proc

17
推荐指数
1
解决办法
5478
查看次数

探索 RAM 内容

我正在使用redis数据库并想探索应用程序正在使用的 RAM 的内容。

我觉得我为什么要这样做的解释比我要问的问题更有意义。

Redis 是一个简单的键值存储,用于存储二进制数据。我认为这将是一个探索编码之类的好地方,我会很有趣地做一些事情,比如浏览 RAM 寻找二进制数据集,做一些事情,比如寻找简单的模式;也许探索编写在 RAM 中搜索的婴儿查询语言的想法。

在阅读了SICP 中关于查询语言的章节后,我有了这个想法。

关于从哪里开始的任何想法?最初,我想向系统询问“请给我此应用程序运行所在的地址空间”。

linux memory

15
推荐指数
3
解决办法
2万
查看次数

导致 I/O 错误的特殊文件

如果无法读取基本的 SQLite DB 文件(导致 I/O 错误),我想自动测试某个软件是否按预期做出反应。这正是几天前发生在客户身上的事情。我们手动修复了它,但现在我想创建自动代码来修复它,并且需要访问损坏的文件来测试它。

由于 Unix 中的一切都是一个文件,我怀疑可能有一个特殊的文件,当人们试图读取它时(例如在 /dev 中),它总是会导致 I/O 错误。

一些类似的文件(imo)是:

  • /dev/full 如果您尝试编写它,它总是显示“设备上没有剩余空间”
  • /dev/null/dev/zero

所以我认为必须有一个这样的文件(但还没有找到)。

有谁知道这样的文件或任何其他方法可以让我获得所需的结果(故意错误的分区映像,使用 LD_PRELOAD 围绕 open() 的包装器,...)?
去这里的最佳方式是什么?

linux io devices testing

15
推荐指数
3
解决办法
2万
查看次数

无文件恶意软件如何在 linux 上工作?

我理解无文件恶意软件的定义:

不基于文件而仅存在于内存中的恶意代码……更具体地说,无文件恶意代码……将自身附加到内存中的活动进程中……

有人可以解释一下这个附加到内存中的活动进程是如何工作的吗?

此外,针对此类攻击有哪些(内核)保护/强化可用?

process malware linux-kernel

11
推荐指数
1
解决办法
1823
查看次数

如何找到正在运行的进程的堆内存?

我想知道如何找到在后台运行的进程的堆内存。有没有允许这样的命令?

process memory

10
推荐指数
1
解决办法
6万
查看次数

内核:禁用 /dev/kmem 和 /dev/mem

我理解这一点/dev/kmem/dev/mem提供对系统内存(即原始 RAM)的访问。我也知道,这/dev/kmem可以在内核中完全禁用,并且可以限制/dev/mem.

在我看来,对内存的原始访问对开发人员和黑客很有用,但为什么我需要通过/dev/mem. AFAIK 它不能在内核中被禁用(不像/dev/kmem)。访问可能被滥用/利用的原始内存在我看来只是自找麻烦。

它有什么实际用途吗?是否有任何用户程序需要它才能正常工作?

linux security kernel memory

9
推荐指数
1
解决办法
2万
查看次数