如何在golang中检测出内存不足?

时间:2019-07-13 10:48:06

标签: go out-of-memory

我正在编写一个golang应用程序以缓存在内存字节数组中。如果没有更多可用内存,则应丢弃/重用旧的“页面”。

我正在测试"out of memory"事件,但是recover()无法正常工作。

在其他页面上,我读到“您不能。所有OOM条件都终止Go程序。”。

golang 中还有更好的方法吗?

如果我在单独的线程中尝试它,它只会使该线程崩溃吗?

在下面的代码中,如果内存不足的话,如何修复TryMake返回nil?

package main

import (
    "math"
)

//TryMake try to allocate memory
func TryMake(bytesize uint32) (buf []byte) {
    defer func() {
        if recover() != nil {
            buf = nil
        }
    }()

    buf = make([]byte, bytesize)
    return buf
}

//TestTryMake test
func TestTryMake() {
    var mk [602]*[]byte
    for i := 0; i < len(mk); i++ {
        bf := TryMake(math.MaxInt32)
        mk[i] = &bf
        if mk[i] == nil {
            print("last ", i)
        }
    }
    print("all completed ", len(mk))
}

func main() {
    TestTryMake()
}

0 个答案:

没有答案
相关问题