Практика стресс-тестирования производительности внутренних сервисов

контрольная работа

Автор: Ван Цинпей Данная статья является оригинальной, для перепечатки укажите автора и источник

содержание

  • задний план

  • экологическое испытание

    • Инспекция прессов и инструментов под давлением

    • Настройка лимита открытых файлов в Linux

    • Проверьте окружающие зависимости

    • Испытание на давление интерфейса воздуха

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

  • Методы стресс-тестирования и устранения неполадок производительности

    • Обратите внимание на каждый журнал широты

    • Общие команды Linux

    • Два способа устранения неполадок производительности (сверху вниз, снизу вверх)

  • Суммировать

задний план

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

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

С точки зрения всей отрасли, за исключением некоторых крупных производителей, полностью автоматизированных сред для стресс-тестирования производительности все еще относительно немного.CI\CD, Независимая и изолированная среда стресс-тестирования, автоматизированные инструменты стресс-тестирования, ежедневные оповещения о производительности стресс-тестирования, анализ отчетов о производительности, устранение неполадок / решение проблем с производительностью и т. д. Только таким образом можно нормализовать стресс-тест производительности.Если стресс-тест производительности не будет нормализован, возникнет проблема, связанная с отставанием конфигурации кода и промежуточного программного обеспечения от производственной среды. По прошествии длительного времени это эквивалентно перезапуску построения и устранения неполадок в среде стресс-тестирования.

Если среда для стресс-тестирования производительности полностью автоматизирована, то стресс-тестирование производительности может стать рутинной частью процесса НИОКР.Эффективность выполнения будет очень высока, а стресс-тестирование будет проще.Преимущества также вполне очевидны. .

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

Не по теме, если у вас есть автоматизированная среда стресс-тестирования, вам все равно нужно понимать базовую структуру всей среды стресс-тестирования, ведь среда стресс-тестирования — это не реальная производственная среда, и нам нужно знать, есть ли какие-то проблемы. нормальный или ненормальный.

экологическое испытание

Когда нам нужно провести стресс-тестирование производительности, первая проблема, с которой мы сталкиваемся, — это проблемы окружающей среды.Экологические проблемы включают в себя несколько общих моментов:

1. Проблема с машиной (физическая машина или виртуальная машина,CPU, память, пропускная способность сетевого адаптера импорта и экспорта, размер жесткого диска, ли жесткий дискSSD, базовая конфигурация параметров ядра)

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

3. Проблема промежуточного ПО (все ли зависимые промежуточные ПО в программе развернуты, инициализирована ли конфигурация промежуточного ПО, ПО промежуточного слояclusterКакова структура, тестировалось ли это промежуточное ПО на производительность и какова широта стресс-теста?benchmarkИли стресс-тест для конкретного бизнес-сценария)

Первое исследование этих экологических проблем будет немного утомительным, но после освоения некоторых методов, инструментов и процессов остальное будет рутинным, но с большим количеством ручного труда.

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

Более непонятна проблема промежуточного ПО.Вроде его можно использовать, но нельзя нажимать.В это время нужно самому провести простой тест давлением,типаdbодиночная вставка таблицы,cacheодновременных чтений,mqпосадочное письмо и т.д. На данный момент возникает проблема: вам необходимо иметь определенное глубокое понимание этого промежуточного программного обеспечения, и вам необходимо знать внутренний механизм работы, иначе будет очень сложно устранять неполадки в нештатных ситуациях.

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

Но на самом деле всегда есть люди, с которыми ты не знаком. В это время мы можем попросить всех обсудить друг с другом, а потом найти какую-то информацию самостоятельно. Мы никогда не сталкивались с ними, может быть, с ними сталкивались другие. на самом деле такой процесс.

Инспекция прессов и инструментов под давлением

Поскольку выполняется измерение давления производительности, необходимо сначала понять машину для измерения давления и инструменты для измерения давления.У нас в основном есть инструменты для измерения давления.locust,jmeter,ab, первые два в основном используются коллегами по испытанию давлением для приемочных испытаний.

