我有一台带有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 有交换而没有交换时,它可以做什么?
对于这个问题,我想关注例如具有 32 GB RAM 且无交换的 Linux PC 与具有 16 GB RAM 且具有 16 GB 交换的几乎相同的 Linux PC 之间的区别。请注意,我对“是的,但是如果您将交换添加到 32 GB 的 PC,您可以看到 X 改进”不感兴趣。这是这个问题的题外话。
我第一次遇到这样的观点,即添加交换比在早期问题的注释中添加 RAM 更好。
我当然已经通读了这个:如果我有足够多的 RAM,我是否需要交换空间?和...
mmap,但这似乎是一个非常具体和模糊的风险,仅与OOM情况相关,并且可能仅与私有mmap 相关。交换通常被视为扩展内存或提高性能的一种廉价方式。但是,当大规模生产嵌入式 Linux 设备时,情况就完全相反了……
...在这种情况下,swap 会磨损闪存,导致它在保修期结束前数年发生故障。将 RAM 加倍是设备上的几美元。
请注意,这是 eMMC 闪存而不是 SSD!. 通常,eMMC 闪存没有磨损均衡技术,这意味着它的磨损速度比 SSD 快得多
关于这个问题,似乎确实有很多争论不休的意见。我真的在寻找关于能力的枯燥的事实,而不是“你应该/不应该”的意见。
交换可以做什么而添加 RAM 也不能完成?
如何知道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)
别
如何确定与网络上的 IP 关联的主机名?(不配置反向DNS)
这是我认为不可能的事情。但是我一直在我的手机上使用Fing。它能够找到我网络上的每个设备(大概是使用 arp 扫描)并用主机名列出它们。
例如,这个应用程序能够找到插入家用路由器的新安装的 Debian Linux 设备,没有明显的反向 DNS。
据我所知,ping、Neighbor Discovery和arp都不包含主机名。那么,fing 如何为新安装的 Linux PC 获得此功能呢?Linux 机器上的其他什么协议会给出机器配置的主机名?
我最近遇到了一些网络配置的问题,这很难解决。
如果我知道交通无法通过哪个方向,这似乎会更容易诊断。由于所有ping请求都没有收到任何响应,我想知道 ping 请求数据包是否通过并且响应失败,或者是否是请求本身失败。
明确地说,标准实用程序喜欢ping并traceroute依赖于从一台机器发送数据包并接收数据包以响应同一台机器。当没有响应返回时,总是无法判断初始请求是否未能通过,或者对它的响应被阻止,或者甚至根本没有发送对它的响应。我想分析的正是这个特定的细节,“哪个方向是失败的”。
是否有任何适用于 Linux 的常用实用程序可以让我监视传入的 ICMP ping 请求?
我希望完全停用我的 SMBA 服务并将其替换为 WebDav 服务。
到目前为止所有的谷歌搜索都指向我使用 Apache/Webdav。这与我需要的很接近,但据我所知,它需要 Apache 访问我用户的文件,更糟的是;如果它创建一个文件,则新文件将归 Apache(而不是用户)所有。 请注意,要求文件具有正确的 Unix 所有权和权限,因为某些用户具有直接 SSH 访问权限。
所以我只是在寻找一种方法来使 Apache/Webdav 与多用户“正确”工作(即在尝试提供文件之前将 unix 用户更改为登录用户)或找到 Apache /网络视频
到目前为止,搜索还没有出现任何结果。
我可以设置接口的 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 有多高?
我很想了解~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 依赖项中尾随的含义是什么?
如果我使用客户端使用 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?
我正在研究一些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)