{"record":{"id":"11c57c1f1dcb6e95","repo":"ory/hydra","slug":"could-not-set-gomaxprocs-w","errorCode":null,"errorMessage":"could not set GOMAXPROCS: %w","messagePattern":"could not set GOMAXPROCS: %w","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"driver/registry_sql.go","lineNumber":196,"sourceCode":"// of RegistrySQL.initialPing.\nfunc defaultInitialPing(ctx context.Context, l *logrusx.Logger, p *sql.BasePersister) error {\n\treturn errors.WithStack(resilience.Retry(l, 5*time.Second, 5*time.Minute, func() error {\n\t\treturn p.Ping(ctx)\n\t}))\n}\n\nfunc (m *RegistrySQL) Init(\n\tctx context.Context,\n\tskipNetworkInit bool,\n\tmigrate bool,\n\textraMigrations []fs.FS,\n\tgoMigrations []popx.Migration,\n) error {\n\tif m.basePersister == nil {\n\t\tif m.Config().CGroupsV1AutoMaxProcsEnabled() {\n\t\t\t_, err := maxprocs.Set(maxprocs.Logger(m.Logger().Infof))\n\t\t\tif err != nil {\n\t\t\t\treturn fmt.Errorf(\"could not set GOMAXPROCS: %w\", err)\n\t\t\t}\n\t\t}\n\n\t\t// new db connection\n\t\tpool, idlePool, connMaxLifetime, connMaxIdleTime, cleanedDSN := sqlcon.ParseConnectionOptions(\n\t\t\tm.l, m.Config().DSN(),\n\t\t)\n\n\t\topts := &pop.ConnectionDetails{\n\t\t\tURL:             sqlcon.FinalizeDSN(m.l, cleanedDSN),\n\t\t\tIdlePool:        idlePool,\n\t\t\tConnMaxLifetime: connMaxLifetime,\n\t\t\tConnMaxIdleTime: connMaxIdleTime,\n\t\t\tPool:            pool,\n\t\t\tTracerProvider:  m.Tracer(ctx).Provider(),\n\t\t\tUnsafe:          m.Config().DbIgnoreUnknownTableColumns(),\n\t\t}\n","sourceCodeStart":178,"sourceCodeEnd":214,"githubUrl":"https://github.com/ory/hydra/blob/4174065ffb052799890f7480f5360a877a67ffc1/driver/registry_sql.go#L178-L214","documentation":"driver/registry_sql.go Init wraps a maxprocs.Set failure with \"could not set GOMAXPROCS: %w\". When cgroups-based auto GOMAXPROCS is enabled (CGroupsV1AutoMaxProcsEnabled), the driver uses uber-go/automaxprocs to align GOMAXPROCS with the container CPU quota; failure here aborts initialization.","triggerScenarios":"Starting Hydra with cgroups auto-max-procs enabled in an environment where /sys/fs/cgroup (cgroup v1) files are unreadable or the mount is missing.","commonSituations":"Running in Docker/Kubernetes with cgroup v2 while the feature assumes v1, restricted container runtimes (gVisor, some CI sandboxes) hiding /proc/self/cgroup, or read-only /sys mounts.","solutions":["Disable the auto max procs setting (e.g. set the cgroups v1 auto max procs config flag to false) and set GOMAXPROCS explicitly via env","Mount cgroup v1 or check the underlying wrapped error for the exact read failure","Upgrade to a version that supports cgroup v2 detection","Run with privileged/sysfs access if in a restricted sandbox"],"exampleFix":"# before\n# dsn: ...  (cgroups auto max procs enabled)\n# after\nGOMAXPROCS=2 hydra serve all  # or disable cgroups_v1_auto_max_procs in config","handlingStrategy":"fallback","validationCode":"if _, err := os.Stat(\"/sys/fs/cgroup\"); err != nil {\n    log.Println(\"cgroup fs unavailable: disable auto max procs\")\n}","typeGuard":null,"tryCatchPattern":"if err != nil {\n    log.Warnf(\"maxprocs: %v - continuing with default GOMAXPROCS\", err)\n}","preventionTips":["Prefer explicit GOMAXPROCS env in containers","Verify cgroup mounts in CI sandboxes","Keep automaxprocs version current"],"tags":["golang","cgroups","startup","configuration"],"backgroundTag":"gomaxprocs-setup-failed","analyzedSha":"4174065ffb052799890f7480f5360a877a67ffc1","analyzedAt":"2026-09-03T14:52:41.581Z","contentChangedAt":"2026-09-03T14:52:41.581Z","schemaVersion":2},"datasetVersion":"2026-09-10T17:17:09.494Z"}