我有一台装有 Ubuntu 18.04 的联想 R61 Thinkpad。它有 4GB 内存、三星 SSD 860 EVO 500GB(带 9GB 交换分区)、Core™2 Duo CPU T7500 @ 2.20GHz × 2 和 Intel® 965GM (CL) 显卡。
我开始使用内存占用很大的软件(如 GIMP 或 Google Map)一段时间后,突然间交换开始,系统冻结,硬件 LED 灯不断闪烁。时钟有时超过 20 到 30 分钟不会前进,有时它会崩溃,屏幕空白,然后自行重启。我不认为它用完了所有 9GB 交换空间。
我尝试自己研究解决这个问题,但到目前为止,网上的所有建议都失败了。以前,它使用的是金士顿 SSD,后来我了解到它与 Linux 的固件存在问题,所以我换成了三星 SSD。但冻结问题仍然存在。
这是正常现象吗?因为我的硬件太旧或有故障?还是我的软件配置或设置不正确?我应该从哪里开始进一步查找?
非常感谢。
附言
进一步测试后更新。
我想我可能已经找到了冻结的原因。随着 32GB 交换分区的增加,如果我在 GIMP 中打开大量图像并大量使用 Googlemap,内存使用量将上升到 3.6GB,交换使用量将上升到 4.1GB,系统变得迟缓,鼠标移动变得不流畅。但它不会冻结。但是,如果我用图片查看器在里面文件(nautilus) 双击图像(可能在打开多个图像后),系统会冻结,无论是否出现空白屏幕。昨晚,系统出现空白屏幕,并在冻结 5 到 10 分钟后注销。我以为是重新启动,但从正常运行时间来看并非如此。
今天早上,内存使用率为 3.1GB,交换使用率为 3.2GB,双击文件中的图像后,屏幕空白了近 2 个小时,我不得不手动重新启动它。其他图像查看器不会导致冻结。如果我记得过去发生过冻结,只有图像查看器会以某种方式触发此冻结。如果内存使用量较少,我认为不会发生这种情况。
那么,有没有办法可以捕捉打开图像查看器时后台发生的快照,以便我可以将其转发给图像查看器程序员进行审查。该程序可能有错误。
谢谢。
答案1
从更新来看,我倾向于更改您的swappiness
值,因为它会导致磁盘缓存不足。Ubuntu 安装的默认值为 60,除非您正在运行服务器或拥有大量 RAM,否则这是一个不错的数字。但是,由于每个系统和每个配置都略有不同,因此最好从测试解决方案。
首先改变swappiness
现有值:
sudo sysctl vm.swappiness=60
此值将在下次重新启动时重置10
。如果您注意到系统在设置为60
(或任何其他值)后性能更好,您可以像这样将其永久保留:
- 打开终端(如果尚未打开)
- 以 root 身份编辑
sysctl.conf
文件:
笔记:随意使用你喜欢的任何文本编辑器。sudo vi /etc/sysctl.conf
vi
这里的使用更多的是肌肉记忆,而不是明确的认可。 - 找到
vm.swappiness
并设置为最适合您的值 - 保存文件并应用更改:
sudo sysctl -p
稍微有点vm.swappiness
...
值为swappiness
10 并不意味着只有当 RAM 剩余 10% 时才会交换数据。最好将其视为从缓存中窃取页面与交换页面以提供内存的“优先比率”。较低的值将强烈倾向于从缓存中窃取页面,而较高的值将强烈倾向于将页面交换到磁盘。系统通常会忽略此设置,直到内存几乎完全使用,并且内核被迫决定如何释放部分内存以供其他进程使用。
上述解释中提到的缓存是磁盘缓存,因此减少的值swappiness
,可以增加进程不被交换出内存的机会。这也会减少系统可用的磁盘缓存总量,从而导致对 SSD 的读写速度比需要的慢得多。因此,此设置对系统实际性能的影响并不像许多人想象的那样是二维的。
对于任何给定系统,没有“神奇公式”可以确定正确的数量swappiness
,因此可能需要进行一些尝试和错误。话虽如此,60
对于运行桌面的绝大多数人来说,许多基于 Debian 的操作系统附带的默认设置似乎是一种很好的平衡。
我希望这能为您提供所需的更可靠的系统。