mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2024-11-25 21:26:40 +00:00
66 lines
2.3 KiB
Markdown
66 lines
2.3 KiB
Markdown
# automemlimit
|
|
|
|
[![Go Reference](https://pkg.go.dev/badge/github.com/KimMachineGun/automemlimit.svg)](https://pkg.go.dev/github.com/KimMachineGun/automemlimit)
|
|
[![Go Report Card](https://goreportcard.com/badge/github.com/KimMachineGun/automemlimit)](https://goreportcard.com/report/github.com/KimMachineGun/automemlimit)
|
|
[![Test](https://github.com/KimMachineGun/automemlimit/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/KimMachineGun/automemlimit/actions/workflows/test.yml)
|
|
|
|
Automatically set `GOMEMLIMIT` to match Linux [cgroups(7)](https://man7.org/linux/man-pages/man7/cgroups.7.html) memory limit.
|
|
|
|
See more details about `GOMEMLIMIT` [here](https://tip.golang.org/doc/gc-guide#Memory_limit).
|
|
|
|
## Notice
|
|
|
|
Version `v0.5.0` introduces a fallback to system memory limits as an experimental feature when cgroup limits are unavailable. Activate this by setting `AUTOMEMLIMIT_EXPERIMENT=system`.
|
|
You can also use system memory limits via `memlimit.FromSystem` provider directly.
|
|
|
|
This feature is under evaluation and might become a default or be removed based on user feedback.
|
|
If you have any feedback about this feature, please open an issue.
|
|
|
|
## Installation
|
|
|
|
```shell
|
|
go get github.com/KimMachineGun/automemlimit@latest
|
|
```
|
|
|
|
## Usage
|
|
|
|
```go
|
|
package main
|
|
|
|
// By default, it sets `GOMEMLIMIT` to 90% of cgroup's memory limit.
|
|
// This is equivalent to `memlimit.SetGoMemLimitWithOpts(memlimit.WithLogger(slog.Default()))`
|
|
// To disable logging, use `memlimit.SetGoMemLimitWithOpts` directly.
|
|
import _ "github.com/KimMachineGun/automemlimit"
|
|
```
|
|
|
|
or
|
|
|
|
```go
|
|
package main
|
|
|
|
import "github.com/KimMachineGun/automemlimit/memlimit"
|
|
|
|
func init() {
|
|
memlimit.SetGoMemLimitWithOpts(
|
|
memlimit.WithRatio(0.9),
|
|
memlimit.WithProvider(memlimit.FromCgroup),
|
|
memlimit.WithLogger(slog.Default()),
|
|
)
|
|
memlimit.SetGoMemLimitWithOpts(
|
|
memlimit.WithRatio(0.9),
|
|
memlimit.WithProvider(
|
|
memlimit.ApplyFallback(
|
|
memlimit.FromCgroup,
|
|
memlimit.FromSystem,
|
|
),
|
|
),
|
|
)
|
|
memlimit.SetGoMemLimit(0.9)
|
|
memlimit.SetGoMemLimitWithProvider(memlimit.Limit(1024*1024), 0.9)
|
|
memlimit.SetGoMemLimitWithProvider(memlimit.FromCgroup, 0.9)
|
|
memlimit.SetGoMemLimitWithProvider(memlimit.FromCgroupV1, 0.9)
|
|
memlimit.SetGoMemLimitWithProvider(memlimit.FromCgroupHybrid, 0.9)
|
|
memlimit.SetGoMemLimitWithProvider(memlimit.FromCgroupV2, 0.9)
|
|
}
|
|
```
|