Linux
交換 bash 腳本固定 htop 的記憶體使用情況
我部署了一個 hack 來向 VPS 添加交換空間,否則我無法使用它
swapon
來創建文件。在添加和執行腳本之前,我按照此處列出的步驟進行操作。並總結如下:
- 首先我創建交換文件:
sudo dd if=/dev/zero of=/swapfile bs=1024 count=512k
- 然後
sudo mkswap /swapfile
。- 下一步通常是做一個
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 實例中,您可能可以啟用交換。我完全預計性能會很糟糕。