mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-01 01:42:25 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			64 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| # automemlimit
 | |
| 
 | |
| [](https://pkg.go.dev/github.com/KimMachineGun/automemlimit)
 | |
| [](https://goreportcard.com/report/github.com/KimMachineGun/automemlimit)
 | |
| [](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.
 | |
| // You can find more details of its behavior from the doc comment of memlimit.SetGoMemLimitWithEnv.
 | |
| 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.SetGoMemLimitWithOpts(
 | |
| 		memlimit.WithRatio(0.9),
 | |
| 		memlimit.WithProvider(
 | |
| 			memlimit.ApplyFallback(
 | |
| 				memlimit.FromCgroup,
 | |
| 				memlimit.FromSystem,
 | |
| 			),
 | |
| 		),
 | |
| 	)
 | |
| 	memlimit.SetGoMemLimitWithEnv()
 | |
| 	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)
 | |
| }
 | |
| ```
 |