Filecoin 運維(1) - 幾個常用的系統配置


1. 永久修改 ulimit

二階段測試的 lotus daemon 在同步的時候,經常會出現 too many open files 錯誤,然后停止同步了。而且隨着你算力的增加,每次需要參與時空證明的扇區也會增多,到后面也同樣會出現too many open files 的錯誤。解決這個問題的方法是修改 ulimit 配置。

一般系統默認的是 1024, 穩妥起見我們可以設置其為 1048576。臨時修改 ulimit 我們可以使用如下操作:

ulimit -n 1048576

如果要永久設置,操作就復雜一些。首先,需要設置系統層面的 ulimit。

echo 'fs.file-max = 1048576' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p # 立即生效

然后在修改用戶層的配置:

sudo tee -a /etc/security/limits.conf << EOF
*               hard    nofile          1048576
*               soft    nofile          1048576
root            hard    nofile          1048576
root            soft    nofile          1048576
EOF

然后修改 Systemd 層:

sudo sed -i '/DefaultLimitNOFILE/c DefaultLimitNOFILE=1048576' /etc/systemd/*.conf
sudo systemctl daemon-reexec

如果你用來跑的網絡服務,通常你還需要設置最大 socket 連接數:

 
echo 'net.core.somaxconn=65535' | sudo tee -a /etc/sysctl.conf sudo sysctl -p # 立即生效 

改完記得要重啟才能生效!!!

2. raid 重啟失效問題

這里順便先提一下硬 RAID 還是軟 RAID 的問題。硬 RAID 重建對資源占用率較低;軟RAID的話,重建的時候,吃CPU。硬 RAID 的算法其實更穩定點。但軟 RAID 性能會更好。
因為 RAID 卡上的 CACHE 一般也就是 512MB 或者 1GB,但軟RAID可以隨便利用系統的內存做 RAID STRIE CACHE。所以,簡單來說,如果你的 CPU 和內存資源有富余,那么就可以使用 RAID,否則建議使用硬 RAID。

在搭建 RAID 的時候,不知道大家有沒有遇到過這種情況,關機重啟之后,之前組的 RAID 設備不見了,存儲的數據也丟失了。我就遇到過好幾次。原因是沒有配置軟 RAID 的開機加載初始化。

解決方案如下:

mdadm -Ds >> /etc/mdadm/mdadm.conf 

這樣在 /etc/mdadm/mdadm.conf 文件中就會出現類似如下的一行配置

ARRAY /dev/md0 metadata=1.2 name=lotus-miner:0 UUID=63dd2141:834e1dd0:b4173301:d483e824

其中 {name} 是你的主機 hostname UUID 就 RAID 設備的 UUID。

這里順便貼上搭建 RAID 的腳本:

mdadm -Cv /dev/md0 -a yes -n 2 -l 0 /dev/sda /dev/sdb 

其中參數 -n 是磁盤的數量,如果后面是分區的話,那就是分區的數量。 -l 參數代表你使用的 RAID 級別,0 代表 RAID0, 1 代表 RAID1,一次類推。

3. 關閉 Numa 功能

首先我們要搞清楚一件事情,為什么要關閉 NUMA?

Linux系統默認開啟NUMA,NUMA默認的內存分配策略是優先在進程所在CPU節點的本地內存中分配,會導致CPU節點之間內存分配不均衡。
比如當某個 CPU 節點的內存不足時,會導致 Swap 產生,而不是從遠程節點分配內存,即使另一個CPU節點上有足夠的物理內存。
這種內存分配策略的初衷是好的,為了內存更接近需要它的進程,但不適合大規模使用內存使用的應用場景,不利於充分利用系統的物理內存。

然而眾所周知,Filecoin 對內存的需求近乎貪婪。而且你會發現明還有幾十 GB 的物理內存,但是它偏偏卻加載了幾十 GB 的Swap。而一旦使用 Swap, 性能就立即下降內存的萬分之一甚至更低。

首先你需要檢查一下你的機器上是否已經開啟了 Numa 模式,可以使用 numastat 這個命令來查看,如果本機沒有這個命令的話,你需要先安裝 numactl

sudo apt-get install numactl

然后就可以使用 numastat 查看當前系統是否有啟用 Numa.

numastat 
                           node0
numa_hit               484417331
numa_miss                      0
numa_foreign                   0
interleave_hit             40687
local_node             484417331
other_node                     0

如果你的機器跟我的一樣只有一個 node 的話,說明你不需要關閉 Numa 了,因為此時 Numa 根本沒有起作用。一般來說家用機器,CPU 的核數不會太高,所以不需要用到 Numa 來優化。

我在 E5-2684 V4 的機器上運行了一下,結果如下:

root@miner1:~# numastat
                           node0           node1
numa_hit              2093513830      2859729719
numa_miss              949731552       128562031
numa_foreign           128562031       949731552
interleave_hit             51160           50655
local_node            2093549941      2859639315
other_node             949695441       128652435

  

從上面的結果來看,Numa 顯然是啟用的,CPU 和內存都被分配成 2 個 node。跨節點之間進行物理內存的訪問,性能會降低十倍。

禁用 Numa 有兩種方法,一種是通過 Bios 設置,不同的主板有不同的設置方法,這個我就不說了,大家根據自己的主板類型去網上找答案。

這里主要說下通過修改系統配置的方式禁用 Numa :

(1)CentOS 的 grub 配置文件修改,編輯 /etc/grub.conf,找到kernel行,該行類似如下(不同的版本內容略有差異,但開頭有“kernel /vmlinuz-”):

kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/vg_centos64001-lv_root rd_NO_LUKS rd_LVM_LV=vg_centos64001/lv_root rd_NO_MD rd_LVM_LV=vg_centos64001/lv_swap \
crashkernel=128M LANG=zh_CN.UTF-8  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet

在kernel行的末尾,空格再添加 numa=off,如果有多個 kernel 行,則每個 kernel 行都要添加。

(2)Ubuntu18.04 的 grub 文件修改,編輯 /boot/grub/grub.cfg,找到 Linux 引導行,該行類似如下(不同版本內容略有差異,但開頭有 linux /boot/vmlinuz-):

linux   /boot/vmlinuz-4.15.0-106-generic root=UUID=2c5f7d8a-ff33-4c78-b5a4-cd8dc75823f3 ro  maybe-ubiquity

在Linux引導行的末尾,空格再添加 numa=off,如果有多個 Linux 引導行,則每個 Linux 引導行都要添加。

(3)修改后保存,再重啟系統,再驗證是否成功關閉 NUMA。

numastat

如果輸出結果中只有 node0,則表示成功禁用了NUMA,如果有 node1 出現則失敗。

4. 開啟 CPU 到高性能模式

Ubuntu 系統中默認 CPU 都是工作在 powersave(省電)模式的,這樣性能沒有最大話,所以需要調整到 performance(高性能)模式。你可以通過設置 Bios 或者通過軟件臨時調節。

1、安裝cpufrequtils:

sudo apt-get install cpufrequtils

2、查看當前cpu的狀態:

cpufreq-info

3、把cpu調整到性能模式:

sudo cpufreq-set -g performance


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM