Skip to content

1. Solana系统调优

基于centos系列

1.1 磁盘分区

由于后期区块太多,磁盘占用太大,磁盘建议设置成GPT分区

bash
#  fdisk -l
root@solana:~#  parted /dev/vdb # 开始分区
	mklabel gpt # 将默认的MBR分区格式转为GPT分区格式
	mkpart primary 1 100% # 划分一个主分区,并设置分区的开始位置和结束位置
	align-check optimal 1 # 检查分区是否对齐
	# 1 aligned # 运行结果如此行所示
	print # 查看分区表
	quit # 退出Parted工具
#  partprobe
#  mkfs -t ext4 /dev/vdb1
#  mkdir /data
#  mount /dev/vdb1 /data/
#  df -h
#  cp /etc/fstab /etc/fstab.bak
#  echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\"//g'` /data ext4 defaults 0 0 >> /etc/fstab
#  fdisk -l
root@solana:~#  parted /dev/vdb # 开始分区
	mklabel gpt # 将默认的MBR分区格式转为GPT分区格式
	mkpart primary 1 100% # 划分一个主分区,并设置分区的开始位置和结束位置
	align-check optimal 1 # 检查分区是否对齐
	# 1 aligned # 运行结果如此行所示
	print # 查看分区表
	quit # 退出Parted工具
#  partprobe
#  mkfs -t ext4 /dev/vdb1
#  mkdir /data
#  mount /dev/vdb1 /data/
#  df -h
#  cp /etc/fstab /etc/fstab.bak
#  echo `blkid /dev/vdb1 | awk '{print $2}' | sed 's/\"//g'` /data ext4 defaults 0 0 >> /etc/fstab

1.2 增加 UDP 缓冲区

bash
cat >/etc/sysctl.d/20-solana-udp-buffers.conf <<EOF
# Increase UDP buffer size
net.core.rmem_default = 134217728
net.core.rmem_max = 134217728
net.core.wmem_default = 134217728
net.core.wmem_max = 134217728
# Increase memory mapped files limit
vm.max_map_count = 1000000

# Increase number of allowed open file descriptors
fs.nr_open = 1000000
EOF
cat >/etc/sysctl.d/20-solana-udp-buffers.conf <<EOF
# Increase UDP buffer size
net.core.rmem_default = 134217728
net.core.rmem_max = 134217728
net.core.wmem_default = 134217728
net.core.wmem_max = 134217728
# Increase memory mapped files limit
vm.max_map_count = 1000000

# Increase number of allowed open file descriptors
fs.nr_open = 1000000
EOF
  • 生效
bash
sysctl -p /etc/sysctl.d/20-solana-udp-buffers.conf
sysctl -p /etc/sysctl.d/20-solana-udp-buffers.conf

1.3 增加内存映射文件限制

bash
cat >/etc/sysctl.d/20-solana-mmaps.conf <<EOF
# Increase memory mapped files limit
vm.max_map_count = 1000000
EOF
cat >/etc/sysctl.d/20-solana-mmaps.conf <<EOF
# Increase memory mapped files limit
vm.max_map_count = 1000000
EOF
  • 生效
bash
sysctl -p /etc/sysctl.d/20-solana-mmaps.conf
sysctl -p /etc/sysctl.d/20-solana-mmaps.conf

1.4 systemd

在 /etc/systemd/system.conf 文件的 [Manager] 部分添加如下内容:

bash
DefaultLimitNOFILE=1000000
DefaultLimitNOFILE=1000000
  • 重新加载配置
bash
systemctl daemon-reload
systemctl daemon-reload

1.5 limit

1.增加流程文件描述器的计数上限

bash
cat >/etc/security/limits.d/90-solana-nofiles.conf <<EOF
# Increase process file descriptor count limit
* - nofile 1000000
EOF
cat >/etc/security/limits.d/90-solana-nofiles.conf <<EOF
# Increase process file descriptor count limit
* - nofile 1000000
EOF

2.修改最大文件数

bash
# vim /etc/security/limits.conf

* soft nofile 700000
* hard nofile 700000
* soft nproc 700000
* hard nproc 700000
# vim /etc/security/limits.conf

* soft nofile 700000
* hard nofile 700000
* soft nproc 700000
* hard nproc 700000

1.6 配置系统日志

bash
# vim /etc/rsyslog.d/50-default.conf
# 把下面这几行的注释去掉
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
# vim /etc/rsyslog.d/50-default.conf
# 把下面这几行的注释去掉
*.=info;*.=notice;*.=warn;\
auth,authpriv.none;\
cron,daemon.none;\
mail,news.none -/var/log/messages
  • 重启服务
bash
systemctl restart rsyslog.service
systemctl restart rsyslog.service

❌ 注意

最后重启系统防止不生效

1.7 时间服务

较大的系统时钟漂移会阻止节点正确参与 Solana 的 gossip 协议

bash
#保证是utc时间
timedatectl
#保证是utc时间
timedatectl