Skip to content

Debug

English | 简体中文

Q: 想要使用更高的 QPS 应该如何设置?

  • A: 当 QPS 设置过大,会导致服务器资源占用过高,影响业务。为了防止在生产坏境出现误操作。kdoctor 在 webhook 中添加了 QPS 的检查。如果您想使用更高的 QPS 可通过参数设置 QPS 限制 --set feature.appHttpHealthyRequestMaxQPS=1000,--set feature.netReachRequestMaxQPS=1000,--set feature.netDnsRequestMaxQPS=1000,也可以通过 kdoctor 的 configmap 中去更改 , 并重启 kdoctor 的相关 pod 重新加载 configmap。

Q: 为什么我的任务无法达到期望的 QPS ?

  • A:无法达到 QPS 的期望原因有很多主要分为以下几种原因:
  • 并发 worker 设置过低,kdoctor 可通过设置参数调整并发数 --set feature.netReachMaxConcurrency=50--set feature.appHttpHealthyMaxConcurrency=50--set feature.netDnsMaxConcurrency=50
  • kdoctor agent 分配资源不充足,可通过 kdoctor 的聚合报告kubectl get kdoctorreport查看任务消耗的 cpu 与 内存使用量,确定 kdoctor agent 资源分配是否充足。

    shell ~kubectl get kdoctorreport test-task -oyaml ... SystemResource: MaxCPU: 52.951% MaxMemory: 120.00MB MeanCPU: 32.645% ...

  • kdoctor agent 中是否在同时执行其他任务将资源占满。可通过 kdoctor 的聚合报告`kubectl get kdoctorreport 查看同时执行的其他任务 QPS 数量。 错开任务执行时间或通过定义 agentSpec 指定 kdoctor agent 执行任务将任务进行隔离。因 QPS 统计具有时效性,所以可搭配日志一起作为参考,在任务执行开始前,会将当前在执行的 QPS 输出到日志中。

     ~kubectl logs kdoctor-agent-74rrp  -n kdoctor |grep "Before the current task starts"
     {"level":"DEBUG","ts":"2023-11-07T10:01:02.821Z","agent":"agent.agentController.AppHttpHealthyReconciler.AppHttpHealthy.test-task.round1","caller":"pluginManager/agentTools.go:90","msg":"Before the current task starts, the total QPS of the tasks being executed is AppHttpHealth=100,NetReach=0,NetDNS=0","AppHttpHealthy":"test-task"}
    
     ~kubectl get kdoctorreport test-task -oyaml
     ...
     TotalRunningLoad:
       AppHttpHealthyQPS: 100
       NetDnsQPS: 50
       NetReachQPS: 0
     ...
    

Q: 为什么 Kdoctor agent 会 OOM?

  • A: kdoctor agent 作为默认的执行任务的 agent,在任务中没有指定 agent 时,默认使用 kdoctor agent 执行,目前的 agent 还不支持根据任务负载情况,拒绝执行任务或延迟执行任务功能。 因此当 kdoctor agent 同时执行大量任务时,由于请求量过大,内存限制过低,将会导致 kdoctor agent 内存过载,导致 OOM,我们可以根据任务情况,错开使用 kdoctor agent,调整内存限制,或使用指定的 agent 隔离任务。