diff --git a/src/internal/usergroup/usergroup_others.go b/src/internal/daemon/daemon_others.go similarity index 66% rename from src/internal/usergroup/usergroup_others.go rename to src/internal/daemon/daemon_others.go index 57e7333..a2468a9 100644 --- a/src/internal/usergroup/usergroup_others.go +++ b/src/internal/daemon/daemon_others.go @@ -1,6 +1,6 @@ //go:build !linux -package usergroup +package daemon import ( "github.com/sunbk201/ua3f/internal/config" @@ -9,3 +9,7 @@ import ( func SetUserGroup(cfg *config.Config) error { return nil } + +func SetOOMScoreAdj(value int) error { + return nil +} diff --git a/src/internal/usergroup/usergroup_unix.go b/src/internal/daemon/daemon_unix.go similarity index 84% rename from src/internal/usergroup/usergroup_unix.go rename to src/internal/daemon/daemon_unix.go index c908daa..9097b45 100644 --- a/src/internal/usergroup/usergroup_unix.go +++ b/src/internal/daemon/daemon_unix.go @@ -1,6 +1,6 @@ //go:build linux -package usergroup +package daemon import ( "bufio" @@ -15,6 +15,21 @@ import ( "github.com/sunbk201/ua3f/internal/config" ) +func SetOOMScoreAdj(value int) error { + if value < -1000 || value > 1000 { + return fmt.Errorf("OOM score adj value %d out of range (-1000 to 1000)", value) + } + f, err := os.OpenFile("/proc/self/oom_score_adj", os.O_WRONLY, 0) + if err != nil { + return fmt.Errorf("failed to open /proc/self/oom_score_adj: %w", err) + } + defer f.Close() + if _, err := f.WriteString(strconv.Itoa(value)); err != nil { + return fmt.Errorf("failed to write to /proc/self/oom_score_adj: %w", err) + } + return nil +} + func SetUserGroup(cfg *config.Config) error { groupName := determineGroup(cfg.ServerMode) if groupName == "" { diff --git a/src/main.go b/src/main.go index 950765d..f676f37 100644 --- a/src/main.go +++ b/src/main.go @@ -8,11 +8,11 @@ import ( "syscall" "github.com/sunbk201/ua3f/internal/config" + "github.com/sunbk201/ua3f/internal/daemon" "github.com/sunbk201/ua3f/internal/log" "github.com/sunbk201/ua3f/internal/server" "github.com/sunbk201/ua3f/internal/server/desync" "github.com/sunbk201/ua3f/internal/server/netlink" - "github.com/sunbk201/ua3f/internal/usergroup" ) var ( @@ -32,10 +32,13 @@ func main() { log.LogHeader(appVersion, cfg) - if err := usergroup.SetUserGroup(cfg); err != nil { - slog.Error("usergroup.SetUserGroup", slog.Any("error", err)) + if err := daemon.SetUserGroup(cfg); err != nil { + slog.Error("daemon.SetUserGroup", slog.Any("error", err)) return } + if err := daemon.SetOOMScoreAdj(-800); err != nil { + slog.Warn("daemon.SetOOMScoreAdj", slog.Any("error", err)) + } helper := netlink.New(cfg) addShutdown("helper.Close", helper.Close)