小编Phi*_*ing的帖子

如何仅在紧急情况下使用交换空间?

我有一台带有8 GB RAM 和 16 GB 交换的 Debian (Buster) 笔记本电脑。我正在运行一个很长的运行任务。这意味着我的笔记本电脑在过去六天里一直处于运转状态。

这样做时,我需要定期将笔记本电脑用作笔记本电脑。这应该不是问题;长时间运行的任务受 I/O 限制,处理 USB 硬盘上的内容,并且不占用太多 RAM (<200 MB) 或 CPU (<4%)。

问题是当我在几个小时后回到我的笔记本电脑时,它会非常缓慢,可能需要 30 分钟才能恢复正常。这太糟糕了,以至于崩溃监视器将它们各自的应用程序标记为已冻结(尤其是浏览器窗口),并且事情开始错误地崩溃。

查看系统监视器,大约一半使用的 2.5 GB 被转移到交换中。我已经通过删除交换空间 ( swapoff /dev/sda8) 来确认这是问题所在。如果我在没有交换空间的情况下离开它,即使在 24 小时后它也几乎立即恢复生机。使用交换,前五分钟实际上是一块砖,只剩下六个小时。我已经确认即使我不在时内存使用量也不会超过3 GB

我尝试将swappiness另见:维基百科)减少到10和的值0,但问题仍然存在。似乎在一天不活动后,内核认为不再需要整个 GUI 并将其从 RAM 中擦除(将其交换到磁盘)。长时间运行的任务是读取庞大的文件树并读取每个文件。因此,内核可能会误以为缓存会有所帮助。但是在一次扫描具有约 10 亿个文件名的 2 TB USB 硬盘时,额外的 GB RAM 不会对性能有太大帮助。这是一款价格低廉的笔记本电脑,硬盘速度很慢。它根本无法足够快地将数据加载回 RAM。

如何告诉 Linux 仅在紧急情况下使用交换空间?我不想在没有交换的情况下运行。如果发生意外情况,并且操作系统突然需要额外的几 GB,那么我不希望任务被杀死,而是希望开始使用交换。但目前,如果我启用交换,我的笔记本电脑就无法在需要时使用。

“紧急情况”的确切定义可能是一个有争议的问题。但要澄清我的意思:紧急情况是系统除了交换或终止进程之外别无选择。


什么是紧急情况?-你真的要问吗?...我希望你永远不会发现自己在燃烧的建筑物中!

我不可能在这个问题中定义可能构成紧急情况的所有内容。但是,例如,紧急情况可能是当内核被如此推入内存以至于它开始使用OOM Killer杀死进程时。当内核认为它可以通过使用交换来提高性能时,不是紧急情况。


最终编辑: 我已经接受了一个答案,该答案正是我在操作系统级别所要求的。未来的读者还应该注意提供应用程序级解决方案的答案。

linux memory swap

47
推荐指数
5
解决办法
5734
查看次数

RAM 不能交换的具体功能是什么?

当 Linux 有交换而没有交换时,它可以做什么?

对于这个问题,我想关注例如具有 32 GB RAM 且无交换的 Linux PC 与具有 16 GB RAM 且具有 16 GB 交换的几乎相同的 Linux PC 之间的区别。请注意,我对“是的,但是如果您将交换添加到 32 GB 的 PC,您可以看到 X 改进”不感兴趣。这是这个问题的题外话。


我第一次遇到这样的观点,即添加交换比在早期问题的注释中添加 RAM 更好。

我当然已经通读了这个:如果我有足够多的 RAM,我是否需要交换空间?和...

  • 答案主要集中在添加交换,例如讨论磁盘缓存,其中添加 RAM 当然也会扩展磁盘缓存。
  • 有人提到只能通过交换进行碎片整理,但我找不到证据来支持这一点。
  • 我看到一些对 MAP_NORESERVE 的引用mmap,但这似乎是一个非常具体和模糊的风险,仅与OOM情况相关,并且可能仅与私有mmap 相关。

