Ч частые состояния D и процессы зомби (Acronis, MySQL, Java, Journal D) – возможно, связаны с асинхронными ошибками страниц KVM.

Вопрос или проблема

Я наблюдал, что несколько процессов, включая Acronis, MySQL, Java-приложения и Journal D, часто переходят в состояние D. Это состояние, похоже, связано со страницами, а именно с асинхронными ошибками страницы KVM.

Вот соответствующий стек вызовов потока:

Стек потока:
[<0>] kvm_async_pf_task_wait_schedule+0x15c/0x1a0
[<0>] __kvm_handle_async_pf+0x4c/0x90
[<0>] do_page_fault+0x7b/0x12d
[<0>] page_fault+0x1e/0x30

Канал ожидания процесса
0 
rchar: 708830538
wchar: 209770024
syscr: 1053758
syscw: 29808
read_bytes: 112185856
write_bytes: 1970216960
cancelled_write_bytes: 73773056

Вот лог dmesg

Замороженный процесс Java

[  +0.000162] Trace вызовов:
[  +0.000144]  __schedule+0x2d1/0x870
[  +0.000156]  ? wait_consider_task+0xf0/0x940
[  +0.000154]  schedule+0x55/0xf0
[  +0.000160]  do_wait+0x165/0x2f0
[  +0.000326]  kernel_wait4+0xa6/0x140
[  +0.000360]  ? task_stopped_code+0x50/0x50
[  +0.000143]  __do_sys_wait4+0x87/0xa0
[  +0.000157]  ? handle_mm_fault+0xca/0x2a0
[  +0.000141]  ? syscall_trace_enter+0x1ff/0x2d0
[  +0.000141]  ? __do_page_fault+0x1e9/0x420
[  +0.000139]  do_syscall_64+0x5b/0x1b0
[  +0.000135]  entry_SYSCALL_64_after_hwframe+0x61/0xc6
[  +0.000150] RIP: 0033:0x7fdbebffa68b
[  +0.000138] Код: Невозможно получить доступ к байтам операции на RIP 0x7fdbebffa661.
[  +0.000159] RSP: 002b:00007ffe8baa3ab8 EFLAGS: 00000246 ORIG_RAX: 000000000000003d
[  +0.000150] RAX: ffffffffffffffda RBX: 000000000000000a RCX: 00007fdbebffa68b
[  +0.000149] RDX: 000000000000000a RSI: 00007ffe8baa3ae0 RDI: 00000000ffffffff
[  +0.000152] RBP: 0000000000000000 R08: 000055cc375727c0 R09: 0000000000000001
[  +0.000150] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000001
[  +0.000160] R13: 00007ffe8baa3bb0 R14: 0000000000000000 R15: 00007ffe8baa3ae0
[  +0.000156] задача:java            состояние:S стек:0     pid:1164  ppid:1      флаги:0x00000080

Поток замороженного процесса находится в состоянии D (идентификатор потока: 1393)

[  +0.000197] Trace вызовов:
[  +0.000160]  ? __raw_spin_unlock_irq+0x5/0x20
[  +0.000165]  ? __schedule+0x6fa/0x870
[  +0.000161]  ? syscall_slow_exit_work+0x109/0x130
[  +0.000165]  ? do_syscall_64+0x174/0x1b0
[  +0.000171]  ? entry_SYSCALL_64_after_hwframe+0x61/0xc6
[  +0.000182] задача:java            состояние:D стек:0     pid:1393  ppid:1      флаги:0x00000080
...
[  +0.000822] Отображение загруженных рабочих очередей и пулов работников:
[  +0.000271] рабочая очередь событий: флаги=0x0
[  +0.000269]   pwq 12: cpus=6 node=0 флаги=0x0 nice=0 активные=1/256 refcnt=2
[  +0.000257]     в ожидании: drm_fb_helper_damage_work [drm_kms_helper]
[  +0.000290] рабочая очередь events_power_efficient: флаги=0x80
[  +0.000280]   pwq 12: cpus=6 node=0 флаги=0x0 nice=0 активные=1/256 refcnt=2
[  +0.000269]     в ожидании: fb_flashcursor
[  +0.000275] рабочая очередь mm_percpu_wq: флаги=0x8
[  +0.000249]   pwq 12: cpus=6 node=0 флаги=0x0 nice=0 активные=1/256 refcnt=2
[  +0.000268]     в ожидании: vmstat_update
[  +0.017227] sysrq: SysRq : Показать заблокированное состояние
[  +0.000744] задача:java            состояние:D стек:0     pid:1393  ppid:1      флаги:0x00000080
[  +0.000400] Trace вызовов:
[  +0.000243]  __schedule+0x2d1/0x870
[  +0.000249]  schedule+0x55/0xf0
[  +0.000246]  kvm_async_pf_task_wait_schedule+0x15c/0x1a0
[  +0.000235]  __kvm_handle_async_pf+0x4c/0x90
[  +0.000224]  do_page_fault+0x7b/0x12d
[  +0.000229]  ? page_fault+0x8/0x30
[  +0.000239]  page_fault+0x1e/0x30
[  +0.000238] RIP: 0033:0x7f64475fa14f
[  +0.000226] Код: Невозможно получить доступ к байтам операции на RIP 0x7f64475fa125.
[  +0.000230] RSP: 002b:00007f644465abb8 EFLAGS: 00010202
[  +0.000233] RAX: 0000000710387240 RBX: 0000000710387240 RCX: 0000000711c6b180
[  +0.000257] RDX: 00000000006ba180 RSI: 00000007af520678 RDI: 00000007115b0fd0
[  +0.000215] RBP: 00007f644465ac30 R08: fffffffffffffff0 R09: 00007f644758abf8
[  +0.000213] R10: 0000000711c6b190 R11: 0000000710387240 R12: 00000007ae2f68a8
[  +0.000221] R13: 0000000000000001 R14: 0000000000000001 R15: 000000000031c7ea