Последние два в основном используются для самопроверки перед отправкой испытания под давлением, а также для самопроверки и устранения неполадок. Здесь необходимо подчеркнутьabПо сути, это эталонный тест, который отличается отjmeterэффект.

Необходимо знать, находится ли пресс-машина в том же сегменте сети, что и тестируемый сервер, и нет ли ограничений пропускной способности между сегментами сети. Есть ли узкое место в конфигурации инструмента измерения давления пресса, как правило, если даjmeterНужно проверитьjavaнекоторая базовая конфигурация.

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

использоватьjmeterВо время стресс-тестирования, если время стресс-тестирования слишком велико, не забудьте отключить его.Слушатель -> Графические результатыPanel, потому что, если время рендеринга слишком велико, оно в основном зависает, и ошибочно думают, что это будет проблема с памятью, но на самом деле это проблема рендеринга.

При разработке эталонного стресс-теста возникла проблема с пропускной способностью между офисной сетью и сетью сервера стресс-теста, чрезмерное давление приводило к проблемам в офисной сети. Таким образом, вам нужно поразить период времени.

После грубой разборки нам нужно использовать некоторые инструменты, чтобы проверить, нормальная ли базовая конфигурация. Например,ethtoolинформация о сетевом адаптере,nloadДорожная ситуация и т.д. Конечно, есть много других отличных инструментов для просмотра различных конфигураций, которые здесь не перечислены.

использоватьethtoolПеред просмотром информации о сетевых адаптерах необходимо определить, сколько сетевых адаптеров имеется на текущей машине.ifconfigНайдите сетевой адаптер, который вы используете.

исключать127.0.0.1В дополнение к адаптеру есть три информации об адаптере, только первыйbond0это то, что мы используем, затем используйтеethtoolПосмотреть текущийbond0подробная информация об адаптере. сконцентрируйсяspeedДомен, представляющий пропускную способность текущего сетевого адаптера.

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

Чтобы быть уверенным, что нет проблем с пропускной способностью сети, нам также нужен инструмент мониторинга сетевого трафика в реальном времени, здесь мы используемnloadДля мониторинга проблем потока импорта и экспорта.

Этот инструмент по-прежнему очень хорош, особенно в процессе измерения давления, вы можете наблюдать за импортом и экспортом трафика, особенно для проверки некоторого джиттера разрыва.

Если обнаружится, что импортный трафик был нормальным, а экспортный трафик упал, возможно, система может замедлить внешние вызовы, и это может быть нисходящий вызов.block,ноrequestПул потоков еще не заполнен, также возможно, что внутреннийasync,requestРезьба вообще не будет заполнена, или это может быть проблема с давлением самого инструмента для измерения давления и т. д. Но мы хотя бы знаем, что есть проблема с границей внешних вызовов нашей системы.

Настройка лимита открытых файлов в Linux

рабочая среда, как правилоlinuxНам не нужно устанавливать верхний предел количества дескрипторов открытых файлов.Эти инициализированные значения обычно устанавливаются коллегами по эксплуатации и обслуживанию и соответствуют унифицированному стандарту эксплуатации и обслуживания. Но иногда настройка максимального количества подключений зависит от сценария использования бэкенд-системы.

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

существуетLinuxгде все является файлом,socketЭто также файл, поэтому вам нужно проверить ограничения текущей машины на открытие дескриптора файла, см.ulimit -aизopen filesдомен, вы также можете просмотреть его напрямуюulimit -n.

Если вы считаете, что сконфигурированные параметры нуждаются в корректировке, вы можете отредактировать/etc/security/limits.confконфигурационный файл.

Проверьте окружающие зависимости

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

