Linux
linux最高負載平均值似乎太高了
按照這個https://unix.stackexchange.com/a/279354/108702,我跑了;
lscpu | grep -E '^Thread|^Core|^Socket|^CPU\(' CPU(s): 8 Thread(s) per core: 2 Core(s) per socket: 4 Socket(s): 1
但是
top
:top - 01:06:47 up 51 days, 6:24, 2 users, load average: 23.67, 22.50, 22.40 Tasks: 5989 total, 1 running, 5919 sleeping, 0 stopped, 0 zombie %Cpu(s): 84.6 us, 2.7 sy, 0.0 ni, 12.3 id, 0.4 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 32799488 total, 940020 free, 18284088 used, 13575380 buff/cache KiB Swap: 0 total, 0 free, 0 used. 14034316 avail Mem
我錯過了什麼?我期望最大負載為 2 * 4 * 1 = 8(在 100% 使用時)?(另外,是不是太高了?)
TL;DR,23 可能太高了。
考慮負載的最簡單方法是“隊列中使用 CPU 的程序數”。如果負載與 CPU 計數完全匹配,則需要 CPU 的程序數與可用 CPU 完全匹配,並且您具有理想的使用率。如果負載高於可用 CPU 的數量,則某些程序必須等待 CPU 可用,並且您沒有達到理想的吞吐量,因為您沒有足夠的資源。如果負載低於 CPU 計數,則某些 CPU 處於空閒狀態,您可能可以從此框獲得更多吞吐量。
它是 CPU 使用率的有用計數器,因為它告訴您您的超額訂閱情況;CPU 使用率會告訴你瞬時消耗,但如果你的所有核心都以 100% 執行,那實際上可能是理想的——這裡重要的是平均負載,它會告訴你隊列有多大。打個比方,麥當勞的員工可以 100% 地為顧客服務,重要的是有多少人在等待服務。這就是平均負載告訴你的。
當然,這是一種簡化,其中包含大量技術細節和細微之處,但對於我們 95% 的人來說,這是一個足夠好的規則來衡量系統需求並解釋平均負載告訴你什麼。