[server] Add support for limiting memory usage.

This commit is contained in:
Ciprian Dorin Craciun 2021-12-16 13:56:27 +02:00
parent 51b0d777ed
commit 66e4d0aef5
2 changed files with 34 additions and 8 deletions

View file

@ -476,11 +476,13 @@ func main_0 () (error) {
var _quiet bool var _quiet bool
var _dummy bool var _dummy bool
var _delay time.Duration var _delay time.Duration
var _profileCpu string
var _profileMem string
var _limitMemory uint
var _isFirst bool var _isFirst bool
var _isMaster bool var _isMaster bool
var _profileCpu string
var _profileMem string
{ {
_flags := flag.NewFlagSet ("kawipiko-server", flag.ContinueOnError) _flags := flag.NewFlagSet ("kawipiko-server", flag.ContinueOnError)
@ -509,12 +511,13 @@ func main_0 () (error) {
_processes_0 := _flags.Uint ("processes", 0, "") _processes_0 := _flags.Uint ("processes", 0, "")
_threads_0 := _flags.Uint ("threads", 0, "") _threads_0 := _flags.Uint ("threads", 0, "")
_slave_0 := _flags.Uint ("slave", 0, "") _slave_0 := _flags.Uint ("slave", 0, "")
_profileCpu_0 := _flags.String ("profile-cpu", "", "")
_profileMem_0 := _flags.String ("profile-mem", "", "")
_debug_0 := _flags.Bool ("debug", false, "") _debug_0 := _flags.Bool ("debug", false, "")
_quiet_0 := _flags.Bool ("quiet", false, "") _quiet_0 := _flags.Bool ("quiet", false, "")
_dummy_0 := _flags.Bool ("dummy", false, "") _dummy_0 := _flags.Bool ("dummy", false, "")
_delay_0 := _flags.Duration ("delay", 0, "") _delay_0 := _flags.Duration ("delay", 0, "")
_profileCpu_0 := _flags.String ("profile-cpu", "", "")
_profileMem_0 := _flags.String ("profile-mem", "", "")
_limitMemory_0 := _flags.Uint ("limit-memory", 0, "")
FlagsParse (_flags, 0, 0) FlagsParse (_flags, 0, 0)
@ -539,9 +542,9 @@ func main_0 () (error) {
_quiet = *_quiet_0 && !_debug _quiet = *_quiet_0 && !_debug
_dummy = *_dummy_0 _dummy = *_dummy_0
_delay = *_delay_0 _delay = *_delay_0
_profileCpu = *_profileCpu_0 _profileCpu = *_profileCpu_0
_profileMem = *_profileMem_0 _profileMem = *_profileMem_0
_limitMemory = *_limitMemory_0
if _slave == 0 { if _slave == 0 {
_isMaster = true _isMaster = true
@ -620,6 +623,10 @@ func main_0 () (error) {
if (_processes * _threads) > 1024 { if (_processes * _threads) > 1024 {
AbortError (nil, "[b0177488] maximum number of allowed threads in total is 1024!") AbortError (nil, "[b0177488] maximum number of allowed threads in total is 1024!")
} }
if (_limitMemory > (16 * 1024)) || (_limitMemory < 128) {
AbortError (nil, "[2781f54c] maximum memory limit is between 128 and 16384 MiB!")
}
} }
@ -632,9 +639,26 @@ func main_0 () (error) {
_httpServerReduceMemory := false _httpServerReduceMemory := false
if false { if _limitMemory > 0 {
if _error := syscall.Setrlimit (syscall.RLIMIT_DATA, & syscall.Rlimit { Max : 4 * 1024 * 1024 * 1024 }); _error != nil { {
AbortError (_error, "[f661b4fe] failed to configure limits!") _limitMb := (2 * _limitMemory) + (1 * 1024)
_limit := syscall.Rlimit {
Cur : uint64 (_limitMb) * 1024 * 1024,
Max : uint64 (_limitMb) * 1024 * 1024,
}
if _error := syscall.Setrlimit (syscall.RLIMIT_AS, &_limit); _error != nil {
AbortError (_error, "[4da96378] failed to configure memory limit!")
}
}
{
_limitMb := _limitMemory
_limit := syscall.Rlimit {
Cur : uint64 (_limitMb) * 1024 * 1024,
Max : uint64 (_limitMb) * 1024 * 1024,
}
if _error := syscall.Setrlimit (syscall.RLIMIT_DATA, &_limit); _error != nil {
AbortError (_error, "[f661b4fe] failed to configure memory limit!")
}
} }
} }

View file

@ -39,6 +39,8 @@
--profile-cpu <path> --profile-cpu <path>
--profile-mem <path> --profile-mem <path>
--limit-memory <MiB>
--debug --debug
--dummy --dummy
--delay <duration> --delay <duration>