Есть также проблемы, похожие на промежуточное ПО, например, если мы полагаемся на промежуточное ПО.cache, Есть ли местныйcache, если есть, возможно промежуточное ПО для стресс-тестовой средыcacheЗависимость не большая. Если мы полагаемся на промежуточное ПОmq, можно ли разъединить пару в бизнесеmqзависимость, ведь все-таки мы не правыmqПроведите стресс-тест. И службы, от которых мы зависим, не заботятся о наших колебаниях стресса.

Разобравшись, лучше всего нарисовать эскиз, а затем повторноgit branch -bПеретяните тест на стресс производительностиbranchВыходите и корректируйте зависимости кода согласно скетчу. Затем во время стресс-теста наблюдайте за динамикой трафика и данных, соответствует ли она выбранному нами маршруту.

Испытание на давление интерфейса воздуха

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

Как правило, в любом бэкэнд-сервисе есть подобныеhealth_checkизendpoint, для удобства можно напрямую найти интерфейс без каких-либо нижестоящих зависимостей для опрессовки.Этот тип интерфейса в основном используется для проверки работоспособности сервераonline,offlineгосударство.

Если текущий сервис не имеет аналогаhealth_checkТакже можно создать новый пустой интерфейс, и практика показала, что такой интерфейс нужен сервису в производственной среде, и при необходимости он может помочь решить проблему со связью вызова.

"выпуск! Книга Jolt Award The Design and Deployment of Software, глава 17 Прозрачность Вводит роль прозрачного дизайна в архитектуре.

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

мы используемjmeterПри проведении стресс-тестирования околоСводные отчетысерединаthroughputПонимание должно быть единым.

при обычном использованииjmeterВнимательное наблюдение во время стресс-тестированияthroughputИзменения в этой колонке, но я не понимаюthourghputПри расчете принцип будет принят заtps/qpsСойди, ведь иногда на всем удаленном сервере его вообще нетresponse.

производительность=количество образцов/время измерения давления

пропускная способностьколичество запросов, обрабатываемых в единицу времени, как правило,secondрасчет, если это стресс-тестwriteвведите интерфейс, затемtpsпоказатель. Если испытание под давлениемreadвведите интерфейс, затемqpsпоказатель. Эти два типа индикаторов совершенно разные, и мы не должны их путать.

200(throughput) tps=1000(write)/5(s)1000(throughput) qps=2000(read)/2(s)

когда мы нашлиthroughputПри постепенном снижении учитывайте временную широту.

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

Это использует версию пользовательского интерфейсаjmeterОсобенно очевидно, потому что в Хуаньхуане он ведет себя медленнее. использоватьLinuxверсияjmeterК счастью, потому что его выходная печать печатается только после интервала.

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

Мы также чаще всего используемapache abПроведите базовое испытание давлением, в основном используемое для сравнения сjmeterДля сравнения, если результаты испытаний под давлением двух инструментов не сильно отличаются, они в основном используются для устранения некоторых проблем с производительностью.

apache abиjmeterу каждого есть фокус,abЕго можно нажать фиксированным количеством запросов,jmeterЕго можно нажимать в зависимости от времени, и вам нужно обратить внимание на разницу между ними при расчете окончательного расчета.abКажется, что нет запроса на сообщения об ошибках и прерывания.jmeterЕсть подсказки об ошибках и различные настройки утверждения широты.

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

Методы стресс-тестирования и устранения неполадок производительности

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

Основываясь на этомСистема зависит от дорожной картыМы проведем стресс-тестирование производительности, локализацию проблем и оптимизацию производительности.

Разумная системная архитектура должна состоять в том, что верхний уровень зависит от нижнего уровня.Без определения производительности нижестоящей системы невозможно определить, где находится узкое место производительности вышестоящей системы.

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

Например, товарная система.v1/product/{productid}Внешний интерфейс, пропускная способностьqps 8000, то самым узким местом в этом пути кода для всех вышестоящих служб, зависящих от этого интерфейса, является8000, путь кода либоtpsвсе ещеqpsЭто все та же пробка.

Сервисы верхнего уровня могут использоватьasyncспособ улучшитьrequestОбъем параллелизма, но не может улучшить путь кода вv1/product/{productid}пропускная способность бизнеса.

