Я слежу за процессом mysql в ubuntu 12.04, используя mpstat
и pidstat
, одновременно. Во время отладки загрузки процессора я заметил кое-что необычное. Хотя оба инструмента согласны с тем, что загрузка процессора происходит, они не согласен о том, что это за нагрузка. Вот примерный временной отрезок:
$ pidstat -p 2763 1
01:36:36 PM PID %usr %system %guest %CPU CPU Command
01:36:36 PM 2763 0.00 0.00 0.00 0.00 0 mysqld
01:36:37 PM 2763 0.00 1.00 0.00 1.00 0 mysqld
01:36:38 PM 2763 0.00 5.00 0.00 5.00 0 mysqld
01:36:39 PM 2763 0.00 11.00 0.00 11.00 0 mysqld
01:36:40 PM 2763 0.00 12.00 0.00 12.00 0 mysqld
01:36:41 PM 2763 0.00 0.00 0.00 0.00 0 mysqld
01:36:42 PM 2763 0.00 0.00 0.00 0.00 0 mysqld
01:36:43 PM 2763 0.00 5.00 0.00 5.00 0 mysqld
01:36:44 PM 2763 0.00 170.00 0.00 170.00 0 mysqld
01:36:45 PM 2763 0.00 150.00 0.00 150.00 0 mysqld
01:36:46 PM 2763 0.00 4.00 0.00 4.00 0 mysqld
01:36:47 PM 2763 0.00 7.00 0.00 7.00 0 mysqld
01:36:48 PM 2763 0.00 7.00 0.00 7.00 0 mysqld
01:36:49 PM 2763 0.00 59.00 0.00 59.00 0 mysqld
01:36:50 PM 2763 0.00 85.00 0.00 85.00 0 mysqld
Обратите внимание, что pidstat
сообщает об интенсивном использовании на уровне системы в различные моменты времени. Вот mpstat
примерно за такой же период времени:
$ mpstat -P ALL 1
01:36:37 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
01:36:38 PM all 0.38 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.62
01:36:38 PM 0 2.02 0.00 0.00 0.00 0.00 0.00 0.00 0.00 97.98
01:36:38 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:38 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:38 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:38 PM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:38 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:38 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:38 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:38 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
01:36:39 PM all 0.88 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.12
01:36:39 PM 0 4.08 0.00 0.00 0.00 0.00 0.00 0.00 0.00 95.92
01:36:39 PM 1 2.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 98.00
01:36:39 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:39 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:39 PM 4 0.99 0.00 0.99 0.00 0.00 0.00 0.00 0.00 98.02
01:36:39 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:39 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:39 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:39 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
01:36:40 PM all 0.62 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.38
01:36:40 PM 0 5.05 0.00 0.00 0.00 0.00 0.00 0.00 0.00 94.95
01:36:40 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:40 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:40 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:40 PM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:40 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:40 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:40 PM 7 0.99 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.01
01:36:40 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
01:36:41 PM all 1.25 0.00 0.25 0.00 0.00 0.12 0.00 0.00 98.38
01:36:41 PM 0 10.00 0.00 1.00 0.00 0.00 1.00 0.00 0.00 88.00
01:36:41 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:41 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:41 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:41 PM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:41 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:41 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:41 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:41 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
01:36:42 PM all 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:42 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:42 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:42 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:42 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:42 PM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:42 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:42 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:42 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:42 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
01:36:43 PM all 0.12 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.88
01:36:43 PM 0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:43 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:43 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:43 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:43 PM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:43 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:43 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:43 PM 7 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
01:36:43 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
01:36:44 PM all 2.88 0.00 0.00 0.00 0.00 0.00 0.00 0.00 97.12
01:36:44 PM 0 22.77 0.00 0.99 0.00 0.00 0.00 0.00 0.00 76.24
01:36:44 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:44 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:44 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:44 PM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:44 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:44 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:44 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:44 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
01:36:45 PM all 23.72 0.00 0.12 0.00 0.00 0.12 0.00 0.00 76.03
01:36:45 PM 0 99.00 0.00 0.00 0.00 0.00 1.00 0.00 0.00 0.00
01:36:45 PM 1 89.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 11.00
01:36:45 PM 2 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
01:36:45 PM 3 0.00 0.00 0.99 0.00 0.00 0.00 0.00 0.00 99.01
01:36:45 PM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:45 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:45 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:45 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:45 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
01:36:46 PM all 13.89 0.00 0.00 0.00 0.00 0.00 0.13 0.00 85.98
01:36:46 PM 0 34.34 0.00 0.00 0.00 0.00 1.01 0.00 0.00 64.65
01:36:46 PM 1 69.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 31.00
01:36:46 PM 2 5.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 95.00
01:36:46 PM 3 3.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 97.00
01:36:46 PM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:46 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:46 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:46 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:46 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
01:36:47 PM all 0.50 0.00 0.00 0.00 0.00 0.13 0.00 0.00 99.37
01:36:47 PM 0 3.96 0.00 0.00 0.00 0.00 0.00 0.00 0.00 96.04
01:36:47 PM 1 1.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.00
01:36:47 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:47 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:47 PM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:47 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:47 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:47 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:47 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %idle
01:36:48 PM all 0.63 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.37
01:36:48 PM 0 5.10 0.00 0.00 0.00 0.00 0.00 0.00 0.00 94.90
01:36:48 PM 1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:48 PM 2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:48 PM 3 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:48 PM 4 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:48 PM 5 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:48 PM 6 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
01:36:48 PM 7 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
Я не удивлен, увидев, что они расходятся во мнениях относительно общих процентов, но я не могу понять, почему pidstat
и mpstat
не согласны с типом загрузки процессора. mpstat
указывает, что нагрузка происходит на уровне приложения. pidstat
указывает, что это происходит на уровне ядра. Что тут происходит? Я предположил, что оба были взглядами на /proc
, но я недостаточно разбираюсь в их внутреннем устройстве, чтобы знать, откуда они получают разные сигналы.
РЕДАКТИРОВАТЬ: Лучшее, что я могу сказать об этих результатах, по несоответствиям между /proc
механизм расчета, используемый каждой программой.
pidstat
использует /proc/<pid>/stat
: https://github.com/sysstat/sysstat/blob/master/pidstat.c#L373-L382
mpstat
использует /proc/uptime
и /proc/stat
: https://github.com/sysstat/sysstat/blob/master/rd_stats.c#L59-L163
Итак, у меня есть причина, но на самом деле это не основная причина:
mpstat
полагается на /proc/stat
для его показателей ЦП. pidstat
полагается на /proc/<pid>/stat
. Эти файлы временами расходятся во мнениях относительно количества скачков ядра, наблюдаемых за определенный промежуток времени, что, как я полагаю, имеет смысл, поскольку мы говорим о таком приращении разрешения времени:
17:06:41 /proc/stat 158257197
17:06:46 /proc/stat 158257230
17:06:51 /proc/stat 158257236
17:06:56 /proc/stat 158257279
# t3 - t0 = 82 jiffies
против...
17:06:41 /proc/2763/stat 208862696
17:06:46 /proc/2763/stat 208862971
17:06:51 /proc/2763/stat 208863114
17:06:56 /proc/2763/stat 208863143
# t3 - t0 = 447 jiffies
Каждая разница, конечно, подлежит вычислению производной в зависимости от mpstat
и pidstat
исходный код, массирование в процентах и т. д.
Если вы углубитесь в /proc
и сумма /proc/<pid>/task/**/stat
, результат имеет больше смысла. Это число растет медленнее, чем /proc/stat
в целом и значительно медленнее, чем /proc/<pid>/stat
.
Похоже, если я собираюсь пойти дальше, мне нужно лучше понять, как ядро записывает эти файлы для моей конкретной версии. Понятно что /proc/<pid>/stat
не согласен с /proc/<pid>/task/**/stat
.