Astarピアーズプログラムシーズン3に応募する(6)

4 minute read

Published:

logo-primary-color-black

Astarアーカイブノードは16GBでもメモリが足りない件( ´ー`)y―┛~~

image

Out of MemoryでAstarノードプロセスが殺されている。。。

stardust✨stardust:~ $ free -h
               total        used        free      shared  buff/cache   available
Mem:            15Gi        12Gi       387Mi        15Mi       3.6Gi       3.6Gi
Swap:          2.0Gi       2.0Gi          0B
stardust✨stardust:~ $ dmesg -T | egrep -i 'oom|killed process|out of memory'
[月  1月 26 01:49:41 2026] systemd invoked oom-killer: gfp_mask=0x140cca(GFP_HIGHUSER_MOVABLE|__GFP_COMP), order=0, oom_score_adj=0
[月  1月 26 01:49:41 2026]  oom_kill_process+0x29c/0x320
[月  1月 26 01:49:41 2026] [  pid  ]   uid  tgid total_vm      rss rss_anon rss_file rss_shmem pgtables_bytes swapents oom_score_adj name
[月  1月 26 01:49:41 2026] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0-7,global_oom,task_memcg=/,task=astar-collator,pid=1888,uid=1001
[月  1月 26 01:49:41 2026] Out of memory: Killed process 1888 (astar-collator) total-vm:1254255840kB, anon-rss:15096608kB, file-rss:0kB, shmem-rss:0kB, UID:1001 pgtables:16960kB oom_score_adj:0

Cgroupのメモリ管理を有効化する

systemdでメモリ管理を行うために、cgroupによるメモリ管理をラズパイ5で有効化しているが、特に今回はこの機能は使用しなかったけど、後々のことを考えて有効化する。( ´ー`)y―┛~~

初期状態でラズパイ5のcgroupによるメモリ管理が無効化されていることを確認する

stardust✨stardust:~ $ cat /sys/fs/cgroup/cgroup.controllers
cpuset cpu io pids

boot時のコマンドラインを書き換える

/boot/firmware/cmdline.txtにcgroup_enable=memory swapaccount=1オプションを追加する

stardust✨stardust:~ $ cat /boot/firmware/cmdline.txt
console=serial0,115200 console=tty1 root=PARTUUID=ca9636a7-465b-434c-a65d-f1ae7c347e60 rootfstype=ext4 fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles cfg80211.ieee80211_regdom=JP cgroup_enable=memory swapaccount=1
stardust✨stardust:~ $ sudo reboot

cgroupによるメモリ管理が有効化されていることを確認する

stardust✨stardust:~ $ cat /sys/fs/cgroup/cgroup.controllers
cpuset cpu io memory pids

ラズパイ5のswap設計

/etc/rpi/swap.confを設定して、swap関連の設定をするのが基本みたい。zramを8GBとswapfileを8GB確保していくよヽ(´ー`)ノ

stardust✨stardust:~ $ cat /etc/rpi/swap.conf
[Main]
Mechanism=zram+file

[File]
Path=/var/swapfile
MaxSizeMiB=8192

[Zram]
MaxSizeMiB=8192

# zramが埋まってきたらfileへ書き戻す(有効化)
WritebackTrigger=auto
WritebackInitialDelay=30min
WritebackPeriodicInterval=6h

現状のswapを止める

stardust✨stardust:~ $ sudo swapoff /dev/zram0
stardust✨stardust:~ $ sudo systemctl stop dev-zram0.swap
stardust✨stardust:~ $ sudo systemctl stop systemd-zram-setup@zram0.service

zram0をリセット

stardust✨stardust:~ $ echo 1 | sudo tee /sys/block/zram0/reset
1

swap設定を反映して起動

stardust✨stardust:~ $ sudo systemctl daemon-reload
stardust✨stardust:~ $ sudo systemctl start systemd-zram-setup@zram0.service
stardust✨stardust:~ $ sudo systemctl start dev-zram0.swap

Swapがzramを使用して、2GBから8GBに増えたことを確認

stardust✨stardust:~ $ swapon --show
NAME       TYPE      SIZE   USED PRIO
/dev/zram0 partition   8G 205.6M  100

swapfileが作成されていることを確認する

stardust✨stardust:~ $ ls -lh /var/swapfile
-rw------- 1 root root 8.0G  1月 26 23:48 /var/swapfile

swapfileをswap領域として適用する

root@stardust:/etc/rpi# sudo swapon -p 10 /var/swapfile
root@stardust:/etc/rpi# swapon --show
NAME          TYPE      SIZE USED PRIO
/dev/zram0    partition   8G   0B  100
/var/swapfile file        8G   0B   10

image

かなり、Astarアーカイブノードとしては安定してきたように感じるぞ。 というか、かなり汎用性のあるラズパイ5の構成ではないだろうか。( ´ー`)y―┛~~

swapfileの読み込みをunitファイル化する

root@stardust:~# cat > /etc/systemd/system/enable-swapfile.service
[Unit]
Description=Enable /var/swapfile with priority 10 (keep zram enabled)
After=dev-zram0.swap
Wants=dev-zram0.swap
ConditionPathExists=/var/swapfile

[Service]
Type=oneshot
ExecStart=/sbin/swapon -p 10 /var/swapfile
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
^C
root@stardust:~# sudo systemctl daemon-reload
root@stardust:~# sudo systemctl enable --now enable-swapfile.service
Created symlink '/etc/systemd/system/multi-user.target.wants/enable-swapfile.service' → '/etc/systemd/system/enable-swapfile.service'.
root@stardust:~# swapon --show
NAME          TYPE      SIZE USED PRIO
/dev/zram0    partition   8G   0B  100
/var/swapfile file        8G   0B   10

Astar Archive Nodeのユニットファイルをシンプル化

stardust✨stardust:~ $ cat /etc/systemd/system/astar.service
[Unit]
Description=Astar Archive node

[Service]
User=astar
Group=astar

ExecStart=/usr/local/bin/astar-collator \
  --pruning archive \
  --chain astar \
  --base-path /var/lib/Astar \
  --name AstarNode \
  --telemetry-url 'wss://telemetry.polkadot.io/submit/ 0' \
  --rpc-cors all

Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Astarコレータバイナリを安定版に置き換える

stardust✨stardust:~/Astar $ git fetch --all --tags
stardust✨stardust:~/Astar $ git tag --list | tail -n 20
v5.37.0
v5.38.0
v5.39.0
v5.39.1
v5.4.0
v5.40.0
v5.41.0
v5.42.0
v5.42.1
v5.42.2
v5.42.3
v5.43.0
v5.43.1
v5.44.0
v5.45.0
v5.46.0
v5.47.0
v5.48.0
v5.48.1
v5.9.0
stardust✨stardust:~/Astar $ git checkout v5.48.0
Previous HEAD position was d5a307237 Update Docker tags in release-client workflow (#1579)
HEAD is now at 00338639b fix: missing migrations (#1575)
stardust✨stardust:~/Astar $ cargo build --profile production
stardust✨stardust:~/Astar $ /home/stardust/Astar/target/production/astar-collator \
  --pruning archive \
  --chain astar \
  --base-path /var/lib/Astar \
  --name AstarNode \
  --port 30333 \
  --rpc-port 9944 \
  --telemetry-url 'wss://telemetry.polkadot.io/submit/ 0' \
  --rpc-cors all
2026-01-27 22:20:45 Astar Collator
2026-01-27 22:20:45 ✌️  version 5.48.0-00338639b9e
Error: Service(Client(Backend("Io error: Permission denied (os error 13)")))
2026-01-27 22:20:45 Failed to run the random write disk benchmark: failed to create a test file: Permission denied (os error 13)
stardust✨stardust:~/Astar $ git checkout v5.48.1
Previous HEAD position was 00338639b fix: missing migrations (#1575)
HEAD is now at d5a307237 Update Docker tags in release-client workflow (#1579)
stardust✨stardust:~/Astar $ cargo build --profile production
stardust✨stardust:~/Astar $ /home/stardust/Astar/target/production/astar-collator \
  --pruning archive \
  --chain astar \
  --base-path /var/lib/Astar \
  --name AstarNode \
  --port 30333 \
  --rpc-port 9944 \
  --telemetry-url 'wss://telemetry.polkadot.io/submit/ 0' \
  --rpc-cors all
2026-01-27 22:44:17 Astar Collator
2026-01-27 22:44:17 ✌️  version 5.48.0-d5a307237b3
  • 本番用のノードバイナリを配置する
stardust✨stardust:~ $ sudo cp /home/stardust/Astar/target/production/astar-collator /usr/local/bin/
stardust✨stardust:~ $ sudo chown astar:astar /usr/local/bin/astar-collator

同期状況

同期データをすべて削除

stardust✨stardust:~ $ date
2026-01-27(火) 18:00
stardust✨stardust:/var/lib/Astar $ sudo rm -fr *

リレーチェインの同期状態を確認

stardust✨stardust:~ $ journalctl -u astar -n 2 --no-pager | egrep "Relaychain"
 1月 27 02:06:47 stardust astar-collator[1861]: 2026-01-27 02:06:47 [Relaychain] ⚙️  Syncing  8.0 bps, target=#29683475 (8 peers), best: #18859008 (0x225b…5ab9), finalized #18858496 (0xcb6f…5f9c), ⬇ 598.1kiB/s ⬆ 6.5kiB/s

ブログ更新コマンド

┌──(stardust✨stardust)-[~/stardustdotbox.github.io]
└─$ git add -A && git commit -m 'Astarピアーズプログラムシーズン3に応募する(6)' && git push

参考文献

  • https://www.stardust.box/posts/2026/01/Astar-Peers-Program-Season3-1/
  • https://www.stardust.box/posts/2026/01/Astar-Peers-Program-Season3-2/
  • https://www.stardust.box/posts/2026/01/Astar-Peers-Program-Season3-3/
  • https://www.stardust.box/posts/2026/01/Astar-Peers-Program-Season3-4/
  • https://www.stardust.box/posts/2026/01/Astar-Peers-Program-Season3-5/
  • https://telemetry.polkadot.io/
  • https://forums.raspberrypi.com/viewtopic.php?t=390708
  • https://medium.com/@sequaja.marco/astar-peers-program-troubleshooting-guide-and-faq-a6958a76d021
  • https://docs.astar.network/docs/build/nodes/rpi-cheat-sheet