Skip to content

investigate: 長時間稼働後にバックエンドへ繋がらなくなる事象を切り分けるためのログ仕込み #49

@KimMaru10

Description

@KimMaru10

事象

アプリを長時間起動したままにしておくと、いつの間にかバックエンドへ繋がらなくなり、更新ボタンを押してもローディングが終わらない。再起動すれば直る。

原因仮説

`src/main/backend.ts` を読むと、現状は死亡を検知する仕組みが弱い:

  • `exit` ハンドラが `code !== 0 && code !== null` のときだけ通知 → シグナル終了 (kill -9 / OOM kill 等) は無音
  • 子プロセスの stdout/stderr を pipe で受けているがどこにも書き出していない → クラッシュログが取れない
  • 起動後の health 監視がない → 死んでもアプリは気付けない

候補原因:

  1. macOS App Nap / システムスリープ復帰後の TCP 切断
  2. SQLite WAL ロック (dbwriter goroutine のハング)
  3. Backlog API への外部リクエストがタイムアウト未設定で詰まる
  4. メモリ / goroutine リークによる OOM kill

やること (このチケットのスコープ)

原因を能動的に直すのではなく、まず観測手段を入れる:

  1. バックエンドの stdout/stderr を `~/Library/Logs/Backnote/backend.log` (Windows/Linux 相当含む `app.getPath('logs')`) へファイル出力
  2. `exit` ハンドラで code/signal の両方をログ + 通知。シグナル終了も拾う
  3. Electron 側に 30 秒間隔の health watcher を追加。連続 N 回失敗をログとトレイ通知に記録
  4. 開発モードでもログを残し、再現検証しやすくする

修正後は開発機で長時間放置し、再現を待ってログから仮説を絞る。この issue では根本修正は行わない (別 issue に分離)。

関連

  • src/main/backend.ts
  • src/main/index.ts
  • src/main/tray.ts (通知連携)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions