Linux 系统完全无响应,有大量可用交换空间

Linux 系统完全无响应,有大量可用交换空间

我有一个 .NET (Core 2.0) 服务,我将其从 Windows 移至 AWS 上的 Linux 实例。这些实例是微型的,具有 1Gb RAM。

我为 Linux 实例添加了 1Gb 的交换空间,并设置了 swappiness=100,但当物理内存已满时,服务器会冻结。进程本身会变慢,几乎停止,甚至在 bash 上按下 ENTER 键有时也需要 10 秒钟才能出现新行。

运行时top,我发现可用内存通常为 10、20mb。该进程使用 800Mb 以上的 RAM,而交换总是几乎为空,最大使用量为 20mb。即使在那里放了一个小时,也没有交换更多。

我可以看到 AWS 上的磁盘和 CPU 信用额度几乎达到 100%,因此它不会限制资源使用。此外,这些实例大约有一百个,我多次替换它们,行为始终相同,因此看起来不像坏例子问题。

令我烦恼的是,这种情况在 Windows 上没有发生,并且 Linux 实例在基本系统上使用的内存减少了大约 200mb。

除了 swappiness 之外,还有什么设置需要调整,以使 Linux 移动更多内存来交换?

编辑:交换已通过 cloud-init 正确设置,并且可以在重启后正常进行:

设置:

fallocate -l 1024M /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
sysctl vm.swappiness=100

free -m启动后:

             total       used       free     shared    buffers     cached
Mem:           993        232        760          0          7        152
-/+ buffers/cache:         72        921
Swap:         1023          0       1023

答案1

我找到了真正的问题。该应用程序在docker中运行,并且AWS 有意阻止 ECS 容器内的交换使用由于某种原因。由于我们之前没有使用 ECS 来管理 docker,因此此阻止不会影响 Windows。

在与他们的支持人员交谈后,他们不支持容器内交换,并且不知道什么时候会支持。所以,我必须离开 ECS 并自己管理 docker。

答案2

好吧,您的错误可能实际上很小。较高的 swappiness 值会导致某些操作系统配置出现问题。尝试使用 15 这样的值。(请注意:强迫您的系统优先使用 swap 是一个糟糕的想法。您的系统需要使用实际 RAM 才能正常运行。[如果您不知道或颠倒了它,swappiness 是在使用 swap 之前可用 RAM 的百分比,因此 15 表示在 SWAP 分区之前必须使用 85% 的 RAM。])

另外,您是如何添加交换空间的?如果您只是更改了配置而没有创建新分区,或者在 /etc/fstab 文件中留下了错误,那么您将无法使用交换空间,并且系统会尝试写入不存在或无法写入的内容(或者会发生更有趣的事情),从而导致无法使用。我已经通过这些方法破坏了不止一个安装。

相关内容