Настройка узких мест тестирования производительности приложений Java
Настройка узких мест тестирования производительности приложений Java

Введение: Настройка узких мест производительности

При реальном тестировании производительности вы столкнетесь с различными проблемами, такими как неспособность TPS повысить давление и т. д. Существует множество причин этого явления. Тестировщикам следует сотрудничать с разработчиками, чтобы как можно скорее проанализировать и обнаружить узкое место.

Идеальный результат показателя теста производительности может быть не очень высоким, но он должен быть умеренным.

Этапы настройки производительности

  1. Определите проблему: на основе мониторинга производительности на основе данных и анализа производительности результатов.,Определить результативность существованияиз задачи.
  2. Определить причину: После выявления проблемы,анализировать вопрос,Выясните причину проблемы.
  3. Подтвердите решение (измените конфигурацию параметров сервера/добавьте конфигурацию аппаратных ресурсов/измените код).
  4. проверятьрешение,анализировать результаты настройки.

Примечание. Настройка теста производительности — это не одноразовый процесс. Для одной и той же проблемы с производительностью может потребоваться выполнить описанные выше шаги несколько циклов, чтобы окончательно достичь цели настройки производительности, то есть тестирования для обнаружения проблем. -> Найдите причину -> Корректирование -> проверять -> анализировать -> Проверьте еще раз ...

Распределение вероятностей узких мест производительности

60%:база данныхузкое место

  • база данныхсервер CPU использовать Высокая ставка(медленный запрос、Слишком много SQL、Количество соединенийизлишний)
  • Бросать Количество Слишком много соединений (настройка пула соединений слишком мала, что приведет к к Очередь подключения)
  • база данныхказаться мертвым Замок

25 %: узкие места приложений.

  • появляется приложение Память слито
  • приложение Нить гонки/смерти Замок
  • Алгоритмическая сложность программного кода
  • Исключения произошли в промежуточном программном обеспечении и стороннем приложении.
  • Вызвано вычислительно интенсивными задачами CPU нагрузкавысокий
  • I/O вызванные интенсивными задачами I/O нагрузкавысокий

10 %: узкие места в средствах измерения давления.

  • JMeter Возможности одной машины ограничены. Если количество пользовательских запросов, которые необходимо смоделировать, превысит предел, она также потерпит неудачу. к TPS Не могу нажать на него

5%: машина с Linux ненормальна.

  • Доступен Linux Память не подлежит переработке (накладная ставка больше, чем ставка на утилизацию)

Системные ресурсы

  • CPU
    • Содержание мониторинга: ЦП Использование, ЦП Тип использования (пользовательский процесс, процесс ядра)
    • узкое местоанализировать:CPUУже заполнено(около 100%), нужно посмотреть, соответствует ли момент появления поворотной точки других индикаторов CPU Момент полного давления в принципе тот же.
  • Память
    • Контент мониторинга: актуальный Память、виртуальный Память
    • узкое местоанализировать:Памятькогда недостаточно,Операционная система будет использовать виртуальную Память,из виртуальной Памяти прочитать данные,Влияет на скорость обработки.
  • Дисковый ввод-вывод
    • Содержание мониторинга: ввод-вывод скорость、дискждатьочередь
    • узкое местоанализировать:Дисковый ввод-вывод При возникновении узкого места диск ввода-вывода занят, что приводит к к Когда транзакция исполнена, существует I/O Жду повсюду.
  • сеть
    • Содержание мониторинга: сетьпоток (скорость использования пропускной способности)、сеть Статус подключения
    • Узкое место анализировать: нравиться Если интерфейс проходит из-за того, что пакеты данных слишком велики,Превышение пропускной способности и пропускной способности,Вызовет конкуренцию за ресурсы, привести к TPS Не могу подняться.

После обнаружения узкого места вам останется только назначить правильное лекарство. Проще говоря, независимо от того, где возникает узкое место, вам нужно только снизить нагрузку или увеличить ресурсы узкого места (после того, как в прикладном программном обеспечении нет узких мест или места для оптимизации), симптомы можно облегчить.

  • Узкое место ЦП: увеличьте ресурсы ЦП.
  • Память Узкое место: увеличение Память、свободный кэш。
  • Дисковый ввод-вывод Узкое место: замена на более производительный издиск (нравиться твердотельный накопитель). SSD)。
  • Узкое место в пропускной способности сети; увеличение пропускной способности сети.

CPU

Все инструкции и обработка данных фоновых служб выполняются ЦП, а загрузка ЦП службой играет решающую роль в производительности службы.

Подробное объяснение основных параметров

