Вопрос или проблема
CentOS 9. 3 vCPU VM с 4 Гб ОЗУ.
Я запускаю задание cron с использованием 7z для сжатия 35 Гб данных в 150 файлах 7za a -mx=9 -mmt=3 ...
Использование ОЗУ – 18%, диск имеет очень небольшую очередь, средняя загрузка ЦПУ – 61%. Почему не 100%? Как найти узкое место?
sar -p -d 1 10
Linux 5.14.0-80.el9.x86_64 (logger) 30/04/22 _x86_64_ (3 CPU)
16:50:10 tps rkB/s wkB/s dkB/s areq-sz aqu-sz await %util DEV
16:50:11 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda
16:50:11 tps rkB/s wkB/s dkB/s areq-sz aqu-sz await %util DEV
16:50:12 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda
16:50:12 tps rkB/s wkB/s dkB/s areq-sz aqu-sz await %util DEV
16:50:13 39.00 33832.00 0.00 0.00 867.49 0.04 0.95 1.90 sda
16:50:13 tps rkB/s wkB/s dkB/s areq-sz aqu-sz await %util DEV
16:50:14 2.00 0.00 24.00 0.00 12.00 0.00 0.50 0.10 sda
16:50:14 tps rkB/s wkB/s dkB/s areq-sz aqu-sz await %util DEV
16:50:15 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda
16:50:15 tps rkB/s wkB/s dkB/s areq-sz aqu-sz await %util DEV
16:50:16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda
16:50:16 tps rkB/s wkB/s dkB/s areq-sz aqu-sz await %util DEV
16:50:17 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda
16:50:17 tps rkB/s wkB/s dkB/s areq-sz aqu-sz await %util DEV
16:50:18 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda
16:50:18 tps rkB/s wkB/s dkB/s areq-sz aqu-sz await %util DEV
16:50:19 2.00 0.00 12.00 0.00 6.00 0.00 0.50 0.20 sda
16:50:19 tps rkB/s wkB/s dkB/s areq-sz aqu-sz await %util DEV
16:50:20 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 sda
Среднее: tps rkB/s wkB/s dkB/s areq-sz aqu-sz await %util DEV
Среднее: 4.30 3383.20 3.60 0.00 787.63 0.00 0.91 0.22 sda
sar -p -u 1 10
Linux 5.14.0-80.el9.x86_64 (logger) 30/04/22 _x86_64_ (3 CPU)
16:50:26 CPU %user %nice %system %iowait %steal %idle
16:50:27 all 60.20 0.00 0.99 0.00 0.00 38.82
16:50:28 all 61.54 0.00 0.67 0.00 0.00 37.79
16:50:29 all 60.87 0.00 0.33 0.00 0.00 38.80
16:50:30 all 59.26 0.00 1.01 0.00 0.00 39.73
16:50:31 all 60.20 0.00 1.00 0.00 0.00 38.80
16:50:32 all 62.79 0.00 0.00 0.00 0.00 37.21
16:50:33 all 63.46 0.00 1.00 0.00 0.00 35.55
16:50:34 all 64.88 0.00 0.67 0.00 0.00 34.45
16:50:35 all 63.04 0.00 0.66 0.00 0.00 36.30
16:50:36 all 62.88 0.00 0.33 0.00 0.00 36.79
Среднее: all 61.91 0.00 0.67 0.00 0.00 37.42
ИЗМЕНЕНИЕ Я нашел этот документ: https://documentation.help/7-Zip/method.htm
и там говорится: “Сжатие LZMA использует только 2 потока.” что объясняет наблюдаемое мной на CentOS. Но на Windows оно использует 24 потока с LZMA… Почему?
Загадка разгадана: 7za a -mx=9 -mmt=4
– обратите внимание на 4 потока, хотя у ВМ только 3 vCPU.
Теперь используется 100% ЦПУ.
Помог автору 7z: https://sourceforge.net/p/p7zip/discussion/383043/thread/15831e05/#576a/740e/7944
Ответ или решение
Ваша проблема с недостаточной загрузкой CPU при использовании 7z для сжатия файлов на CentOS 9 была эффективно решена с помощью настройки параметров командной строки.
Исходная команда, которую вы использовали:
7za a -mx=9 -mmt=3 ...
устанавливает уровень сжатия до максимума (-mx=9
) и ограничивает использование потоков до 3 (-mmt=3
). Однако, как вы правильно заметили и подтвердили документом, 7-Zip использует только два потока для метода сжатия LZMA. Эта настройка была причиной того, что CPU использовался не на полную мощность и оставался на уровне около 61%.
Решение заключалось в изменении команды сжатия на следующую:
7za a -mx=9 -mmt=4 ...
Здесь -mmt=4
указывает использовать 4 потока. Хотя ваша виртуальная машина имеет 3 виртуальных процессора, система может эффективно распределить нагрузку по потокам, что позволило CPU работать на пределе своих возможностей, и в результате вы достигли 100% загрузки CPU.
Если вы хотите поэкспериментировать с производительностью в будущем или столкнетесь с подобными проблемами, вы можете использовать несколько команд для диагностики, например:
-
sar для мониторинга использования ресурсов системы:
sar -p -u 1 10
Это поможет вам собрать данные о загрузке CPU, памяти и диска в реальном времени.
-
top или htop для более интерактивного отображения текущей загрузки системы и процессов.
Если есть необходимость, вы можете продолжить экспериментировать с разными параметрами сжатия, чтобы найти оптимальный баланс между скорость выполнения и размером итогового файла. Однако, помните, что некоторые комбинации параметров могут не поддерживаться, так что всегда проверяйте документацию для получения актуальной информации.
Если возникнут дополнительные вопросы или понадобятся рекомендации по оптимизации, не hesitate to ask!