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
- 当交换空间达到极限时,系统会面临一些决定:
- 把缓存的内存从交换区清掉,这会影响磁盘性能
- 从系统内存缓存中清除缓存的内存,从而增加磁盘访问
- 直接访问磁盘而不使用缓存,这会导致磁盘读取更频繁
- 交换区使用达到上限表示可用内存快用完了
磁盘平衡和 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 数据)
- 系统磁盘: