gpt4 book ai didi

postgresql - Centos 不使用可用内存

转载 作者:行者123 更新时间:2023-12-04 19:39:55 26 4
gpt4 key购买 nike

我在具有 64gb 内存的服务器上安装了 Centos,似乎内存使用被抑制了。
我通过运行插入语句得出了这个结论,在该语句中,我将 1000 万行插入到 Timescaledb 和 Docker 上托管的标准 Postgres 实例中的 Postgres 表中。
我以三种不同的方式监控插入过程:

  • Docker stats timescaledb:
  • CONTAINER           CPU %               MEM USAGE / LIMIT       MEM %               NET I/O             BLOCK I/O           PIDS
    timescaledb 73.14% 10.42 MiB / 62.75 GiB 0.02% 8.46 kB / 8.39 kB 0 B / 15.1 GB 12
  • free -i 给出以下信息:
  •   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
    16298 avahi 20 0 16.2g 762356 759908 R 41.5 1.2 0:22.72 postgres
    16127 avahi 20 0 16.2g 693080 691968 S 4.3 1.1 0:01.29 postgres
    16129 avahi 20 0 16.2g 17748 16712 S 2.3 0.0 0:00.87 postgres
    1578 root 30 10 1232780 86976 11568 S 0.7 0.1 0:46.34 osqueryd
    17014 root 20 0 162264 2480 1596 R 0.7 0.0 0:00.03 top
    928 root 20 0 90608 3212 2352 S 0.3 0.0 0:03.47 rngd
    16128 avahi 20 0 16.2g 132064 131016 S 0.3 0.2 0:00.18 postgres
  • free -h 给出以下
  •               total        used        free      shared  buff/cache   available
    Mem: 62G 1.0G 58G 1.1G 3.1G 56G
    Swap: 62G 0B 62G
    我知道 Timescaledb 是 Postgres 的扩展,它带有自己的内存配置,但 Timescaledb 的 Docker 容器会自动为您配置这些(例如,有效缓存大小设置为 48gb,而不是 Postgres 附带的默认 4gb)。我还使用 Apache spark 运行了一个类似的过程,分配给 worker 16gb,它遇到了 oom 错误。此外,我在不同的小型 VM 上进行了类似的测试,内存使用量按预期增加。所有这一切让我相信这是我在某处遗漏的 Centos 配置设置,与 Timescale/Postgres 无关?
    我在/etc/sysctl.conf 中将以下参数添加到 vm.overcommit_memory = 2 和 vm.overcommit_ratio = 95 并运行 sysctl -p 来实现设置,但这并没有什么不同。
    kernel.shmall = 8224280
    kernel.shmmax = 33686650880
    kernel.shmmni = 4096
    vm.overcommit_memory = 2
    vm.overcommit_ratio = 95
    下面是 cat/proc/meminfo 的输出
    MemTotal:       65794240 kB
    MemFree: 61098656 kB
    MemAvailable: 59252660 kB
    Buffers: 2120 kB
    Cached: 3467144 kB
    SwapCached: 0 kB
    Active: 2817620 kB
    Inactive: 884816 kB
    Active(anon): 1109220 kB
    Inactive(anon): 234708 kB
    Active(file): 1708400 kB
    Inactive(file): 650108 kB
    Unevictable: 0 kB
    Mlocked: 0 kB
    SwapTotal: 65535996 kB
    SwapFree: 65535996 kB
    Dirty: 88 kB
    Writeback: 0 kB
    AnonPages: 233188 kB
    Mapped: 1175120 kB
    Shmem: 1110756 kB
    Slab: 204044 kB
    SReclaimable: 142700 kB
    SUnreclaim: 61344 kB
    KernelStack: 7232 kB
    PageTables: 14672 kB
    NFS_Unstable: 0 kB
    Bounce: 0 kB
    WritebackTmp: 0 kB
    CommitLimit: 128040524 kB
    Committed_AS: 18709300 kB
    VmallocTotal: 34359738367 kB
    VmallocUsed: 408824 kB
    VmallocChunk: 34325399548 kB
    Percpu: 9216 kB
    HardwareCorrupted: 0 kB
    AnonHugePages: 96256 kB
    CmaTotal: 0 kB
    CmaFree: 0 kB
    HugePages_Total: 0
    HugePages_Free: 0
    HugePages_Rsvd: 0
    HugePages_Surp: 0
    Hugepagesize: 2048 kB
    DirectMap4k: 133604 kB
    DirectMap2M: 66965504 kB
    有什么我可以尝试增加内存使用的吗?是否有我在这里遗漏的配置设置?
    提前感谢您的帮助

    最佳答案

    PostgreSQL 还使用“未使用”内存,因为它使用缓冲 I/O。所以这个“未使用的内存”被内核用来缓存文件——在数据库服务器的情况下,这些将是数据库文件。这样,PostgreSQL 的 I/O 请求可以从内核缓存中得到服务,而不是引起磁盘 I/O 请求。

    关于postgresql - Centos 不使用可用内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68361610/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com