如果出現錯誤/警告,如何進行錯誤擷取和交換?
cas 註釋後不完整的偽 try-catch 虛擬碼
#!/usr/bin/env bash # http://askubuntu.com/q/799834/25388 # Use: `sh myScript`; sudo does not work with Matlab. #set -e # no rudimentary error checking # https://stackoverflow.com/a/69808/54964 SWAP_FILE="/media/masi/SamiSwapVirtual/.swap_file_20.7.2016" SIZE_MB="1000" TO_RUN="matlab" sudo dd if="/dev/zero" of="${SWAP_FILE}" bs="1M" count="${SIZE_MB}" status="progress" sudo mkswap "${SWAP_FILE}" sudo chmod 0600 "${SWAP_FILE}" sudo chown root:root "${SWAP_FILE}" # http://unix.stackexchange.com/a/297153/16920 # TODO error-handling if any error, do swap # Error-trapping here as here https://stackoverflow.com/a/185900/54964 ? # # My proposal where I am not sure about how to connect the commands inside the first block in braces # # https://stackoverflow.com/a/22010339/54964 { sudo swapon -v "${SWAP_FILE}" echo "Swap enabled. Press enter to continue"; read "${TO_RUN}" } || { echo "I will remove the swap. Press enter to continue"; read sudo swapoff -v "${SWAP_FILE}" rm -vf "${SWAP_FILE}" exit 1 } echo "I will remove the swap. Press enter to continue"; read sudo swapoff -v "${SWAP_FILE}" rm -vf "${SWAP_FILE}"
輸出
dd: failed to open '/media/masi/SamiSwapVirtual/.swap_file_20.7.2016': Permission denied mkswap: cannot open /media/masi/SamiSwapVirtual/.swap_file_20.7.2016: Permission denied chmod: changing permissions of '/media/masi/SamiSwapVirtual/.swap_file_20.7.2016': Operation not permitted [sudo] password for masi:
打開
dd
有時會根據磁碟mkswap
給出。Permission denied``sudo
- 你怎麼能在第一塊大括號中執行任何命令之前先詢問你的密碼?
系統:Linux Ubuntu 16.04 64 位 Linux 核心:4.6
硬體:Macbook Air 2013-mid
相關執行緒:BASH 中的錯誤處理
- 執行 matlab 是或應該與管理交換空間完全分開。您應該將交換創建/刪除部分分離到一個單獨的腳本中,然後使用
sudo
- 從命令行或從您的主 matlab 執行腳本執行該腳本。您還應該在使用變數時引用它們,而不僅僅是在定義它們時。順便說一句,由於您的變數是沒有任何變數等插值的固定字元串,因此在定義它們時應該使用單引號。您的命令也是如此
dd
- 只有of=
andcount=
參數需要雙引號。其他的根本不需要引用,但如果你選擇引用它們,單引號更合適。當您想在變數或參數中嵌入其他變數或命令替換時使用雙引號,固定字元串使用單引號。BTW 日期,YMD 正確排序。DMY 沒有。
例如
SWAPFILE="/$swappath/.swap_file_$(date +%Y%m%d)"
SWAP_FILE='/media/masi/SamiSwapVirtual/.swap_file_20.7.2016'
2. 您不應該僅僅因為您正在執行 matlab 就需要添加交換空間。或任何其他程序。如果您需要或可能需要更多交換空間,則只需將其添加到系統一次,例如添加/etc/fstab
並忘記它。如果您可以調整分區大小以使交換分區比您認為的需要稍大,那麼就這樣做。如果沒有,則在
/etc/fstab
.如果交換到 SSD,您應該使用該
discard
選項,以便在每次重新啟動時修剪塊。例如
/dev/sda4 none swap defaults,discard 0 0
該
discard
選項絕對適用於分區。我不確定它是否也適用於交換文件(我認為可以,但沒有看到任何這樣說的文件) 3. 如果硬體允許,比添加交換空間更好的是在系統中安裝更多 RAM。您在另一篇文章中提到您使用的是 Macbook Air,它具有焊接的 RAM,因此不允許 RAM 升級。對於其他機器,這是最好的選擇。帶有 4 個 DIMM 插槽的基於 DDR3 的系統可以輕鬆且相當便宜地升級到 32GB(大約 4x8GB DIMM $ 50 each). DDR4-based systems with 4 DIMM sockets can easily be upgraded to 64GB (4x16GB DIMMs at around $ 每個 100 個)。
(價格為近似值,以澳元為單位,以 .au 提供的產品,在撰寫本文時為目前價格)
安裝 16GB DDR3 DIMM 是可能的,但更難找到而且更貴……價格差異足夠大,可能值得升級主機板和 CPU 以獲得 DDR4。 4.
zram
可以將您的一些 RAM 用作壓縮的 RAM 塊設備。例如,對於使用最多 4GB RAM 的 zram 交換設備:modprobe zram num_devices=1 迴聲 $((4 * 1024 * 1024 * 1024)) > /sys/block/zram0/disksize mkswap /dev/zram0 交換 -p 100 / 開發 / zram0
如果您還有交換分區或交換文件,則可以使用它,但使用它更有意義,
zswap
因為沒有關於在 ZRAM 交換中保留什麼以及交換到磁碟的內容沒有“智能”。當 ZRAM 交換被填滿時,所有後續交換的數據都會進入磁碟,直到 ZRAM 中再次出現可用空間。 5. 如果您已經有一個交換分區,您可以使用zswap
壓縮動態調整 RAM 記憶體到現有交換空間。您可以告訴它使用哪種壓縮算法,以及允許使用的最大 RAM 百分比。例如:迴聲 1 > /sys/module/zswap/parameters/enabled echo lz4 > /sys/module/zswap/parameters/compressor 迴聲 50 > /sys/module/zswap/parameters/max_pool_percent
這將壓縮任何被換出的數據,當它接近最大 RAM 大小時,它開始在最近最少使用 (LRU) 的基礎上使用交換分區,因此最近使用的數據更有可能留在記憶體。
兩者
zram
都zswap
已經在主線核心中使用了幾年。
zram
或者zswap
如果您還升級 RAM,則可能特別有用。例如,我最近將我的主系統升級到 32GB 的 DDR3,並且還使用了一個 SSD 交換分區,zswap
配置為允許最多 25% 的 RAM 用於交換。