Ниже используется пример вывода команды top для объяснения основных показателей ЦП:

  • us (user): время, затраченное на запуск (не Корректирование приоритета из) пользовательского процесса. CPU Процент времени.
    • картина shell Программы, различные языки из компиляторов, базы данныхприложение、web Приложение «Сервер и различные рабочие столы» считается работающим существующим пользовательским адресным пространством и зпроцессом.
    • Этих программ нет в idle статус, то подавляющее большинство CPU Время идет существующего пользовательского режима.
  • sy(система): потребляется при запуске процесса ядра CPU Процент времени.
    • Все процессы должны быть завершены ресурсы состоят из Linux Обработка ядра из. Когда процессу в пользовательском режиме (пользовательском адресном пространстве) требуются системные ресурсы, ему необходимо выделить некоторые ресурсы для выполнения. I/O действовать、Сноваилиэто создатьодиндочерний процесс,В это время он войдет в состояние ядра (адресное пространство ядра) и запустится. фактически,Чтобы определить, будет ли процесс существовать в следующий момент, запущен, планировщик процессов запускает состояние ядра.
    • для операционной системы из дизайна говоря,Время, затрачиваемое в состоянии ядра, должно быть как можно меньшим. Обычно высокий коэффициент sy означает, что тестируемая служба часто переключается между пользовательским режимом и системным режимом.,В это время общая производительность системы в определенной степени снизится.
    • существуют На практике наблюдается типичная ситуация, когда sy Стань больше, это много I/O Операция, следовательно, существование расследование I/O Когда дело доходит до связанных вопросов, вам нужно сосредоточиться на на это.
    • Используется большинством серверных служб. CPU временной интервал us и sy Заполняемость самая высокая. В то же время эти два показателя влияют друг на друга, мы Процент слишком высок, си. коэффициент низкий, и наоборот.
    • кроме того,существоватьиспользоватьмногоядерный CPU На сервере процессор 0 Ответственный CPU Планирование между ядрами, ЦП 0 начальствоизиспользовать Ставка Проходитьвысокийвстречапривести Другие CPU Эффективность планирования между ядрами становится низкой. Поэтому необходимо сосредоточить внимание на процессе тестирования. на CPU 0。
  • ni(niced): процент процессорного времени пользовательского режима, выделенного процессу, используемому в качестве приятного веса.
    • каждый Linux Процессы имеют приоритет, а процессы с более высоким приоритетом имеют право выполняться первыми. Это называется. при. Помимо приоритета, процесс также имеет значение коррекции приоритета. Это значение коррекции называется процессом nice ценить.
    • показано здесь ni выражать Корректирование Проходить nice стоимость, потребляемая процессом CPU время. нравиться Если в системе нет процесса, пройденного Корректирование nice значение, тогда ni Просто покажи для 0。
    • В общем, тестируемый сервис и сервер в целом ni Во время теста значение будет не очень хорошим. ni Значение относительно велико и требует наличия сервера Linux Проверьте конфигурацию системы и рабочие параметры тестируемой службы Проверить. причину。
  • id(idle): процент простоя процессорного времени.
    • Обычно, us + ni + id должно быть близко 100%。
    • Во время работы онлайн-сервисов необходимо сохранять определенную избыточность идентификаторов, чтобы справиться с внезапными скачками трафика.
    • существуют во время тестирования производительности,нравитьсяфрукты id Она очень низкая, и пропускная способность не может увеличиться. Вам необходимо проверить протестированную конфигурацию потока/процесса службы, конфигурацию системы сервера и т. д.
  • wa(ожидание ввода-вывода): процент времени, в течение которого ЦП ожидает завершения ввода-вывода.
    • и CPU из Скорость обработки по сравнению с Дисковым ввод-вывод Операция очень медленныйиз. Таких из операций много, чем нравиться: CPU После того, как существование начинает операцию чтения и записи одиндиска, требуется результат операции чтения и записи ожиданиядиска. существования диска Прежде чем операции чтения и записи будут завершены, ЦП Может находиться только в режиме ожидания.
    • Linux Когда система существует, вычисляет среднюю нагрузку системы CPU ждать I/O Время работы также рассчитывается, поэтому, когда мы видим, что средняя нагрузка системы слишком высока, мы можем пропустить wa Чтобы определить, не слишком ли много узких мест в производительности системы. I/O Операция вызывает из.
    • диск、сетьждать I/O действоватьвстречапривести к CPU из wa Индикатор показывает высокий уровень. Обычно сеть. I/O Занимайте wa Ресурсы будут не очень высокими, и потребуется частое чтение и запись. к wa всплеск.
    • нравиться Если тестируемая служба не является службой с интенсивным вводом-выводом, необходимо проверить объем журнала, частоту загрузки данных и т. д. тестируемой службы.
    • нравитьсяфрукты wa выше, чем 10% Система начинает тормозить, если выше; чем 20% Система вряд ли сможет двигаться, если выше; чем 50% Тогда очень вероятно, что диск неисправен.
  • hi: процент времени, затрачиваемый на жесткие прерывания.
  • si: Процент времени, затрачиваемый мягкими прерываниями.
    • Жесткое прерывание — это периферийная пара CPU изпрерывания, то есть периферийное оборудование отправляет CPU Асинхронный сигнал — это сигнал жесткого прерывания; мягкое прерывание отправляется самим программным обеспечением на сигнал прерывания ядра операционной системы.
    • Обычно обработчик аппаратных прерываний и планировщик процессов прерывают работу ядра операционной системы, что мы часто называем системным вызовом (System Call).
    • существования Во время теста производительности, привет Будет определенное количество CPU Заполняемость, но не слишком высокая. для I/O Интенсивное обслуживание, si из CPU Заполняемость будет выше.
  • st: время, в течение которого виртуальная машина ожидает ресурсов ЦП.
    • только Linux существованиедля среды выполнения виртуальной машины st Вот что имеет смысл. Это означает ожидание виртуальной машины CPU Ресурс времени (виртуальная машина выделена из виртуального ЦП, когда нужен реальный из CPU Когда это может быть правдой из CPU существуют просто для запуска других задач виртуальной машины, поэтому требуется ожидание).

