Я знаю, что процесс очистки - это сборщик мусора ядра, но в моем случае на двух серверах этот процесс действительно является процессорным. В большинстве случаев он использует 80-100% ЦП.
2898 root 20 0 0 0 0 R 78 0.0 2900:22 flush-0:21
Что может быть причиной этого. Я думал про испорченную память, а на двух серверах одновременно? Думаю, это стало происходить после обновления ядра. Может есть какая-то известная ошибка?
Редактировать:
Обновленная информация. Это Gentoo Linux 64-бит, версия ядра - 2.6.39-gentoo-r2. Имеет 8 ГБ оперативной памяти. Нет большой активности ввода-вывода.
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 5.01 87.19 5.55 166452685 10596484
sdb 5.01 87.30 5.55 166662767 10596484
md0 10.05 160.74 2.75 306883505 5258392
md1 3.61 13.74 2.10 26229593 4006684
Странно то, что активность ввода-вывода на sda / sdb, это разделы подкачки, отключена.
Мы используем только процедуру uwsgi и несколько скриптов Python, запускаемых из crontab.
iostat -x 5
Linux 2.6.39-gentoo-r2 (python-1) 07/27/11 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
44.98 0.00 3.73 0.81 0.00 50.48
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 1.37 0.70 4.35 0.67 87.16 5.55 37.00 0.08 15.16 15.61 12.21 3.07 1.54
sdb 1.37 0.70 4.35 0.67 87.27 5.55 36.99 0.07 14.84 15.22 12.35 3.11 1.56
md0 0.00 0.00 9.36 0.69 160.67 2.76 32.51 0.00 0.00 0.00 0.00 0.00 0.00
md1 0.00 0.00 3.11 0.50 13.76 2.09 8.79 0.00 0.00 0.00 0.00 0.00 0.00
avg-cpu: %user %nice %system %iowait %steal %idle
68.24 0.00 25.01 0.30 0.00 6.45
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.20 1.20 0.80 4.80 4.00 8.80 0.01 7.10 7.50 6.50 7.10 1.42
sdb 0.00 0.20 1.00 0.80 4.80 4.00 9.78 0.01 7.00 6.00 8.25 7.00 1.26
md0 0.00 0.00 0.00 0.60 0.00 2.40 8.00 0.00 0.00 0.00 0.00 0.00 0.00
md1 0.00 0.00 2.00 0.00 8.80 0.00 8.80 0.00 0.00 0.00 0.00 0.00 0.00
avg-cpu: %user %nice %system %iowait %steal %idle
68.24 0.00 21.13 1.18 0.00 9.45
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 1.20 0.00 6.40 0.00 10.67 0.01 6.50 6.50 0.00 6.50 0.78
sdb 0.00 0.00 1.40 0.00 7.20 0.00 10.29 0.02 11.43 11.43 0.00 11.43 1.60
md0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
md1 0.00 0.00 2.60 0.00 13.60 0.00 10.46 0.00 0.00 0.00 0.00 0.00 0.00
avg-cpu: %user %nice %system %iowait %steal %idle
60.73 0.00 22.34 2.75 0.00 14.18
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 5.40 0.00 22.40 0.00 8.30 0.08 14.22 14.22 0.00 6.04 3.26
sdb 0.20 0.00 3.80 0.00 36.80 0.00 19.37 0.03 7.74 7.74 0.00 7.74 2.94
md0 0.00 0.00 7.00 0.00 48.80 0.00 13.94 0.00 0.00 0.00 0.00 0.00 0.00
md1 0.00 0.00 2.40 0.00 10.40 0.00 8.67 0.00 0.00 0.00 0.00 0.00 0.00
avg-cpu: %user %nice %system %iowait %steal %idle
74.22 0.00 20.08 1.25 0.00 4.45
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.20 2.20 10.80 0.60 92.00 11.20 18.11 0.07 5.81 5.78 6.33 5.81 6.62
sdb 0.60 2.20 11.60 0.60 144.80 11.20 25.57 0.08 6.92 6.83 8.67 6.25 7.62
md0 0.00 0.00 22.00 2.40 226.40 9.60 19.34 0.00 0.00 0.00 0.00 0.00 0.00
md1 0.00 0.00 1.20 0.00 10.40 0.00 17.33 0.00 0.00 0.00 0.00 0.00 0.00
avg-cpu: %user %nice %system %iowait %steal %idle
69.17 0.00 21.25 0.85 0.00 8.72
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 0.60 0.00 2.40 0.00 8.00 0.00 6.00 6.00 0.00 6.00 0.36
sdb 0.00 0.00 0.80 0.00 7.20 0.00 18.00 0.01 9.75 9.75 0.00 9.75 0.78
md0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
md1 0.00 0.00 1.40 0.00 9.60 0.00 13.71 0.00 0.00 0.00 0.00 0.00 0.00
avg-cpu: %user %nice %system %iowait %steal %idle
56.99 0.00 22.66 3.63 0.00 16.73
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.00 1.60 1.20 8.00 4.80 9.14 0.02 8.00 10.62 4.50 7.21 2.02
sdb 0.00 0.00 1.40 1.20 7.20 4.80 9.23 0.02 8.38 10.71 5.67 8.15 2.12
md0 0.00 0.00 0.40 0.80 1.60 3.20 8.00 0.00 0.00 0.00 0.00 0.00 0.00
md1 0.00 0.00 2.60 0.00 13.60 0.00 10.46 0.00 0.00 0.00 0.00 0.00 0.00
avg-cpu: %user %nice %system %iowait %steal %idle
68.65 0.00 25.95 1.55 0.00 3.85
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.40 45.80 43.20 19.40 445.60 260.80 22.57 0.48 7.71 9.05 4.73 4.67 29.26
sdb 1.00 45.80 48.00 19.40 607.20 260.80 25.76 0.56 8.26 9.70 4.70 4.06 27.36
md0 0.00 0.00 102.40 64.40 1020.00 257.60 15.32 0.00 0.00 0.00 0.00 0.00 0.00
md1 0.00 0.00 6.80 0.00 33.60 0.00 9.88 0.00 0.00 0.00 0.00 0.00 0.00
avg-cpu: %user %nice %system %iowait %steal %idle
67.86 0.00 22.76 2.03 0.00 7.35
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 8.80 1.00 74.20 0.80 590.40 7.20 15.94 0.26 3.46 3.44 4.50 3.07 23.06
sdb 2.20 1.00 77.80 0.80 552.00 7.20 14.23 0.31 3.94 3.92 6.00 3.30 25.96
md0 0.00 0.00 115.20 1.40 907.20 5.60 15.66 0.00 0.00 0.00 0.00 0.00 0.00
md1 0.00 0.00 48.00 0.00 234.40 0.00 9.77 0.00 0.00 0.00 0.00 0.00 0.00
flush
это не «сборка мусора в ядре». Я не уверен, где вы это читали, но в C нет сборщика мусора. Нет автоматического управления памятью. Программисты на C должны сами управлять выделением памяти. Тем не мение...
flush
- это процесс, который подсистема виртуальной памяти использует для записи грязных страниц на диск. Это называется pdflush
или bdflush
в ядрах EL.
Когда вы выполняете любой (непрямой) ввод-вывод, файл, к которому вы обращаетесь, попадает в кэш страниц. Если вы читаете текстовый файл с диска, этот текстовый файл теперь существует на диске и в кэш-памяти. Если вы внесете некоторые изменения и сохраните этот файл, фактический write()
системный вызов, который делает ваш текстовый редактор, завершает копирование файла в памяти. Таким образом, системный вызов возвращается быстро, и ваш текстовый редактор может вернуться к принятию вашего ввода, а не делать паузу, пока он записывает данные на (относительно) медленный жесткий диск. Страницы памяти, которые занимает этот измененный текстовый файл, теперь называются «грязными страницами». Ядро беспокоится о том, чтобы записать фактический блок на диск позже, это называется «синхронизацией» или «сбросом грязных страниц».
Вы ожидаете, что процесс очистки будет время от времени загружать ЦП, потому что процесс будет выполнять ввод-вывод на диск и, вероятно, будет проводить большую часть своего времени в iowait.
Здесь не о чем беспокоиться. Ваша система ведет себя как любая другая система Linux.