fix: SQLite connection leak causing unbounded memory growth
SaveStats returned tx.Create().Error directly without assigning to the local err variable, so the deferred closure always saw err==nil and called Commit() on a failed transaction. This left the underlying go-sqlite3 connection unreturned to the pool. With StatsJob firing every 10s, leaked connections accumulated ~150 KB each, reaching 400+ MB after ~33 hours. Fixes: - stats.go: assign Create result to err so defer can Rollback on failure - backup.go: defer-close backupDb to prevent pool leak on early return - migration/main.go: defer-close migration db - db.go: add ConnMaxIdleTime(5m), lower MaxIdleConns to 2, set _cache_size=-200 to reduce per-connection memory from ~2 MB to ~200 KB Measured: RSS dropped from 419 MB to 66 MB, db file descriptors from 4484 to 6, with zero growth over 3-minute observation window.
This commit is contained in:
@@ -25,6 +25,11 @@ func MigrateDb() {
|
||||
log.Fatal(err)
|
||||
return
|
||||
}
|
||||
defer func() {
|
||||
if sqlDB, e := db.DB(); e == nil {
|
||||
_ = sqlDB.Close()
|
||||
}
|
||||
}()
|
||||
tx := db.Begin()
|
||||
defer func() {
|
||||
if err == nil {
|
||||
|
||||
Reference in New Issue
Block a user