交换通常被视为扩展内存或提高性能的一种廉价方式。但是,当大规模生产嵌入式 Linux 设备时,情况就完全相反了……

...在这种情况下,swap 会磨损闪存,导致它在保修期结束前数年发生故障。将 RAM 加倍是设备上的几美元。

请注意,这是 eMMC 闪存而不是 SSD!. 通常,eMMC 闪存没有磨损均衡技术,这意味着它的磨损速度比 SSD 快得多


关于这个问题,似乎确实有很多争论不休的意见。我真的在寻找关于能力的枯燥的事实,而不是“你应该/不应该”的意见。

交换可以做什么而添加 RAM 也不能完成?

linux swap

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

怎么可能 ssh somename 有效,而 nslookup somename 无效?

如何知道somename我可以知道的某些主机的 IP 地址ssh?如果我nslookup在这个主机上做,它会说“没有答案”。那么如何ssh解析它的名字呢?


/etc/hosts没有.ssh/config解释也没有奏效。


编辑

对不起somename是完全合格的。

ssh somename.somedomain
Run Code Online (Sandbox Code Playgroud)

工作,而

ping somename.somedomain
Run Code Online (Sandbox Code Playgroud)

nslookup somename.somedomain
Run Code Online (Sandbox Code Playgroud)

ssh nslookup host-name-resolution

16
推荐指数
2
解决办法
3619
查看次数

如何确定与网络上的 IP 关联的主机名?

如何确定与网络上的 IP 关联的主机名?(不配置反向DNS)

这是我认为不可能的事情。但是我一直在我的手机上使用Fing。它能够找到我网络上的每个设备(大概是使用 arp 扫描)并用主机名列出它们。

例如,这个应用程序能够找到插入家用路由器的新安装的 Debian Linux 设备,没有明显的反向 DNS。

据我所知,pingNeighbor Discoveryarp都不包含主机名。那么,fing 如何为新安装的 Linux PC 获得此功能呢?Linux 机器上的其他什么协议会给出机器配置的主机名?

networking hostname ip-address

12
推荐指数
1
解决办法
1380
查看次数

是否有任何实用程序可以仅在一个方向上执行 ICMP 测试(“ping”)?

我最近遇到了一些网络配置的问题,这很难解决。

如果我知道交通无法通过哪个方向,这似乎会容易诊断。由于所有ping请求都没有收到任何响应,我想知道 ping 请求数据包是否通过并且响应失败,或者是否是请求本身失败。

明确地说,标准实用程序喜欢pingtraceroute依赖于从一台机器发送数据包并接收数据包以响应同一台机器。当没有响应返回时,总是无法判断初始请求是否未能通过,或者对它的响应被阻止,或者甚至根本没有发送对它的响应。我想分析的正是这个特定的细节,“哪个方向是失败的”。

是否有任何适用于 Linux 的常用实用程序可以让我监视传入的 ICMP ping 请求?

linux networking icmp

12
推荐指数
1
解决办法
810
查看次数

是否有可用于 Linux 的多用户 webdav 服务器?

我希望完全停用我的 SMBA 服务并将其替换为 WebDav 服务。

到目前为止所有的谷歌搜索都指向我使用 Apache/Webdav。这与我需要的很接近,但据我所知,它需要 Apache 访问我用户的文件,更糟的是;如果它创建一个文件,则新文件将归 Apache(而不是用户)所有。 请注意,要求文件具有正确的 Unix 所有权和权限,因为某些用户具有直接 SSH 访问权限。

所以我只是在寻找一种方法来使 Apache/Webdav 与多用户“正确”工作(即在尝试提供文件之前将 unix 用户更改为登录用户)或找到 Apache /网络视频

到目前为止,搜索还没有出现任何结果。

multiuser webdav

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

如何获得接口支持的最大 MTU 大小?

我可以设置接口的 MTU,例如:

ip link set dev eth0 mtu 9000
Run Code Online (Sandbox Code Playgroud)

然而,不同的接口和不同的机器似乎有不同的限制导致错误:

Error: mtu greater than device maximum.
Run Code Online (Sandbox Code Playgroud)

我试图找到一种方法来检查 NIC 是否支持特定的 MTU 大小,而无需先尝试设置它;实际上,我想找到我所有服务器上所有接口的理论最大 MTU。

我检查了 ethtool 的所有功能,查看了 /sys/class/net 等,但我能找到的只是当前的 MTU 值。

有没有办法在不尝试的情况下查看接口上的 MTU 有多高?

linux networking ethernet

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

deb 文件或 apt 中依赖项要求末尾的波形符 (~) 是什么意思?

我很想了解~Apt 的依赖项是如何处理的,或者它是如何为 deb 文件定义的(我不确定语法是在哪里定义的)。

我遇到了关于 Ubuntu (Focal) 元包的依赖关系,python3该包具有依赖关系约束:(python3.8 >= 3.8.2-1~请参阅此处)。

我相信软件包版本是这样定义的,以便它们按词法顺序排序,但是当我检查 ubuntu focus 时,没有按python3.8词法排序的版本>= 3.8.2-1~,但有一个版本3.8.10-0ubuntu1~20.04.4推断 Ubuntu Focal 的依赖项已损坏(它们没有)或存在~依赖关系中有一些特殊含义。

我能找到的关于该主题的唯一文档是 Debian 的声明包之间的关系。但这没有提到~or 模式匹配。

~那么.deb 依赖项中尾随的含义是什么?

dpkg apt dependencies deb

10
推荐指数
2
解决办法
2178
查看次数

从反向 SSH 隧道获取源 IP

如果我使用客户端使用 SSH 创建反向隧道,-R如果我运行 netstat,我将在服务器上获得此输出:

default@debian:~$ sudo netstat -pln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      801/sshd
tcp        0      0 127.0.0.1:39963         0.0.0.0:*               LISTEN      1074/sshd: anonymou
tcp6       0      0 :::22                   :::*                    LISTEN      801/sshd
udp        0      0 0.0.0.0:68              0.0.0.0:*                           451/dhclient
Run Code Online (Sandbox Code Playgroud)

我想知道在 port 上创建侦听套接字的客户端的 IP 是多少39963

我可以运行什么命令,这样我不仅可以获得绑定的 IP:PORT,还可以获得创建隧道的客户端的 IP?

ssh ip ssh-tunneling

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

Linux 如何使用实时时钟?

我正在研究一些Beagle Bone Black (BBB)板上的一个非常奇怪的效果。我们看到系统时钟偶尔会出现几个月的跳跃,这总是与systemd-timesyncd更新系统时钟相关。我们每周会在不同地点的 2000 台设备中看到其中的 2 到 3 个。

我们花了很多时间检查 SNTP,但这似乎表现正常。

我们终于提出了板载实时时钟的硬件问题,由于电子噪声,该问题可能导致其随机跳跃 131072 秒(36 小时)。这并不立即正确,报告的时间跳跃非常具体并且比我们观察到的要少得多,但是对该问题的深入阅读表明跳跃可能更加随机,甚至可能倒退。

我的问题是... linux 如何使用实时时钟来维护系统时钟

我想知道实时时钟的错误是否只会在时间同步代理(ntpd 或 systemd-timesyncd)更新时出现在系统时钟中。系统时钟和 RTC 之间是否有任何直接联系,还是仅由代理使用?


注意:在第一段中我提到我们在系统时钟中看到几个月的跳跃,这总是与systemd-timesyncd更新系统时钟相关。我的意思是,时间跳转后的第一个系统日志消息是一条Time has been changed系统日志消息:

grep 'Time has been changed' /var/log/syslog
Oct  2 23:53:33 hostname systemd[1]: Time has been changed
Nov 21 00:07:05 hostname systemd[1]: Time has been changed
Nov 21 00:05:17 hostname systemd[1]: Time has been changed
Nov 21 00:03:29 hostname systemd[1]: Time has …
Run Code Online (Sandbox Code Playgroud)

linux ntpd ntp clock systemd-timesyncd

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