Linux 在长时间正常运行后速度变慢

mab*_*enk 7 linux opensuse kde

有时,我将基于 openSUSE 13.1 64 位系统 KDE 的系统搁置几天甚至一周,而无需重新启动。但是,我注意到经过一夜空闲待机后,当我第二天早上想使用它时,系统变得非常慢。到目前为止,我一直在尝试通过运行来释放页面缓存、dentries、inode

echo 3 > /proc/sys/vm/drop_caches
Run Code Online (Sandbox Code Playgroud)

这只是部分帮助。你能推荐其他方法来分析和解决系统缓慢的原因吗?

X T*_*ian 4

我也注意到了这一点,对于我 6 年前使用的系统更是如此,并且在你提出问题之前我已经忘记了这一点。

早上返回系统时或更糟糕的是周末后,按下终端中的按键或单击 Firefox 中的选项卡,将触发大量的磁盘活动。

我对所发生情况的理论是,该活动是由于进程再次换入造成的,其原因是由于内核交换空闲进程以优化可用“空闲”内存量的积极性质,这可能是当一个新进程可能启动时,在活动系统上这是一个聪明的想法,但有一个特殊的缺点。

确认这一点的一种方法是有一个正在vmstat 1 1运行的终端,不幸的是,运行某些东西会使系统不那么空闲,所以这对实验有一些影响,所以当你启动时,你需要小心地从不同的终端或另一个程序开始。从早上开始,确保该窗口可见,以便您可以看到统计数据。

当您开始时,您应该会看到 SI Swap 列突然出现。

我该如何解决它?我让计算机关闭到挂起模式(在我的笔记本电脑上),或者在台式机上完全关闭。我从不使用休眠,因为我发现从休眠中唤醒需要更长的时间,而不是简单地从头开始启动,并且启动时间与以前相比有了很大的改善,并且磁盘驱动器更快,内存更便宜。(当时我的系统有 1GB 内存,而今天它有 4GB 或更多)并且我怀疑触发换出时也存在内存使用因素。所以更多的记忆会有所帮助。

有一个内核调整参数会影响交换性

要查看您当前的设置是什么:

cat /proc/sys/vm/swappiness
Run Code Online (Sandbox Code Playgroud)

该值可以在 0 到 100 之间,100 表示从物理内存策略中最积极的换出,0 表示最不积极的换出。

您可以通过简单地将值回显到该伪文件来更改它。

例如

echo 20 > /proc/sys/vm/swappiness
Run Code Online (Sandbox Code Playgroud)

这里有一篇很好的文章和一些与交换相关的性能链接。

编辑 1 回答@Gilles

我也让机器运行了多年,只是为了关闭,因为我实际上已经搬迁了场所,我并不是暗示有软件腐烂之类的东西,只是我也经历了我所描述的情况,这对于服务器来说并不明显,当您通过 ssh 登录时,但它是在我的华硕 eeepc 901 上,当它不睡眠时,按 Shift 键在系统响应之前会出现明显的磁盘活动。我没有编造事情,因为你没有注意到这并不意味着说这种行为不存在。我根本没有批评 Linux 或贬低 Linux 的意思。

编辑 2 @mabalenk

您正在确认具体情况,60 是默认的交换性,当没有发生任何事情时,SI 计数将为零。vmstat 1每秒打印统计数据,因此除了打印的第一行之外,每一行都是最后一秒的增量,因此当您看到它上升时,就发生了交换。话虽如此,你的数字 60 左右似乎不是很高,也许我的系统内存特别低,我会看到更高的数字 120-250 并持续 20-50 秒,(有时几个)分钟),然后降到零,我会从终端中的原始按键得到响应。

是的,内核往往会显示 90% 的内存使用率(它会尽量不浪费任何内存。;-))。使用的 30% 交换空间并没有多大意义,因为它是使用的保留交换空间量,并且取决于已分配的空间量。您的 RAM 量和交换空间分配将是有用的数字,可以添加到您的原始帖子(您可以随时编辑。)。

我不明白你为什么猜测 kde 有问题?如果我是你,我只会改变交换性,并将其降低到荒谬的程度,比如晚上离开之前 5,然后在早上重新开始时再次检查,看看统计数据是否有任何差异。

我不知道您是否阅读过我发布的任何链接,但一位长期的内核开发人员 Andrew Morton 发表了一条有趣的评论。他建议,除了使用小于 100 的交换性之外,任何其他方法都不允许内核正常完成其工作。现在,如果人们将系统视为一个整体,这是有道理的,为什么不交换不活动的页面并为活动部分的功能提供更多的空间呢?但这可能会产生不利影响,当您将使用的下一位内存已被换出时,因此当您早上再次启动时,您必须等待这些页面再次换入​​,然后才能得到响应。没有一种方法适合所有情况。

但请记住,这是一个调整参数,如果您运行的交换大小是实际 RAM 的 4 倍,那么使用 30% 的交换意味着您使用的内存是实际内存的两倍以上,因此您的最终解决方案是是为了获得更多 RAM,因为更改交换性会减慢交换速度,但不会完全改变行为。您可能会发现,在 16 小时空闲时间之后,您无论如何都会被换出,因为 cron 作业在晚上启动,完全改变了您的主动/被动内存页面占用空间。