事情起因是,在甲骨文大善人那里领了两台amd小鸡没处用,我就拿来做codex2api了
配置
- Shape:
VM.Standard.E2.1.Micro - CPU: 1/8 OCPU
- 内存:1G
- 免费磁盘:10VPUs/GB,我分配了50GB,IOPS=3000,吞吐为24MB/s
自此开始了我的噩梦,经常出现cpu明明是空载但系统反应极慢,后续用sar和pidstat查到是io风暴的问题
命令及输出
$ sar -u 1
23:42:23 CPU %user %nice %system %iowait %steal %idle
23:42:24 all 0.50 0.00 3.48 94.53 1.49 0.00
23:42:25 all 1.01 0.00 5.53 92.96 0.50 0.00
23:42:26 all 1.01 0.00 3.54 95.45 0.00 0.00
23:42:27 all 0.51 0.00 5.05 90.40 4.04 0.00
$ sudo pidstat -d 1
23:42:22 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
23:42:23 0 1212 1904.00 0.00 0.00 0 containerd
23:42:23 0 1281 19304.00 0.00 0.00 0 dockerd
23:42:23 0 656668 5388.00 0.00 0.00 0 caddy
23:42:23 1000 687151 22600.00 0.00 0.00 0 sub2api
23:42:23 1000 746727 16228.00 0.00 0.00 0 docker
23:42:23 1000 746753 2040.00 0.00 0.00 0 bash
23:42:23 1000 746754 292.00 0.00 0.00 0 docker
23:42:23 1000 746762 4292.00 0.00 0.00 0 docker-buildx
23:42:23 1000 746763 3368.00 0.00 0.00 0 docker-model
23:42:23 1000 746764 4112.00 0.00 0.00 0 docker-compose
23:42:23 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
23:42:24 0 1212 5780.00 0.00 0.00 0 containerd
23:42:24 0 1281 10852.00 0.00 0.00 0 dockerd
23:42:24 0 656668 3316.00 0.00 0.00 0 caddy
23:42:24 1000 746762 12616.00 0.00 0.00 0 docker-buildx
23:42:24 1000 746763 12124.00 0.00 0.00 0 docker-model
23:42:24 1000 746764 13044.00 0.00 0.00 0 docker-compose
23:42:24 0 746768 3080.00 0.00 0.00 0 runc
23:42:24 0 746769 8.00 0.00 0.00 0 runc
23:42:24 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
23:42:25 0 1212 1972.00 0.00 0.00 0 containerd
23:42:25 0 1281 10048.00 0.00 0.00 0 dockerd
23:42:25 1000 687151 12412.00 0.00 0.00 0 sub2api
23:42:25 1000 746762 19260.00 0.00 0.00 0 docker-buildx
23:42:25 1000 746763 8136.00 0.00 0.00 0 docker-model
23:42:25 1000 746764 7180.00 0.00 0.00 0 docker-compose
23:42:25 0 746768 5864.00 0.00 0.00 0 runc
23:42:25 0 746769 2732.00 0.00 0.00 0 runc
23:42:25 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
23:42:26 0 1281 10224.00 0.00 0.00 0 dockerd
23:42:26 0 657208 788.00 0.00 0.00 0 containerd-shim
23:42:26 0 657232 816.00 0.00 0.00 0 kiro-go
23:42:26 1000 687151 15132.00 0.00 0.00 0 sub2api
23:42:26 1000 746727 1772.00 0.00 0.00 0 docker
23:42:26 1000 746762 11972.00 0.00 0.00 0 docker-buildx
23:42:26 1000 746763 6800.00 0.00 0.00 0 docker-model
23:42:26 1000 746764 8540.00 0.00 0.00 0 docker-compose
23:42:26 0 746768 560.00 0.00 0.00 0 runc
23:42:26 0 746769 580.00 0.00 0.00 0 runc
23:42:26 0 746795 64.00 0.00 0.00 0 6
23:42:26 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
23:42:27 0 1281 6328.00 0.00 0.00 0 dockerd
23:42:27 0 657232 908.00 4.00 0.00 0 kiro-go
23:42:27 1000 687151 17180.00 0.00 0.00 0 sub2api
23:42:27 70 744104 0.00 16.00 0.00 0 postgres
23:42:27 1000 746727 3256.00 0.00 0.00 0 docker
23:42:27 1000 746762 9692.00 0.00 0.00 0 docker-buildx
23:42:27 1000 746763 7536.00 0.00 0.00 0 docker-model
23:42:27 1000 746764 11000.00 0.00 0.00 0 docker-compose
23:42:27 0 746768 120.00 0.00 0.00 0 runc
23:42:27 0 746769 300.00 0.00 0.00 0 runc
23:42:27 0 746804 836.00 0.00 0.00 0 runc:[2:INIT]
23:42:27 0 746805 4.00 0.00 0.00 0 runc:[2:INIT]
可以看到读盘直接打满了我的小鸡限制。
于是我怀疑是2api服务的问题,一路从cpa换codex2api换sub2api,但一直都还是有这个问题,甚至我拿两台小鸡做负载均衡也不行。
api并发也低的离谱,rpm从未超过5,而且这个问题从来不随api并发数出现。
而我又不甘心把2api转到arm小鸡上,死磕了好几天。
直到我今天写另一个服务调用了docker exec pg_isready也出现了io风暴,而且可以稳定复现。
众所周知,当一个问题可以稳定复现时,他就不再是问题了:
遂加了1g zram和2g swap,终于解决这一心头大患。
再让AI帮我做了个复现
另外,helper是我针对sub2api的at总是掉写的一个小工具,已经开源,做了个st2at。写死了很多个性化设置,放在这里主要是给大家一个思路,不建议直接使用。
另外,虽然本帖子目的不是推广,但还是写个声明:
本帖使用社区开源推广,符合推广要求。我申明并遵循社区要求的以下内容:
- 我的帖子已经打上 开源推广 标签: 是
- 我的开源项目完整开源,无未开源部分: 是
- 我的开源项目已链接认可 LINUX DO 社区: 是
- 我帖子内的项目介绍,AI生成、润色内容部分已截图发出: 是
- 以上选择我承诺是永久有效的,接受社区和佬友监督: 是