Идеи анализа производительности

  • wa(IO подождите) значение слишком велико, что указывает на то, что жесткий диск существует. I/O узкое место.
  • Высокое значение id (бездействия) указывает на то, что процессор простаивает.
  • нравитьсяфрукты id Если значение высокое, но система реагирует на замедление, возможно, это CPU ждать выделяет Память В это время емкость Память должна быть увеличена.
  • нравитьсяфрукты id значение продолжает оставаться ниже, чем 10, то система из CPU Вычислительная мощность относительно невелика, и наиболее необходимые ресурсы в системе отображения CPU。

Тематическое исследование

Феномен: Us и sy процессора невысокие, но wa очень высокие.

нравитьсяфрукты Тестируемая услуга Дисковый ввод-вывод Интенсивные услуги, штат Вашингтон Высокий – это нормально. Но если бы не такая услуга, скорее всего, это привело бы к wa Есть две причины такого высокого уровня:

  • У сервиса проблемы с чтением и записью диска из бизнес-логики,Частота чтения и записи слишком высока,Объем записанных данных слишком велик,нравитьсяUnreasonableизстратегия загрузки данных, журнал Если вы подождете слишком долго, это будет возможно. Такая вот проблема.
  • Недостаточно сервера Память, сервис существует swap Разделы постоянно меняются местами.

LOAD

Под нагрузкой системы в Linux понимается среднее количество процессов в очереди выполнения в течение определенного интервала времени (одного цикла ЦП).

(Примечание: Linux в Load Он отражает общую нагрузку на систему, т.е. CPU нагрузка + дискнагрузка + сетьнагрузка + Остальная периферия не полностью эквивалентна CPU Скорость использования. В других системах, таких как Unix,Load Или это только представляет CPU сложный. )

определение отсервернагрузкаиз можно посмотреть,Оптимальное состояние работы сервера – все процессоры 1,То есть все активные процессы запущены,Никакого ожидания. В этом состоянии сервер работает ниже порога существованиянагрузки.

Обычно,По ценности опыта,серверизнагрузкадолжен быть на порогеиз 70–80 %, что позволяет не только задействовать большую часть производительности сервера, но и оставить определенную избыточность производительности, чтобы справиться с ростом трафика.

Просмотрите порог нагрузки системы по команде нравиться:


Linux Существует множество команд для просмотра системы. Наиболее часто используемые команды: top и uptime。

top и uptime Содержимое вывода для нагрузок одинаковое, оба они являются последними в системе. 1 минут, 5 минут, 15 минут после загрузки

Эти три значенияизиспользоватьметоди CPU Связано с аудитом, сначала подтвердите CPU Общее количество физических ядер:

  • /proc/cpuinfo в processors из Максимальное значение не обязательно CPU из ядерного числа, возможно, что CPU Поддерживает технологию Hyper-Threading, таким образом processors Ядерный номер физика 2 раз.
  • Здесь нам нужно точное число ядер, конкретный метод: найти /proc/cpuinfo Все файлы в файле physical id После значения из получается максимальное значение из, а после прибавления единицы - фактическое из. CPU число. Тогда найди любого processors Внизиз cpu ядра, то есть ядро CPU из Основное количество, фактическое CPU Число, умноженное на количество ядер, равно для CPU изфизика общее количество ядер.

Пример:

Язык кода:javascript
копировать
[root@localhost home]# cat /proc/cpuinfo |grep "physical id"
physical id     : 0
physical id     : 0
[root@localhost home]# cat /proc/cpuinfo |grep "cpu cores"
cpu cores       : 2
cpu cores       : 2

Количество физических процессоров равно 0+1=1, а количество ядер каждого процессора равно 2, поэтому общее количество физических ядер равно 2x1=2.

Результаты расчетов показывают, что количество процессов, которые машина может обработать в единицу времени, равно 2. Если количество процессов в единицу времени превысит 2, произойдет перегрузка, и нагрузка будет продолжать увеличиваться, когда она увеличится до определенного уровня. , произойдет сбой системы и другие нештатные ситуации.


существуют во время тестирования производительности,системанагрузкасостоит в том, чтобы оценить всюсистема Здоровье – самое важноеиз Один из показателей。Обычно:

  • При тестировании нагрузки: системная нагрузка должна приближаться к пороговому значению ценить, но не превышать его.
  • При параллельном тестировании: система не может превысить максимальный порог в 80%.
  • Во время теста стабильности: система должна достичь порога в 50%.

Машинное реагирование на чрезвычайные ситуации

  • нравитьсяфрукты 1 минута load Очень высокий, 5 минута load Высшая, 15 минута load Если колебания невелики, это означает, что ток высокий load для чрезвычайных ситуаций можно терпеть.
  • нравитьсяфруктывысокий load продолжение,привести к 5 минутаи 15 минута load Они превысили значение сигнала тревоги, и в настоящее время необходимо рассмотреть возможность обработки.
  • нравитьсяфрукты 15 минута load выше, чем 1 минута нагрузка, что указывает на высокую load Ситуация облегчилась.

Память

Основная цель мониторинга производительности во время теста производительности — проверить колебания использования тестируемой службы.

Подробное объяснение основных параметров

существовать Linux В системе есть несколько команд, которые могут получить статус определенного процесса. Наиболее часто используемая из них — . top команду, как показано на рисунке ниже:

  • VIRT: общее количество виртуальных объектов, созданных процессом. Он включает в себя все коды,Данные и общая библиотека,Плюс страница была заменена.,Все подали заявки на общую площадь Память.
  • RES: Процесс не меняет местами、куча)。Применять Память Пришло время позже Память Сегмент переназначенценить.
  • SHR: Общее количество процессов, использующих общий Памятьиз. Это значение только отражает то, что из Память может использоваться совместно с другими процессами, и не означает, что это Память в настоящее время используется другими процессами.
  • SWAP: Процесс использования виртуальной памяти был заменен по размеру. Запрошен обмен из, но нет свободного места (включая стек).、куча、общий Память)。
  • ДАННЫЕ: Общий объем процесса, за исключением исполняемого кода.,то есть стек процессов、куча Применятьизобщая площадь。

Как видно из приведенного выше пояснения, основной мониторинг во время процесса тестирования RES и VIRT。Для Использование имеет общий сервис многопроцессной архитектуры Памятьиз и требует мониторинга. SHR。

free Подробное объяснение параметров

free Команда отображает систему Памятьизиспользовать, включая физика Память, подкачку Память (swap) и буфер ядра Память. нравиться фрукты плюс -h вариант (управление единицами отображения), результаты вывода будут намного удобнее:

Иногда нам нужно продолжать наблюдать за ситуацией, в это время мы можем использовать -s и укажите количество секунд для интервала: например. free -h -s 3 означает каждый 3 Ситуация Памятьизиспользовать выводится раз в секунду до нажатия ctrl + c。

  • Mem ХОРОШО:физика Памятьизиспользовать Состояние。
  • Строка подкачки: использование пространства подкачки.
    • swap space Это область на диске, которая может представлять собой один раздел или один файл, поэтому конкретная реализация может быть swap Перегородки также могут быть swap документ. Когда системе физика Память тесно, Linux Редко используемые данные в Память будут сохранены в swap включено, чтобы в системе было больше изфизика Памятьдля различных технологических служб и когда системе необходим доступ swap При хранении контента на swap Верхние данные загружаются в Память, что часто называют swap out и swap in.
    • Замена места может в определенной степени облегчить проблему нехватки места.,Но ему нужно читать и записывать данные диска.,Так что производительность не очень хорошая. Поэтому при запуске пространства подкачки используйте.,нопоказывать Память Серьезно неадекватно。
    • нравиться фруктовая система Память достаточна или представляет собой машину для стресс-тестирования производительности, которую можно использовать swapoff -a Закрыть пространство подкачки, или существовать /etc/sysctl.conf Установить в файл swappiness ценить.нравитьсяфруктысистема Память Не излишек,Вам необходимо установить размер области подкачки в соответствии с размером физика Памятьиз.,В Интернете можно найти огромное количество информации о конкретных стратегиях.
  • Столбец «Всего»: общий объем доступного пространства подкачки в системе.
  • Используемый столбец: размер использованного пространства подкачки.
  • Столбец «Свободно»: сколько места подкачки доступно (количество мест подкачки, которые еще не использовались)
    • существуют при условии фиксированной пропускной способности,нравитьсяфрукты Памятьпродолжениеначальство涨,Тогда весьма вероятно, что тестируемый сервис явно имеет утечку.,нуждатьсяиспользовать valgrind Подождите, пока инструмент проверки Память выполнит позиционирование.
  • shared Столбец: пообщийиспользоватьизфизика Памятьразмер。
  • buffer/cache Столбец: по buffer и cache использовать Понятноизфизика Памятьразмер。
    • Linux Чтобы повысить производительность работы с диском, ядро ​​будет использовать часть неактивной Памяти для кэширования данных диска, то есть buffer и cache。
    • нравиться фруктам, выделив достаточно Память всем приложение,физика Память Осталось еще,linux Мы постараемся использовать эти неиспользуемые Память повторно, чтобы улучшить общее состояние. I/O Эффективность, метод состоит в том, чтобы разделить эту оставшуюся часть на cache и buffer Используйте обе части.
    • так,Не так много свободного времени,Это не обязательно означает, что система работает плохо.,Потому что часть кеша и буфера для Памятьиз можно использовать повторно в любое время.,существовать в некотором смысле,Две части Память также можно рассматривать как дополнительную часть праздного Память.
  • Доступные столбцы: Также доступны по приложению программыиспользоватьизфизика Память размера.
    • отприложение программы в перспективе,доступный = свободно + буфер + кеш. пожалуйста, обрати внимание,Это просто идеальный способ расчета,Фактические данные часто содержат большие ошибки.