Свободная память

              всего       использовано       свободно      общее       buf/cache    доступно
Mem:           15Gi       2.7Gi       5.8Gi       4.0Gi       6.8Gi       8.3Gi
Swap:         7.5Gi       623Mi       6.8Gi

Виртуальным гостям выделены фиксированные объемы памяти, и в каждом госте доступно более чем достаточно памяти (без перерасхода). Кэширование на диске в настоящее время установлено на запись, но я рассматриваю возможность переключения на прямую запись как более безопасный вариант, хотя не уверен, решит ли это проблему.

Кто-нибудь сталкивался с подобными проблемами или может предложить возможные причины этих ошибок, связанных с разPAGE-ум?

Ответ или решение

Частые процессы в состоянии D и зомби-процессы: Возможные причины, связанные с асинхронными ошибками страниц KVM

В вашем сообщении описывается несколько процессов, включая Acronis, MySQL, Java-приложения и Journal D, которые часто попадают в состояние D. Это состояние, как вы указали, предполагает, что процессы ожидают выполнения операций ввода-вывода и могут быть вызваны асинхронными ошибками страниц в окружении KVM. В данной статье мы постараемся разобраться в причинах, которые могут лежать в основе вашей проблемы, а также предложим возможные решения.

Понимание состояния D

Состояние D (Uninterruptible Sleep) обозначает, что процесс находится в состоянии ожидания завершения операции ввода-вывода. Процесс не может быть прерван сигналом, пока не завершится операция, что делает его "замороженным". В вашем случае наблюдаются такие процессы, как Java, MySQL и другие, которые фризятся, что вызывает сомнения в корректности работы системы.

Асинхронные ошибки страниц KVM

Асинхронные ошибки страниц в KVM могут происходить, когда гостевая операционная система пытается получить доступ к странице, которая еще не была загружена в память. Это может вызвать долгие задержки, особенно если происходит обмен данных с диском или если страница загружена в память медленно. Исходя из вашего стек-трейса, в частности обращения к kvm_async_pf_task_wait_schedule, можно предположить, что KVM не успевает обработать асинхронные запросы на страницы, что приводит к состоянию D.

Потенциальные причины проблемы

  1. Нехватка ресурсов: Хотя в вашем случае физической памяти достаточно (по вашим данным, 15 ГиБ, из которых используется 2.7 ГиБ), процессы внутри виртуальных машин могут испытывать нехватку выделенной оперативной памяти или процессорных ресурсов. Переход на более высокий уровень виртуализации или перенастройка ресурсов может помочь.

  2. Неправильная настройка кэширования: Вы упоминаете, что используете режим кэширования "writeback". Это может вызвать проблемы при большом количестве операций записи. Рассмотрите возможность переключения на "writethrough", но имейте в виду, что это повлияет на производительность при работе с большими массивами операций ввода-вывода.

  3. Проблемы с дисковым вводом-выводом: Ваша система может страдать от медленной работы дисковой системы или от перегрузок. Проверьте, как работает ввод-вывод на дисках, и рассмотрите возможность обновления дисков до SSD, если это еще не сделано.

  4. Параметры KVM: Настройки производительности KVM также могут быть причиной. Убедитесь, что ваши параметры виртуализации оптимизированы для работы с вашим программным обеспечением. Это может включать в себя настройки CPU и RAM, а также различные параметры QEMU/KVM.

  5. Неполадки в программном обеспечении: Ваша программа Java, MySQL или Acronis могут иметь не оптимизированный код, что вызывает задержки в процессе. Анализируйте и профилируйте код, чтобы выявить узкие места.

Рекомендации по устранению проблем

  • Проверяйте нагрузку на CPU и ввод-вывод: Используйте инструменты мониторинга, такие как top, htop и iostat, чтобы более детально изучить загрузку процессора и операции ввода-вывода.
  • Пересмотрите настройки kvm: Убедитесь, что у вас установлены правильные параметры виртуализатора, такие как использование Virtio для сетевых и дисковых операций.
  • Используйте более новые версии программного обеспечения: Обновление до последней версии вашего программного обеспечения и драйверов KVM, может повысить производительность и уменьшить ошибки.
  • Протестируйте различные режимы кэширования: Проведите тестирование различных режимов для определения того, какой из них вызовет минимальное количество операций ввода-вывода и улучшит общую производительность.

Заключение

Ваша проблема с частыми состояниями D и зомби-процессами может иметь множество факторов. Рекомендуется проанализировать все вышеперечисленные моменты и комплексно подходить к устранению проблемы. Высококачественный мониторинг и адаптация конфигурации системы под ваши рабочие нагрузки помогут минимизировать возникновение подобных ситуаций в будущем.

Оцените материал
Добавить комментарий

Капча загружается...