Skip to content

Memory and Swap usage explained

了解交换空间和内存使用情况 #

🌐 Understanding swap and memory usage

  • 交换空间是 Linux 分层内存系统的一部分
  • 当内存不足时,用作备份存储空间。
  • 系统优先将正在使用的数据保存在内存中
  • 数据会暂时缓存在内存中以便快速访问
  • 交换用于不常访问或非关键的数据
  • 默认的交换性值为60,表示系统倾向于为了性能而使用交换空间

计算实例配置 #

🌐 Compute instance configuration

  • 默认交换性:60(满分100)
    • 决定系统将数据从内存移动到交换区的激进程度
    • Linux 发行版中的默认值
    • 改变 swappiness 值会显著影响系统行为,因为它是一个非线性的值。哪怕只是调整 10,也可能导致系统行为有很大不同
  • 交换分区:每个计算实例 1024MB

交换分区使用过高的问题 #

🌐 Issues with high swap usage

  • 当交换空间达到极限时,系统会面临一些决定:
    1. 把缓存的内存从交换区清掉,这会影响磁盘性能
    2. 从系统内存缓存中清除缓存的内存,从而增加磁盘访问
    3. 直接访问磁盘而不使用缓存,这会导致磁盘读取更频繁
  • 交换区使用达到上限表示可用内存快用完了

磁盘平衡和 AWS 限制 #

🌐 Disk balance and AWS limits

  • 每个项目都有一个基准的“余额补充率”
  • 在更大的 AWS 实例上,补充速率更高
  • 磁盘IO使用率低于补充速率,保持平衡在99%
  • 磁盘 IO 使用率超过补充速率会降低平衡
  • 当 IO 使用低于补充速率时,余额会增加
  • AWS 不会导出用于跟踪 IO 使用情况的相关指标

监控建议 #

🌐 Monitoring recommendations

  • 监控内存使用情况:
    • 如果使用率超过85%,且交换空间使用率超过90%且持续较长时间,就优化数据库访问或增加更多资源
  • 监控 CPU IOWait 使用情况和磁盘 IO 指标:
    • 导出的指标在这里:https://github.com/supabase/grafana-agent-fly-example/blob/main/metrics.md
    • 跟踪过度磁盘 IO 使用情况的关键指标包括:
      • node_disk_reads_completed_total:追踪已完成的磁盘读取总数。
      • node_disk_io_time_seconds_total:衡量在磁盘IO操作上花费的总时间。
      • node_disk_io_now:显示当前的磁盘IO操作。
    • 用“device”标签来区分系统盘和数据盘
      • 系统磁盘:{device="nvme0n1"}(包含交换分区)
      • 数据盘:{device="nvme1n1"}(专用作 Postgres 数据)