Бесплатный кэш Память

Способ 1:Руководство Бесплатный кэш Память

Язык кода:javascript
копировать
snyc
echo 3 > /proc/sys/vm/drop_caches
free -m

Способ 2. Измените конфигурацию Linux для автоматического выпуска.

Язык кода:javascript
копировать
/proc/sys/vm/drop_caches Это значение 0 изменятьдля 1

Дисковый ввод-вывод

Если во время теста производительности тестируемая служба слишком часто читает и записывает на диск, большое количество запросов будет обработано. I/O статус ожидания,Система поднята,Время ответа становится больше,Пропускная способность снижается.

iostat Подробное объяснение параметров

Вы можете использовать команду iostat для мониторинга состояния диска в Linux.

iostat -d 2 10 означает подсчет базовых данных каждые 2 секунды 10 раз:

  • tps: количество передач устройства в секунду. «Передача» означает «однажды I/O Запрос. Несколько логических запросов могут быть объединены одновременно. I/O Запрос». Размер запроса «одна передача» неизвестен.
  • kB_read/s: объем данных, прочитанных устройством (выраженный диском) в секунду, единица измерения в килобайтах.
  • kB_wrtn/s: объем данных, записываемых на устройство (выраженный на диске) в секунду, в килобайтах.
  • kB_read: Общий объем прочитанных данных, единица измерения: килобайты.
  • kB_wrtn: Общий объем записанных данных, единица измерения в килобайтах.

Из вывода iostat -d вы можете получить самые основные статистические данные о работе системы. Но для тестирования производительности эти данные не могут предоставить больше информации. Необходимо добавить параметр -x.

iostat -x Подробное объяснение параметров

Например, iostat -x 2 10 означает подсчет более подробных данных каждые 2 секунды 10 раз:

  • rrqm/s: сколько запросов на чтение, связанных с этим устройством, было объединено в секунду.
    • Когда системному вызову необходимо прочитать данные, VFS Отправляйте запросы каждому FS,нравитьсяфрукты FS Обнаружено, что разные запросы на чтение одинаковы Block изданные, ФС Этот запрос будет объединен Merge。
  • wrqm/s: Сколько запросов на запись, связанных с этим устройством, было объединено в секунду.
  • await: среднее время обработки каждого запроса ввода-вывода (единица измерения: миллисекунды).
    • await Размер обычно зависит от времени обслуживания (svtcm) и I/O Длина очереди I/O Запрос из режима выдачи. гипотеза svtcm относительно близко жду, описание I/O Почти нет времени на ожидание.
    • гипотеза await гораздо больше,чем svctm(нравитьсябольше, чем 5), необходимо учитывать I/O Есть узкое место в давлении, объясните. I/O Очередь слишком длинная,Приложение получено из-за того, что время ответа изменилось на медленный. Время отклика гипотезы превышает допустимое пользователем.,В это время можно рассмотреть возможность более быстрой замены издиска.
  • svctm: среднее время обслуживания ввода-вывода.
  • %util: какой процент статистического времени был использован I/O действовать.
    • примернравиться,нравитьсяфрукты Интервал статистики 1 секунд, устройство имеет 0.8 Второйсуществоватьиметь дело с ввод/вывод 0.2 секунд простоя, затем устройство выключается %util = 0.8/1 = 80%, этот параметр показывает, насколько занято устройство.
    • %util Близко к 100% показывать I/O Слишком много запросов, ввод-вывод Система занята, возможно, на диске хранилось существующееузкое место.
Язык кода:javascript
копировать
iostat -x Полные параметры нравиться ниже:

- rrqm/s: в секунду merge из Количество операций чтения. Прямо сейчас delta(rerge)/s 
- wrqm/s: в секунду merge из Количество операций записи. Прямо сейчас delta(wmerge)/s 
- t/s: Завершенных операций чтения в секунду I/O Время устройства. Прямо сейчас delta(rioVs 
- w/s: Завершено записей в секунду 1/O Время устройства. Прямо сейчас delta(wio)/s 
- rsec/s: Количество секторов, считываемых в секунду. Прямо сейчас delta(rsect)/s 
- ws0c/s: Количество секторов, записываемых в секунду. Прямо сейчас deita(wsect)/s 
- rkB/s: Чтение в секунду K Количество байтов. да rsect/s из Половина размера каждого сектора из-за 512 байт. (нужно посчитать Посчитать) 
- wkB/s: писать в секунду K Количество байтов. да wsect/s из Половина. (нужно посчитать Посчитать) 
- avgrq+sz: в среднем на устройство I/O Операция Размер данных (секторов). дельта(rsect+wsect)/дельта(рио+вио) 
- avgqu-sz: Средняя длина очереди ввода-вывода, то есть delta(avea)/s/1000 (поскольку для aveq изединицадлямиллиметр Второй)。 
- await: в среднем на устройство I/O Время операции изждать (миллиметры Второй). Прямо сейчас delta(ruse+wuse)/delta(rio+wio) 
- svctm: в среднем на устройство I/O Время работы и время обслуживания (мм). Прямо сейчас delta(use)/delta(rio+wio) 
- %util: какой процент секунды используется для I/O Операция, или сказали сколько времени в одной секунде I/O Очередь непустая. Прямо сейчас delta(use)/s/1000(потому чтодля use изединицадлямиллиметр Второй)

сеть

Мониторинг сети при тестировании производительности в основном включает сетевойпоток、сетьсоединять Статус измонитор。

сетьпоток Мониторинг

Существует множество методов и множество сценариев оболочки в Интернете. Вы также можете использовать команду nethogs. Эта команда аналогична команде top и представляет собой интерактивную команду в реальном времени. Рабочий интерфейс выглядит следующим образом:

существовать За кулисамиТестирование производительности сервисасередина,для возврата текстовых результатовиз сервиса,и Нетнуждатьсяслишкомсосредоточиться аспект иметьпоток.


Понимание пропускной способности

Для некоторых конкретных приложений, таких как прямая трансляция или сетевой диск (загрузка и скачивание файлов), узкое место в полосе пропускания также является часто встречающимся сценарием.

Пропускная способность сервера делится на исходящую (исходящую) и нисходящую (входящую) пропускную способность (соответствует загрузке и выгрузке клиента соответственно).

  • Просмотр видео и новостей Используйте пропускную способность: клиент из загрузки、Пропускная способность восходящей линии связи на стороне сервера.
  • Сервер получает клиентские данные. Используйте пропускную способность: клиент из загрузок.、Пропускная способность нисходящей линии связи на стороне сервера.

Веб-сервер, такой как различные новостные веб-сайты, обычно требует большей пропускной способности исходящей (исходящей) стороны сервера, в то время как почтовые серверы, серверы сетевых дисков и т. д. обычно требуют большей пропускной способности исходящей (входящей) стороны сервера;

Понимание пропускной способностиставкачиновник

  • 1 Mb/s Скорость полосы пропусканиядля 128 KB/s(1024Kb / 8KB)
  • 100 Mb/s Скорость полосы пропусканиядля 12.5 Мбит/с (учитывая потери в сети, обычно 10M/s или 1280KB/s Посчитать)

Пример:5000 Сделайте снимок на мегапиксельный мобильный телефон, размер фотографии примерно 20MB,существовать Внизпропускная способность Внизнуждатьсякропотливый:

  • Пропускная способность 10M занимает около 20 секунд: потребление времени = трафик / скорость = 20 МБ / (10 МБ/8) = 20 / 1,25 = 16 секунд (20 секунд исходя из скорости 1 МБ/с = 128 КБ/с).
  • Пропускная способность 100 МБ занимает около 2 секунд: потребление времени = трафик / скорость = 20 МБ / (100 МБ/8) = 20 / 12,5 = 1,6 секунды (2 секунды исходя из скорости 10 МБ/с = 128 КБ/с).
  • Пропускная способность 1000M составляет около 0,2 секунды: потребление времени = трафик/скорость = 20 МБ/(1000 МБ/8) = 20/125 = 0,16 секунды (0,2 секунды исходя из скорости 100 МБ/с = 128 КБ/с)

Тематическое исследование

Феномен:отмонитор Это видно из графика,В настоящее время иссетпоток в основном занимает пропускную способность сети.,потому чтоэтотсетьжитьсуществоватьузкое место.

Решение:

  • Аппаратное решение: увеличить пропускную способность (пропускная способность стоит дешево).
  • Программное решение: анализировать соответствует бизнес-операциям и можно ли оптимизировать передачу данных, можно ли передавать их асинхронно;

сеть Статус подключениямонитор

Тестирование производительностисерединаверносетьизмонитор В основноммониторсетьсоединять Статус изизменятьианомальный。

  • Для использования TCP Протокола сервиса необходимо отслеживать изменения в установленном соединении сервиса (т.е. ESTABLISHED Статус из TCP соединять).
  • для HTTP Протокол из сервиса, необходимо следить за процессом, иссеять буфер из статуса и TIME_WAIT, соответствующий тестируемому сервису. Статус из Количество соединенийждать。

Многие команды, поставляемые с Linux, такие как netstat и ss, поддерживают вышеуказанные функции.

На следующем рисунке показан результат мониторинга netstat для указанного pid-процесса:

Полный вывод команды:

база данных

медленный запрос

Точнее медленно SQL анализировать оптимизацию, пожалуйста, обратитесь к «MySQL медленный SQL & План оптимизации».

нравиться MySQL Если есть узкое место в ресурсах, сначала найдите медленный запрос (превышено пользовательское пороговое время выполнения из SQL)。

1) Пройти SQL Заявление находится по адресу медленный Запросите журнал из существующего каталога, а затем просмотрите журнал.

