通过对 zk 并发测试,在 800 个连接并发创建 80 万数据时,每个 zk 虚机节点的磁盘 IO 达到瓶颈。由于磁
盘性能限制,tps 基本在 9000 左右。根据官方的一份测试情况来看,tps 在 3 万以上问题不大(测试环境
差异)。
通过 iostat 查看,%util 在 70%以上,说明 cpu 大部分时间都消耗在磁盘 io 请求的处理上。单节点每秒在
几十 MB 左右。
通过 lsof 查看,磁盘性能主要消耗在 zk 自身的操作日志、数据快照、运行日志三部分文件上。
目前建议如果资源充足情况下,生产环境压力上来时,可以将操作日志与数据快照存在不同磁盘。
另一方面,随着负载的增大,日志文件产生过多会占用大量磁盘,而时间较长的历史数据又没有参考价值,
建议做定期删除操作。可以通过 crontab 添加定时任务,或者通过 zk 自身配置:
autopurge.purgeInterval=1
#保存数量
autopurge.snapRetainCount=100
avg-cpu: %user %nice %system %iowait %steal %idle
10.55 0.00 18.73 21.64 1.58 47.49
rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
0.00 23052.74 1.00 3979.60 3.98 94477.61 47.47 19.89 4.71 0.19 75.87
avg-cpu: %user %nice %system %iowait %steal %idle