Astarピアーズプログラムシーズン3に応募する(6)
Published:
Astarアーカイブノードは16GBでもメモリが足りない件( ´ー`)y―┛~~
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
かなり、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