Мы не можем путать параллелизм с пропускной способностью.То, сколько параллелизма может обрабатывать система, не означает высокую пропускную способность. Есть много способов увеличить параллелизм,threadpoolУвеличьте размер пула потоков,socketкласс с10к,nioПо событиям и так далее.

Обратите внимание на каждый журнал широты

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

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

slow.logЕще очень нужно записывать тип slow log, что требуется не только при нагрузочном тестировании, но и в продакшене.

Если мы используем различное промежуточное ПО, нам необходимо вывести журналы обработки различного промежуточного ПО,mq.log,cache.log,search.logи так далее.

КромеlogКроме того, нам также необходимо сосредоточиться на среде выполнения.gc log.

Мы в основном используемJavaПлатформа, обратите внимание при напряженном тестированииgc logнормально. даже если нетJavaпрограмма, похожая наvmязыки требуют вниманияgc log. в соответствии сjvm gcerВыходной журнал также отличается в зависимости от конфигурации.

Для общего бизнеса электронной коммерции, когда ответ является приоритетомgcв основном используютcms+prenew,обрати внимание наfull gcчастота, вниманиеcms начальная отметка,одновременная маркировка,перемаркировать,Параллельная очисткаВремя выполнения каждого этапа,gcреализованоreal time,pernewРазмер восстановления памяти во время выполнения и т. д.

java gcЭто сложнее и включает в себя много вещей, даgc logИнтерпретация также должна соответствовать размеру текущих поколений памяти и серииgcсвязанная конфигурация различается.

«Полное руководство по оптимизации производительности Java» рекомендовано Гослингом, отцом java, и его можно изучать и изучать в течение длительного времени.

Общие команды Linux

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

netstat

Он в основном используется для просмотра различной информации, связанной с сетью.

Например, в процессе измерения давления черезnetstat wcпосмотриtcpЯвляется ли количество подключений и серверthreadpoolустановить соответствие.

netstat -tnlp | grep ip | wc -l

Если наш серверthreadpoolОн установлен на 50, тогда вы можете увидетьtcpКоличество соединений должно быть 50. Потом по статистикеjstackсервераrequest runingЭто количество потоков в состоянии> = 50.

requestОписание количества потоков может варьироваться в зависимости отnioРазличные рамки различаются.

Также есть наиболее часто используемые порты для просмотра состояния запуска системы,tcpстатус подключенияestablelishedвсе ещеlistenгосударство.

netstat -tnlp

ПеределкаpsКоманда просматривает состояние запуска системы. Это обычно используется, чтобы определить, действительно ли программа запущена, если она запущена?listenПорт не соответствует порту, указанному в конфигурации.

ps aux | grep ecm-placeorder

Команда netstat очень мощная и имеет много функций.Если нам нужно просмотреть другие функции команды, мы можем использовать man netstat для просмотра справочной документации.

vmstat

В основном используется для мониторинга статистики очереди выполнения виртуальных процессоров.

vmstat 1

Во время испытания под давлением каждый1sили2sРаспечатайте его один раз, чтобы увидеть, не слишком ли высока загрузка процессора.procsСписокrПодстолбец — это очередь обработки текущего процессора.Если это значение слишком велико, текущийcpu coreчисла, то нагрузка на процессор будет слишком высокой. можно комбинировать со следующимиtopКоманды сопряжены с мониторингом.

В то же время эта команда может проверить, достаточно ли памяти при слишком высокой загрузке процессора, много ли подкачки памяти и сколько подкачки туда-сюда.swap siпоменять местамиswap soпоменять. Есть ли очень высокий переключатель контекстаsystem csПереключайтесь каждую секунду,system usЯвляется ли время выполнения пользовательского режима очень маленьким. Есть ли очень высокийio waitи Т. Д.

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

mpstat

В основном используется для мониторинга многопроцессорной статистики

mpstat -P ALL 1

