【问题标题】:etcd fatal error: failed to reserve page summary memoryetcd 致命错误:无法保留页面摘要内存
【发布时间】:2022-11-24 00:07:55
【问题描述】:

当我尝试在 64 位 Linux 环境(资源有限)中从用户帐户(总 RAM:8GB,虚拟内存 1GB)运行 etcd 时,出现以下错误:

fatal error: failed to reserve page summary memory

runtime stack:
runtime.throw(
{0x108df50?, 0x7fffd8aa6850?}
)
/usr/local/go/src/runtime/panic.go:1047 +0x5d fp=0x7fffd8aa6800 sp=0x7fffd8aa67d0 pc=0x437edd
runtime.(*pageAlloc).sysInit(0x194f2f0)
/usr/local/go/src/runtime/mpagealloc_64bit.go:82 +0x195 fp=0x7fffd8aa6888 sp=0x7fffd8aa6800 pc=0x42c9b5
runtime.(*pageAlloc).init(0x194f2f0, 0x194f2e0, 0x0?)
/usr/local/go/src/runtime/mpagealloc.go:324 +0x70 fp=0x7fffd8aa68b0 sp=0x7fffd8aa6888 pc=0x42a610
runtime.(*mheap).init(0x194f2e0)
/usr/local/go/src/runtime/mheap.go:721 +0x13f fp=0x7fffd8aa68e8 sp=0x7fffd8aa68b0 pc=0x427a3f
runtime.mallocinit()
/usr/local/go/src/runtime/malloc.go:407 +0xb2 fp=0x7fffd8aa6910 sp=0x7fffd8aa68e8 pc=0x40c4f2
runtime.schedinit()
/usr/local/go/src/runtime/proc.go:693 +0xab fp=0x7fffd8aa6970 sp=0x7fffd8aa6910 pc=0x43b8ab
runtime.rt0_go()
/usr/local/go/src/runtime/asm_amd64.s:345 +0x11c fp=0x7fffd8aa6978 sp=0x7fffd8aa6970 pc=0x469c3c

但同样适用于 root 帐户。

有人可以支持吗?

我期待这应该从 root 和用户帐户提供相同的输出。这对我来说似乎是一个虚拟内存问题。

【问题讨论】:

    标签: go etcd patroni


    【解决方案1】:

    由于您的要求不是很清楚,我将与您分享一段可以成功与 etcd 交互的工作代码:

    package main
    
    import (
        "context"
        "fmt"
        "time"
    
        clientv3 "go.etcd.io/etcd/client/v3"
    )
    
    func main() {
        cli, err := clientv3.New(clientv3.Config{
            Endpoints:   []string{"localhost:2379"},
            DialTimeout: 5 * time.Second,
        })
        if err != nil {
            panic(err)
        }
        defer cli.Close()
    
        // insert values
        res, err := cli.Put(context.Background(), "key1", "val1")
        if err != nil {
            panic(err)
        }
    
        fmt.Printf("revision: %q
    ", res.Header.Revision)
    
        // delete all keys
        defer cli.Delete(context.Background(), "key", clientv3.WithPrefix())
    
        // get object from etcd
        key, err := cli.Get(context.Background(), "key1")
        if err != nil {
            panic(err)
        }
    
        fmt.Printf("key: %q	value: %q
    ", key.Kvs[0].Key, key.Kvs[0].Value)
    }
    

    此代码假定您有一个正在运行的 ETCD 实例,它在端口 2379 上侦听传入请求。我使用以下脚本通过 Docker 运行 ETCD:
    docker run -d -p 2379:2379 -p 2380:2380 --env ALLOW_NONE_AUTHENTICATION=yes --env ETCD_ADVERTISE_CLIENT_URLS=http://etcd-server:2379 bitnami/etcd:latest

    希望这有助于澄清一点!

    【讨论】:

      猜你喜欢
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 2013-07-23
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多