Filecoin 运维(1) - 几个常用的系统配置
可可香奈儿《奢侈的》
奢侈并不意味着贵重与华丽,奢侈是摒弃粗俗。
本文介绍几个在 Filecoin 运维的过程中会用到的几个系统配置和小工具。
说明:本文所有操作都是在 Ubuntu18.04-LTS 系统下进行的,Centos 可能需要有些调整,请自行摸索。
另外,本文所涉及到工具以及调优配置都亲测可用。
# 1. 永久修改 ulimit
二阶段测试的 lotus daemon
在同步的时候,经常会出现 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
# 5. 两个资源查看小工具
(1)虽然 linux 系统自带的 top
工具已经比较强大了,但是感觉视觉体验上还是不够好,而且不能看到每个核的使用情况。 htop
刚好可以弥补 top 工具的不足。
Ubuntu 10.04 是默认安装了 htop
工具了的。如果没有的话,使用 apt-get install htop
安装。效果如下:
(2)nvtop 是一个 GPU 资源查看工具,nvidia-msi
跟 top
一样简陋; 相比之下,nvtop 比 nvidia-msi 好看多了。
Ubuntu-20.04 安装:
sudo apt install nvtop
18.04 没有直接的软件源可以使用,需收手动编译:
sudo apt install cmake libncurses5-dev libncursesw5-dev git
git clone https://github.com/Syllo/nvtop.git
mkdir -p nvtop/build && cd nvtop/build
cmake ..
# 如果上面命令报错 "Could NOT find NVML (missing: NVML_INCLUDE_DIRS)" 就执行下面这个
cmake .. -DNVML_RETRIEVE_HEADER_ONLINE=True
make && sudo make install
nvtop
效果如下:
# 参考链接
本站博文如非注明转载则均属作者原创文章,引用或转载无需申请版权或者注明出处,如需联系作者请加微信: geekmaster01