自宅のRoonは、渋谷のツタヤに10年かけて通ったおかげでDBが22GBで31万曲になってしまった。壊れたリッピング用ドライブは2台くらい。しかし、Intel NUC 10th Core i7 32GB でも、使っているとジャケットが表示されなくなったり、再生が途中で止まることはあり、不安定。メモリの消費も18GBくらい。まぁ、RAM 32GBあるが、ものすごく多い。
調べてみたら
environmentに
DOTNET_GCRetainVM=1
DOTNET_gcServer=0
を設定してみたらと提案があった。
Chat GPTに相談していろいろやってみたところ、以下が正解らしい。systemdのoverrideで環境変数を追加する。メモリ消費の制限もつけられるが、とりあえず以下を摂津亭
cat << ‘EOF’ | sudo tee /etc/systemd/system/roonserver.service.d/override.conf
[Service]
Environment=”DOTNET_GCRetainVM=0″
Environment=”COMPlus_GCRetainVM=0″
Restart=always
RestartSec=20
EOF
sudo systemctl daemon-reload
sudo systemctl restart roonserver
sudo systemctl show roonserver -p Environment
さらにもっと調べてみると、毎日サービスを再起動したほうがいいという話を聞くので、定期的なサービスの再起動を設定する。
今時は、Cronで再起動をせずに、Systemd Timerで再起動をするのが確実。
再起動は、UTC 19:30/ 日本時間4:30になるようにしている。Roon DBのバックアップ時間とバッティングしないように注意すること。
cat << ‘EOF’ | sudo tee /etc/systemd/system/roonserver-restart.service
[Unit]
Description=Restart RoonServer
[Service]
Type=oneshot
ExecStart=/bin/systemctl restart roonserver
EOF
cat << ‘EOF’ | sudo tee /etc/systemd/system/roonserver-restart.timer
[Unit]
Description=Daily restart of RoonServer
[Timer]
OnCalendar=*-*-* 19:30:00 UTC
Persistent=true
AccuracySec=1min
[Install]
WantedBy=timers.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable –now roonserver-restart.timer
1日放置しても、もう増えなくなった。7GBを超えない。
root@roonserver1:~# free -h
total used free shared buff/cache available
Mem: 31Gi 6.4Gi 8.6Gi 109Mi 16Gi 24Gi
Swap: 19Gi 4.0Ki 19G
データをNASのNFSにいれているが、ファイルを追加してもリアルタイムでスキャンをしてくれないので、かえって毎日サービス再起動はありかもしれない。
めちゃくちゃ快適になった。
なぜ気がついたかというと、RoonをやっているサーバにNginx Proxy Managerを入れようとしたら、メモリないし、CPU負荷も高め。確かにWindowsでRoonサーバを動かしていた時もそんな感じだった。音楽を再生していないときもそうだったので、調べた次第。ちなみに、Roonを使っていないときは、クライアントアプリを落としておいたほうがいいかも。再起動時にクライアントが立ち上がっていると、再起動のタイミングで猛烈にサーバにリクエストが飛んでいる様子。
それにしても、今時定期的に再起動しろなんて。昔やっていた大型システムのコントローラーソフトウェアで、朝出勤したら、JavaのGCをするために再起動なんていう業務をしていたことがあるが、それは20年以上前。