я32 coreСервер для испытаний под давлениемmpstatЗагрузку каждого виртуального процессора можно контролировать. Вы также можете просмотреть общую загрузку процессора.

mpstat 1

можно увидеть%idleпраздныйcpuпроцент,%userПользовательский режим задача занятаcpuпроцент,%sysЗанятость ядра системного режимаcpuпроцент,%softОккупация мягкого прерыванияcpuпроцент,%niceОтрегулируйте занимаемый приоритет задачиcpuпроцент и др.

iostat

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

iostat 1

Если у нас есть большое количествоioоперация черезiostatмониторioКоличество записанных и прочитанных данных также можно увидеть вioпод большой нагрузкойcpuсредняя нагрузка.

top

Отслеживание общей производительности всей системыtopКоманды наиболее часто используются в наших повседневных ситуациях, и мы можем хорошо знать текущую системную среду. процессорloadоценочная ситуация,memoryпотребление, котороеtaskпотреблятьcpu,memoryНаибольший.

top

topКомандные функции очень богаты и могут быть%MEM,%CPUСортировать.

load averageПредставление доменаcpu loadПоследние три абзаца представляют собой среднее значение за последние 1 минуту, 5 минут и 15 минут соответственно.loadСтавка. Это значение не может быть больше текущегоcpu coreчисло, если оно больше, чем описаниеcpu loadуже серьезно слишком высоко. Необходимо проверить, не установлено ли слишком большое количество потоков, а также рассмотреть, не слишком ли велико время обработки этих задач. Количество установленных потоков напрямую связано с продолжительностью обработки задачи.

TasksДомен представляет количество задач,totalобщее количество заданий,runningколичество запущенных задач,sleepingколичество задач в спящем режиме,stoppedколичество отложенных задач,zombieКоличество заданий зомби-состояния.

SwapДомен представляет собой обменную зону системы, на которую следует обратить внимание при нагрузочном тестировании.usedБудет ли дальше расти, если продолжит расти, значит, физическая память израсходована и начат своп страниц памяти.

free

Просмотр текущего использования системной памяти

free -m

totalобщий объем памяти,usedразмер выделенной памяти,freeтекущий доступный объем памяти,sharedРазмер общей памяти между задачами,buffersСистема выделена, но не используется, используется для хранения файловmatedataобъем памяти метаданных,cachedРазмер памяти, выделенной системой, но еще не использованной для хранения данных содержимого файла.

-/+buffer/cache

usedвычестьbuffers/cached, то есть используется не столько память, сколько некоторая память вbuffers/cachedвнутри.

freeдобавитьbuffers/cached, то есть естьbuffers/cachedНеобходимо добавить свободную память.

Swapстатистика области подкачки,totalобщий размер области подкачки,usedразмер используемой области подкачки,freeДоступный размер области подкачки. просто следуйтеusedРазмер используемой области подкачки Если есть занятость, память достигла узкого места.

«Глубокое понимание ядра LINUX», «Проектирование и реализация ядра LINUX» можно держать под рукой в ​​качестве справочного руководства при возникновении проблем.

Два способа устранения неполадок производительности (сверху вниз, снизу вверх)

Когда в системе возникает проблема с производительностью, вы можете устранить проблему на двух уровнях, сверху вниз, из Интернета, или вы можете использовать эти два метода в комбинации, и вы можете просмотреть информацию об этих двух широтах на то же время во время стресс-тестирования.

сторона открытаtop,freeнаблюдатьcpu,memoryпотребление на системном уровне при прохожденииjstack,jstatТакие инструменты, как просмотр внутреннего состояния приложения во время его работы для синтеза местоположения.

Суммировать

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

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

Начиная с кода ошибки 406

Как элегантно проектировать компоненты React

Android нажимает «помощь»? Начиная с единого push-альянса Министерства промышленности и информационных технологий

Мост между обратными вызовами и промисами - promisify

Пошаговая оптимизация внешнего кода с использованием соответствующих шаблонов проектирования