Язык кода:javascript
копировать
show variables like "slow%";

2)медленный Журнал запроса записывается после завершения запроса, поэтому существование приложения отражает проблемы с эффективностью выполнения, медленный запрос Запрос журнала не может обнаружить проблему. В это время вы можете показать команда Processlist для просмотра текущего MySQL Положительное существование из статуса темы можно просмотреть в режиме реального времени. SQL статус реализации.

Пример:

Язык кода:javascript
копировать
mysql -uroot -p123456 -h127.0.0.1 -p3307 -e "show full processlist" |grep dbname |grep -v NULL

3)оказатьсямедленный запрос SQL Затем вы можете использовать план выполнения (объяснение) для проведения анализа (или обратной связи с DBA и обработка разработки). Рекомендуемый самый простой метод устранения неполадок заключается в следующем:

  1. анализировать SQL загружает ненужные поля/данные.
  2. анализировать SQL Поражен ли индекс.
  3. нравитьсяфрукты SQL Очень сложный, оптимизация SQL структура.
  4. нравиться Если объем данных в таблице слишком велик, рассмотрите подтаблицы.
  5. ……

Количество соединений

база данныхсоединятьбассейнизиспользовать Ставка

  • 当база Когда пул соединений данных заполнится, появятся новые. SQL Выполняемые операторы могут быть поставлены в очередь только в режиме ожидания, пул соединений ожидания в соединении освобожден (ждать из SQL выполнение оператора завершено).
  • нравиться фруктовый мониторинг найденная база данныхсоединятьбассейнизиспользовать Ставка Проходитьвысокий,Даже бывают частые очереди,Его необходимо настроить.

Посмотреть/установить максимальное количество соединений

Язык кода:javascript
копировать
-- Посмотреть наибольшее количество соединений

-- Посмотреть наибольшее количество соединений
mysql> show variables like '%max_connection%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| extra_max_connections |       |
| max_connections       | 2512  |
+-----------------------+-------+
2 rows in set (0.00 sec)

-- Сбросить максимальное количество соединений
set global max_connections=1000;

существовать/etc/my.cnf База внутренних настроек данныхизмаксимум Количество соединений

Язык кода:javascript
копировать
[mysqld]
max_connections = 1000

Посмотреть текущий Количество соединений

Язык кода:javascript
копировать
mysql> show status like  'Threads%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_cached    | 32    |
| Threads_connected | 10    |
| Threads_created   | 50    |
| Threads_rejected  | 0     |
| Threads_running   | 1     |
+-------------------+-------+
5 rows in set (0.00 sec)
  • Threads_connected: указывает текущее количество соединений。и show processlist Результат тот же. Если быть точным, Threads_running Представляет собой текущий номер параллелизма.
  • Threads_running: указывает на активацию из Количества соединения. Обычно значительно ниже, чем connected числоценить.
  • Threads_created:выражатьсоздавать Проходитьиз Количество потоков。
    • нравитьсяфруктынассуществовать MySQL Конфигурация сервера Установить в файл Понятно thread_cache_size,Затем, когда клиент отключается,Серверный поток, обрабатывающий этого клиента, будет кэширован для ответа следующему клиенту, а не уничтожен (при условии, что количество кэшей не достигнет верхнего предела).
    • нравитьсяфрукты Обнаружить Threads_created Это слишком многого стоит, покажи MySQL Сервер продолжает создавать потоки, которые потребляют больше ресурсов, поэтому вы можете соответствующим образом добавить их в файл конфигурации. thread_cache_size ценить.

Запросить значение сервера thread_cache_size

Язык кода:javascript
копировать
mysql> show variables like 'thread_cache_size';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| thread_cache_size | 100   |
+-------------------+-------+
1 row in set (0.00 sec)

Замок

Подробности см. в разделе «MySQL». дела и Замок》。

Скорость попадания в кэш

  1. Обычно SQL Запрос отдисквбаза Считайте данные из файла данных.
  2. Если определенный SQL Оператор запроса был выполнен ранее, затем SQL Результаты операторов и запросов будут кэшироваться, и в следующий раз будет выполнен тот же запрос. SQL заявление, это будет прямо отбаза данные считываются из кэша. (Обратите внимание, что MySQL 8 Функция кэширования запросов устарела. )

точка мониторинга

  • Во время ведения бизнеса SQL Запроссвоевременный Скорость попадания в кэш (доля количества чтений оператора запроса из кэша к общему количеству запросов).
  • нравитьсяфрукты Скорость попадания в кэш слишком мал, соответствующий код необходимо оптимизировать SQL Операторы запроса для улучшения скорости попадания в кэш。

Тематическое исследование

Результаты теста анализировать

Вывод: Судя по текущим результатам тестирования (показаны на рисунке ниже), имеются проблемы с производительностью.

Феномен: количество параллелизма достигает 50 своевременный TPS для 52. В настоящее время, хотя время ответа для 4,4 с (меньше требуемого 5с), но база данныхсервериз CPU Уровень использования очень высок (близок к 100%), поэтому фокус нужен фокус набаза данныхиз Тюнинганализировать。

