Linux
調試和微調 linux 程序調度器
在調試零星的 Web 應用程序減速時,我發現所有程序都有相當高的最大調度延遲。
# perf sched record -- sleep 10 && perf sched latency --sort max ----------------------------------------------------------------------------------------------------------------- Task | Runtime ms | Switches | Average delay ms | Maximum delay ms | Maximum delay at | ----------------------------------------------------------------------------------------------------------------- logspout:(7) | 56.715 ms | 1607 | avg: 9.744 ms | max: 491.840 ms | max at: 270.634788 s kubectl:(21) | 298.298 ms | 3085 | avg: 12.497 ms | max: 474.413 ms | max at: 267.932542 s node-health:(6) | 10.035 ms | 269 | avg: 10.082 ms | max: 301.094 ms | max at: 271.033693 s fpm-prometheus-:(45) | 20.314 ms | 515 | avg: 10.632 ms | max: 295.889 ms | max at: 269.832519 s ruby:(2) | 297.768 ms | 162 | avg: 6.763 ms | max: 87.004 ms | max at: 270.532673 s :(3) | 0.550 ms | 9 | avg: 9.548 ms | max: 85.826 ms | max at: 271.332980 s gitaly-upload-p:(6) | 142.000 ms | 178 | avg: 2.244 ms | max: 79.394 ms | max at: 271.633055 s runc:[2:INIT]:(112) | 52.745 ms | 3159 | avg: 0.047 ms | max: 70.107 ms | max at: 269.332593 s curl:(22) | 53.576 ms | 144 | avg: 2.325 ms | max: 67.033 ms | max at: 270.132701 s php-fpm:(27) | 807.280 ms | 1925 | avg: 0.259 ms | max: 58.130 ms | max at: 273.032516 s [celeryd: celer:(5) | 513.913 ms | 3569 | avg: 0.089 ms | max: 25.874 ms | max at: 272.733699 s ingress-monitor:(5) | 14.067 ms | 741 | avg: 0.183 ms | max: 19.448 ms | max at: 269.075643 s node:(2) | 9.363 ms | 34 | avg: 0.561 ms | max: 9.014 ms | max at: 267.289700 s V8 WorkerThread:(4) | 3.330 ms | 9 | avg: 1.015 ms | max: 9.007 ms | max at: 267.289690 s docker-containe:(398) | 517.011 ms | 17648 | avg: 0.035 ms | max: 6.596 ms | max at: 269.068233 s sh:(55) | 202.641 ms | 1773 | avg: 0.028 ms | max: 5.764 ms | max at: 267.437706 s kubelet:(7) | 717.393 ms | 12067 | avg: 0.036 ms | max: 5.497 ms | max at: 269.068210 s dockerd:(60) | 518.212 ms | 8723 | avg: 0.047 ms | max: 5.273 ms | max at: 273.041616 s sshd:(3) | 25.612 ms | 51 | avg: 0.127 ms | max: 4.655 ms | max at: 270.432617 s docker-runc:(198) | 443.346 ms | 11516 | avg: 0.024 ms | max: 4.262 ms | max at: 270.041672 s nginx:(13) | 14.260 ms | 148 | avg: 0.142 ms | max: 2.483 ms | max at: 269.943108 s ksoftirqd/1:16 | 14.604 ms | 686 | avg: 0.032 ms | max: 2.350 ms | max at: 273.459962 s runc:[1:CHILD]:(34) | 17.452 ms | 117 | avg: 0.206 ms | max: 2.257 ms | max at: 267.297665 s
php-fpm 程序花費 58.130 毫秒等待 CPU 執行是否正確?這是否會轉化為 php-fpm 伺服器的響應延遲?
我想像如果在這 60 毫秒內的任何時間點有一個 http 請求,php-fpm 程序將不會處理它,直到它得到 CPU 時間。它是否正確?
總的來說,平均延遲和最大延遲對我來說似乎都很高。
這是在負載為 0.56、1.34、1.05 的 2 CPU 伺服器上的 4.20.0-trunk-amd64 核心(但在 4.18 上相當糟糕)上測量的。沒有記憶體壓力和很少的IO。
我還沒有修改預設調度程序配置,我正在使用預設值:
kernel.sched_cfs_bandwidth_slice_us = 5000 kernel.sched_child_runs_first = 0 kernel.sched_latency_ns = 12000000 kernel.sched_migration_cost_ns = 500000 kernel.sched_min_granularity_ns = 1500000 kernel.sched_nr_migrate = 32 kernel.sched_rr_timeslice_ms = 100 kernel.sched_rt_period_us = 1000000 kernel.sched_rt_runtime_us = 950000 kernel.sched_schedstats = 0 kernel.sched_tunable_scaling = 1 kernel.sched_wakeup_granularity_ns = 2000000
php-fpm 程序花費 58.130 毫秒等待 CPU 執行是否正確?
現在是從喚醒到上下文切換的時間,所以我想說讓它最終執行需要時間(因此 - “延遲”)
這是否會轉化為 php-fpm 伺服器的響應延遲?
如上所述,它是延遲。但實際上括號中有一個數字——27。我假設它是按名稱分組的所有程序的數字。鑑於 avg 是四分之一毫秒,由於著名的“初步優化是萬惡之源”規則,我建議不要調整調度程序。
在負載為 0.56、1.34、1.05 的 2 CPU 伺服器上
總共有多少個核心?好的,現在我們知道它是 AWS EC2,IOW,在管理程序下與其他一些客戶的虛擬機一起執行。嗯,這確實改變了很多,實際上。我推薦兩件事:
PS 我很容易添加“使用專用/裸機伺服器”,但有時它顯然不是一個選項。