Linux

交換 bash 腳本固定 htop 的記憶體使用情況

  • November 13, 2013

我部署了一個 hack 來向 VPS 添加交換空間,否則我無法使用它swapon來創建文件。

在添加和執行腳本之前,我按照此處列出的步驟進行操作。並總結如下:

  1. 首先我創建交換文件:sudo dd if=/dev/zero of=/swapfile bs=1024 count=512k
  2. 然後sudo mkswap /swapfile
  3. 下一步通常是做一個sudo swapon /swapfile. 但是,我使用的 VPS 不適合,所以我找到了這篇文章。 那聲稱我可以使用以下腳本作為解決方法。

見下文:

#!/bin/bash
SWAP="${1:-512}"
NEW="$[SWAP*1024]"; TEMP="${NEW//?/ }"; OLD="${TEMP:1}0"
umount /proc/meminfo 2> /dev/null
sed "/^Swap\(Total\|Free\):/s,$OLD,$NEW," /proc/meminfo > /etc/fake_meminfo
mount --bind /etc/fake_meminfo /proc/meminfo

有關更多上下文,此答案中詳細描述了該過程。(它主要是在執行一個 bash 腳本。)

一切似乎都很好,但是當我查看 htop (或free -m就此而言)時;記憶體使用量保持在我執行腳本時的任何值,並且使用的交換空間保持為零。這與我在伺服器上執行的任何程序無關。我對記憶體分配發生的事情的了解非常有限(這真的是我第一次搞砸它)。鑑於我正在執行的腳本,誰能告訴我這是否有意義,為什麼?

您極大地誤解了該文章所說的“假交換”的含義。有些程序出於各種原因堅持要求系統啟用交換空間(Oracle)。如果不是,程序——或者至少是它的安裝程序——會抱怨。當然,對於前面提到的數據庫,無論如何都有辦法告訴它繼續,但人們通常不知道它們。

您發現的“假交換”是一種解決方法。這是對這些程序撒謊的一種方式,並且啟用了假裝交換。*交換是謊言。*沒有實際的交換。但是該程序認為存在,因此它不會抱怨。解決方法還在於free等,並且還在於所有其他值/proc/meminfo。(老實說:如果我發現它在我正在使用的系統上使用 - 管理少得多 - 我會使用比“解決方法”更苛刻的術語。不適合禮貌交談的術語。)

Tante 對另一個問題的回答可能是正確的:OpenVZ 不支持虛擬機上的交換。沒有其他選擇swapon。它做了一堆檢查,然後呼叫核心的swapon系統呼叫。如果不支持系統呼叫,那麼您就完成了。你不能這樣做。對不起。

根據您要解決的實際問題,還有一些其他方法可能有效:

  • 如果一個特定的程序需要處理大量數據,mmap可能仍然有效。或者使用更節省空間的算法。
  • 為 VM 分配(或要求/支付)更多記憶體。可能在主機上啟用交換。
  • 切換到不同的虛擬化解決方案,或在裸機上執行。
  • 您可能可以在 OpenVZ 容器中執行使用者模式 Linux。在那個 UML 實例中,您可能可以啟用交換。我完全預計性能會很糟糕。

引用自:https://unix.stackexchange.com/questions/100937