Процесс устранения неполадок

  1. Используйте команду top, чтобы увидеть и определить, вызвано ли это mysqld или другими причинами.
    • CPU Разделено по пользователям CPU и ядро ПРОЦЕССОР. По другим показателям ресурса установлено, что отклонений в таких показателях, как Память, дискIO и сеть, нет, поэтому судят, что это не ядро. CPU заниматьвысокий,основная причинапотому что Это пользовательский процесс Занимайте CPU высокий.
    • подтвердить текущий CPU Высокая заполняемость mysqld процесс.
  2. анализироватьбаза данныхсервер CPU высокийизможет быть оригиналпотому что:медленный SQL、SQL Слишком много предложений, Количество соединенийизлишнийждать。
    • использоватьshow full список процессов просмотреть текущую базу данныхсерединатолькосуществоватьосуществлятьиз SQL Заявление и пул соединений и статус, большое количество SQL существоватьждатьосуществлять。
    • Затем объедините рабочий процесс и системный журнал, чтобы провести анализ.,Я обнаружил это каждый раз, когда захожу на главную страницу торгового центра.,Сразунуждатьсясуществоватьбаза Выполнено в данных 19 запрос SQL。
    • Проверятьмедленный запросить журнал, чтобы узнать, есть ли показатели больше ожидаемых SQL заявление,ианализировать Поиск неисправностей:взгляниосуществлять План точен?、Индекс отсутствует?、Является ли объем данных слишком большим и т. д.
    • текущее делопримерчерез Проходитьмедленный запросбревноизанализировать,еще нетжитьсуществоватьмедленный запрос。
    • Подтвердите,житьсуществоватьмедленный SQL:
    • Подтвердите, SQL Слишком много предложений или Количество соединенийизлишний:

решение

  • Аппаратное решение: увеличить процессор.
  • Программное решение: для уменьшения единовременной чрезмерной нагрузки SQL,Можно рассмотреть загрузку пакетно и асинхронно (где это отображать),Просто запросите местоположение из данных).

JAVA-приложения

JVM

Введение в JVM

JVM (виртуальная машина JAVA): виртуальное пространство, специально используемое для запуска программ JAVA.


JVM Память

В центре внимания: область кучи (динамические изменения).

всеизобъектсуществовать初始化都встреча Применятькучаокругизкосмос,Мориться Если вы подали заявку на из космоса существоватьиспользовать и нет времени отпустить ее после окончания,Тогда место будет занято.,Это утечка Память.

указать на мониторинг: когда тест проводится,нуждатьсясосредоточиться накучаокругизкосмослипродолжениеначальство Поднимать而没有Внизуронить。


Тематическое исследование

Феномен:куча Памятьиспользоватьдапродолжение Подниматьвысокий,Его невозможно снизить до прежнего уровня.

решение:оказаться Памятьутечкаизкод,и оптимизировать код.

Механизм сбора мусора

что такое Механизм сбора мусора

  • Под переработкой мусора подразумевается переработка поданной и завершенной площади в Память.,Доступно для новых приложений.
  • Механизм сбора мусора Все направлено накучаокругиз Памятьруководитьиз。

точка мониторинга

  • Когда система существует, занимается сборкой мусора,Невозможно справиться с каким-либо пользовательским бизнесом. нравиться, если сбор мусора происходит слишком часто,привести Возможности системы по обработке бизнес-данных снизились.
  • потому что Full GC Память относительно велика, а время сбора мусора относительно велико, поэтому бизнес не может быть обработан в течение этого периода, что оказывает большее влияние на систему, поэтому нам нужно сосредоточиться наFull GC частота.

Механизм сбора мусораиз Выполнить шагинравиться Вниз:

  1. При запуске новой программы вам необходимо сначала подать заявку на получение места Память.,Молодое поколение подаст заявку в первую очередь.
  2. Когда молодое поколение заполнится, Young GC будет использоваться для сбора мусора.
  3. Проверяйте молодое поколение при переработке в Память,И существоватьиспользовать ли. Оставшаяся часть будет перенесена в зону выживания 2, другая часть будет освобождена.,В это время молодое поколение Память очищает пространство.
  4. Новая программа реализуется для подачи заявки на место «Память», а затем на нее подает заявку молодое поколение.
  5. Когда молодое поколение снова насытится, будет произведен сбор мусора. GC。возвращатьсясуществоватьиспользоватьиз Памятьсдвигжитьродитьжитьокруг 1 , и поместите зону выживания 2 в Память также сохраняются в зоне выживания. 1 середина. В это время будет расчищена территория молодого поколения и выживания. 2。
  6. Повторите шаги 1–5, описанные выше.
  7. Мориться Если часть Памятьсуществовать выживет в течение длительного времени (Памятьсуществовать передвигалась около 10 раз в зоне выживания), то эта часть Память будет отнесена к старому поколению.
  8. Прокрутите вышеизложенное 1-7 Шаги до тех пор, пока пространство старого поколения не будет полностью занято, после чего сбор мусора Полный GC。
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose