何が起きたか
ミニPC(メモリ16GB、実際に使えるのは約12.7GB)で、ビットコインの自動売買ボット(Python)を24時間動かしていました。ある朝、PCが重くてマウスもまともに動かない状態に。
タスクマネージャーで調べると、犯人は ボットを表示していた Windows Terminal でした。
| プロセス | メモリ(コミット) |
|---|---|
| WindowsTerminal | 約7.5GB |
| Claude(アプリ+セッション) | 約5.3GB |
| Chrome | 約2.7GB |
ボットは数秒ごとに価格をコンソールに print していて、それを4日間表示し続けた結果、ターミナル側のメモリがふくらんでいました。
対策:出力を画面ではなくファイルに書き出す
起動用のバッチファイルを、出力をログファイルにリダイレクトする形に変えました。
@echo off
chcp 65001 >nul
cd /d "%~dp0"
set "LOGDIR=%LOCALAPPDATA%\bot_logs"
if not exist "%LOGDIR%" mkdir "%LOGDIR%"
set PYTHONIOENCODING=utf-8
set PYTHONUNBUFFERED=1
for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set TS=%%i
set "LOGFILE=%LOGDIR%\console_%TS%.log"
echo Logging to "%LOGFILE%"
python your_bot.py >> "%LOGFILE%" 2>&1
pause
ポイントは3つです。
-
PYTHONUNBUFFERED=1:リダイレクト時もログが溜め込まれず、すぐファイルに書かれる -
PYTHONIOENCODING=utf-8:日本語の出力が文字化けしない - ログの置き場所を OneDriveなどの同期フォルダの外 にする(数秒ごとに書き換わるファイルを同期させるとCPUやディスクの負荷になる)
ログを見たいときは PowerShell で追いかけられます。
Get-Content -Wait -Tail 30 "$env:LOCALAPPDATA\bot_logs\console_YYYYMMDD_HHMMSS.log"
結果
ターミナルを閉じてこの形で起動し直したところ、コミット済みメモリが 28.5GB → 20.3GB(約8GB減) になり、PCの重さも解消しました。
まとめ
- 長時間動かすスクリプトの出力を、ターミナルに出しっぱなしにしない
- 出力はファイルへ。同期フォルダの外に置く
- メモリが直付けで増設できないミニPCでは特に効く
24時間動かしているミニPCの実機レビューや、自宅での自動化の構成はブログにまとめています。
https://www.pizzaroad888star.com/gmktec-m8-review/
なお、Instagramのリール動画をPythonで自動で作るスクリプトは、作り方つきでnoteにまとめています。
https://note.com/minipc_lab/n/nba895292a3ad