По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Производительность приложений может оказаться решающим показателем для многих предприятий. Если уж на то пошло, то стоимость размещения серверного оборудования напрямую влияет на ваш чистый доход. Именно поэтому если вы будете использовать инструменты профилирования производительности для отладки запускаемого кода, вы сможете в итоге сэкономить ваши деньги.
На что стоит обратить внимание
«Узкое место» - это любая медленно работающая часть вашего приложения, которая замедляет остальную часть, которая работает быстрее, прямо как крышка на бутылке с водой или узкая дорога, которая мешает движению транспорта. Абсолютно любой код, который вы пишете, с большей долей вероятности имеет узкие места, и неважно, маленькие они или большие, вы в любом случае можете использовать инструменты профилирования производительности, чтобы их найти.
Все программы разные, но, как правило, страдают от одних и тех же проблем:
Функции вызываются слишком часто (кэширование или планирование могут уменьшить количество вызовов).
Код блокировки ввода-вывода, обычно сюда относится синхронный доступ к диску, но иногда и чрезмерное использования памяти.
Большое количество циклов с затратными методами.
Длительное время запуска, особенно в JIT-компилируемых языках.
Нецелесообразное выделение памяти, особенно при работе программы сборки мусора.
Области, которые выиграют от распараллеливания или асинхронного программирования.
При проверке вашего кода с помощью профилировщика вы сможете выявить любые из них. Даже если у вашего приложения нет какого-то серьезного заметного узкого места, в любом случае даже минимальный процент улучшения поспособствует тому, что ваше приложение будет работать быстрее и эффективнее. А увеличение скорости работы хотя бы на несколько процентов, может в перспективе привести к значительным результатам.
Кроме того, есть вероятность, что узким местом вашего приложения может оказаться не серверный код, а его расположение в вашей общей сети. Например, у вас есть API, который подключается к медленной базе данных. И здесь не имеет значения, насколько быстро работает ваш веб-сервер, если он всегда долго ждет результатов. Профилировщики производительности могут помочь решить проблемы только в рамках вашего кода, но никак не в общей сетевой структуре.
Как работает профилирование?
Инструменты профилирования производительности немного отличны от инструментов отладки. IDE использует такие инструменты отладки, как точки останова и инспектирование, для тестирования и решения проблем в процессе разработки. Профилировщики обычно работают, предполагая, что вы не знаете, в чем заключается проблема, и хотите
профилировать код целиком
, чтобы ее выявить. Профилировщик подключается к вашему приложению и с помощью высокоточного таймера отслеживает, какие функции работают дольше всего. Спустя какое-то время у вас будет достаточное количество данных, чтобы понять причину проблемы.
Большая часть профилировщиков представляют данные в виде стека, отсортированного по «потребителям» с наибольшим временем. Чаще всего в профилировщике используют Flame graph, который наглядно отображает разбиение всей истории вызовов программы.
Выбор определенного инструмента или метода зависит от того, для какого языка программирования или для какой среды выполнения кода вы профилируете, и от того, требуется ли вам профилирование приложения в производственных средах или нет, но в общих чертах идея одна и та же.
Так как каждый профилировщик должен быть интегрирован в исполняемый код, то вам необходимо будет загрузить профилировщик для языка, который использует ваше приложение. Некоторые из них проще в использовании, нежели другие, особенно это касается таких языков, как C# и Java. Профилировщик проще внедрить в приложение, которое использует именно эти языки, а не компилируемые.
Многие IDE имеют инструменты профилирования, которые встроены поверх стандартного набора инструментов отладки. Их вы также можете использовать. Например, Visual Studio может профилировать производительность и использование памяти во многих приложениях.
Java –
JProfiler
, IDEA/Eclipse/Netbeans IDEs
Python –
cProfiler
,
Palanteer
JavaScript –
Chrome DevTools
C# –
dotTrace
, Visual Studio IDE
C, C++ –
Orbit
Если вы уже примерно знаете, что может занимать времени больше, чем положено, то вы всегда можете воспользоваться библиотекой, которая имеет в своем арсенале секундомер, для того, чтобы провести оценку производительности.
Например, Benchmark.NET может проводить высокоточные тестирования различных функций и, как правило, используется для сравнения различных алгоритмов. Также можно использовать обычный класс Stopwatch для какого-то фрагмента кода, который вы хотите протестировать.
Использование профилировщика производительности
В этом руководстве мы покажем, как использовать dotTrace. Это полнофункциональный профилировщик производительности для приложений платформы .NET, в котором есть большая часть инструментов, которые есть и в других профилировщиках. Если вы профилируете код, написанный не на C#, то вам, скорее всего, потребуется другое приложение, но общий принцип остается тем же.
Открыв приложение, вы можете подключиться к запущенным .NET процессам или настроить свою собственную конфигурацию запуска для того, чтобы вы могли запускать приложение прямо из dotTrace. Запуск приложения непосредственно из профилировщика может оказаться довольно полезным, если вы пытаетесь устранить проблему, связанную с медленным запуском приложения.
Как только вы запустите приложение, профилировщик начнет собирать данные. Он может работать столько, сколько вы захотите, а для того, чтобы открыть анализ за накопленный период времени, вам нужно просто нажать «Get Snapshot and Wait».
Как только он откроется, вы увидите большое количество графиков рядом со стеком и деревом вызовов, которые, и, скорее всего, они будут нечитабельными. Если вы видите много всего, связанного с потоками, блокировками и ожиданием, то это, скорее всего, потому, что вам нужно оценить «основной поток».
Профилировщик перехватывает все потоки, которые часто используются для фоновых задач и которые простаивают в течение длительного периода времени. Несмотря на то, что это может говорить о проблемах с блокировкой ввода-вывода, здесь все куда более неоднозначно, чем вы можете себе представить, и это действительно зависит от того, какие действия выполняет поток.
dotTrace также имеет функцию фильтрации кода с точки зрения области, в которой он работает. Для этого используются фильтры «Subsystems» слева. Там можно найти системный код (system code), машинный код (native code) и другие запаздывающие области, такие как отражение (reflection), коллекции (collections), строки (string) и LINQ.
В главном окне вы можете найти Flame graph. Он показывает разбиение всего вашего приложения, начиная с «All Calls» (все вызовы) и разбивая дальше время, которое требуется на выполнение каждого уровня функций. Некоторые из них будут неразрешенными, а некоторые будут слишком малы, чтобы отобразить их на графике, но его можно увеличить до любого масштаба, чтобы увидеть любую функцию и более детальное разбиение стека вызовов.
Еще одна важная функция профилировщиков производительности – это дерево вызовов. Оно показывает вложенное разбиение самых быстрых функций, отсортированных по времени, которое необходимо для их выполнения. Здесь dotTrace также показывает процентное соотношение, то есть долю общего времени, которое данная функция и ее дочерние элементы тратят на свое выполнение.
Затраченное время ЦП не всегда является проблемой, особенно есть речь идет о таком языке, как C#, и если у него есть программы сборки мусора. dotTrace также отслеживает использование и распределение памяти, и его можно использовать для того, чтобы определить, что оказывает нежелательную нагрузку на вашу программу сборки мусора.
Как и любая современная АТС, Asterisk имеет свою встроенную систему хранения истории звонков - CDR (Call Detail Record). Она используется для снятия статистики, ведения отчетности, прослушивания вызовов или подсчета биллинговых показателей.
В Asterisk для этого создана база данных asteriskcdrdb, в которой существует таблица cdr. Давайте рассмотрим как пользоваться данной таблицей и ее структуру.
[root@asterisk]# mysql // подключаемся к MySQL
После успешного подключения, необходимо выбрать для работы базу данных asteriskcdrdb:
mysql> use asteriskcdrdb;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
Давайте убедимся, что у нас есть таблица cdr. Выполним это, как указано ниже:
mysql> show tables;
+-------------------------+
| Tables_in_asteriskcdrdb |
+-------------------------+
| cdr |
| cel |
+-------------------------+
2 rows in set (0.00 sec)
На данном этапе мы убедились, что у нас есть база данных asteriskcdrdb, в которой находится таблица cdr. Давайте попробуем посмотреть входящие звонки из города за сегодня (дата написания статьи 18 марта 2016 года), в период с 12:00 до 12:10, т.е за 10 минут:
SELECT `dst` , `src` , `duration` , `calldate` , `recordingfile`
FROM `cdr` WHERE `calldate` >= '2016-03-18 12:00:00' AND `calldate` <= '2016-03-18 12:10:00' AND LENGTH( `src` ) >3;
+-----+-------------+----------+---------------------+----------------------------------------------------------------+
| dst | src | duration | calldate | recordingfile |
+-----+-------------+----------+---------------------+----------------------------------------------------------------+
| 113 | 84991111111 | 140 | 2016-03-18 12:00:36 | external-113-84991111111-20160318-115933-1458291573.157155.wav |
| 104 | 89162222222 | 81 | 2016-03-18 12:01:33 | external-104-89162222222-20160318-120133-1458291693.157169.wav |
+-----+-------------+----------+---------------------+----------------------------------------------------------------+
2 rows in set (0.00 sec)
В вышеуказанном примере, в SQL запросе указано LENGTH( `src` ) >3. Столбец ‘src’ – показывает номер звонящего (source - источник). Это сделано для того, чтобы исключить внутренние звонки, так как у нас используется трехзначная нумерация. Тем самым, мы получаем в результате данные, с которыми затем можем работать. Например, отправить на почту в виде отчета. Ниже рассмотрена структура таблицы cdr в базе данных asteriskcdrdb:
Столбец
Пример значения
Описание
calldate
2016-03-18 12:00:36
Дата и время звонка
clid
"Oleg Ivanov" <84991111111>
В данное поле попадает полное CallerID (CLID, CID), которое состоит из имени и номера звонящего. Это доступно только для считывания.
src
84991111111
Номер звонящего в конструкции CallerID (CNUM). Это доступно только для считывания.
dst
113
Номер назначения для звонка. Это доступно только для считывания.
dcontext
CustomContext1
Контекст для обработки. Это доступно только для считывания.
channel
SIP/0002B2356854-a34bh3ef
Канал, через который поступил звонок
dstchannel
SIP/0004F6675969-97836bb0
Канал, через который ушел исходящий звонок
lastapp
Dial, Busy, Congestion
Приложение, которое последним отработало этот вызов перед попаданием в таблицу cdr
lastdata
SIP/0004F6675969,30,tT
Аргумент, который был передан приложению, которое отработало вызов последним (lastapp)
duration
75
Количество секунд от начала (отметка start) до окончания вызова (отметка end)
billsec
67
Количество секунд от ответа (отметка answer) до окончания вызова (отметка end). Данное значение всегда меньше значения duration, и отражает длительность самого разговора, что важно для подсчета стоимости.
disposition
ANSWERED, BUSY, NO ANSWER, FAILED
Результат звонка
amaflags
OMIT, BILLING, DOCUMENTATION, Unknown
Метка Automatic Message Accounting (AMA) – автоматический учет стоимости вызова.
accountcode
23232
Идентификатор аккаунта. Данное значение пустое по умолчанию, и определяется параметрами конкретного пользователя.
uniqueid
1458291693.157169
Уникальный идентификатор звонка
userfield
-
Пользовательское поле. Здесь можно передавать что угодно, добавляя данные в этот столбец при работе с вызовом внутри контекста обработки.
did
4996491913
DID (Direct Inward Dialing). На основании DID вызова на Asterisk осуществляется его маршрутизация (это значение приходит от провайдера).
recordingfile
external-113-84991111111-20160318-115933-1458291573.157155.wav
Имя файла, содержащего запись разговора. В данном имени можно проследить путь к файлу в файловой структуре сервера.
cnum
84991111111
Номер звонящего в структуре CallerID.
cnam
Oleg Ivanov
Имя звонящего в структуре CallerID.
Теперь, когда вы понимаете принцип формирования запросов к базе данных и ее структуру, вы можете без труда формировать собственные отчеты. Например, ежедневный отчет о количестве входящих звонков за текущий день на почту. Это реализуется средствами php скрипта и добавления расписания через cron. Поговорим об этом в следующей статье
USB-устройства уже полностью вытеснили оптические носители из работы. Сюда же можно отнести и хранение дистрибутивов ОС. USB-устройства во многом превосходят оптические носители по скорости и их легко использовать для установки операционных систем. В наши дни они удобны и крайне недороги. Кроме того, существует множество инструментов для взаимодействия с USB-накопителями и создания на них дистрибутивов ОС. Установить Windows Server 2019 с USB-накопителя очень просто. В этой статье изучим некоторые способы создания USB-накопителя для установки Windows Server 2019.
Зачем создавать загрузочный USB?
Можно смонтировать ISO образ на виртуальную машину и установить Windows Server. Да, можно, но это справедливо только при использовании виртуальных сред. Также можно ,при наличии, монтировать образ в iDRAC – у Dell это компонент, который находится в сервере и позволяет системным администраторам обновлять, мониторить и контролировать системы, даже когда ОС выключена. У разных производителей разные возможности и цены. Еще один вариант - установка по сети. Этот вариант подразумевает дополнительную установку отдельного PXE сервера и его настройку. Еще более сложный в настройке и дорогой вариант - использовать для установки сервер SCCM. У малого и среднего бизнеса порой нет таких возможностей, и они устанавливают ОС по старинке. Создание загрузочного USB-диска — это самый быстрый способ установить Windows на физическом сервере.
Создание USB загрузочной флешки с Windows Server 2019
Рассмотрим три различных метода создания загрузочного USB
Используя Rufus или аналогичное ПО, которое может записать ISO образ
Вручную подготовить USB диск и скопировать файлы с ISO образа
Использовать OSDBuilder для кастомизации дистрибутива Windows Server 2019
Перед тем как выбрать метод установки, нужно загрузить образ диска. Если в компании не приобретена подписка Visual Studio, можно загрузить ISO образ из Центра загрузки и оценки Microsoft.
Использование Rufus
Раньше приходилось использовать какую-либо утилиту для записи ISO-образа на оптический носитель. Теперь Rufus предоставляет практически те же функции, но позволяет записать ISO-образ на USB-накопитель. Программа обладает простым интерфейсом на русском языке и имеет портативную версию. Загрузить программу можно с сайта Rufus.
При записи программа предупредит, что все данные на USB устройстве будут удалены!
Подготовка инсталляционного USB носителя вручную
Можно создать инсталляционный дистрибутив системы вручную. Весь процесс состоит из несколько этапов. Подключаем Flash носитель, используем diskpart. Очищаем носитель, создаем новый раздел FAT32. Копируем файлы.
Внимание! Все данные на USB носителе в процессе использования diskpart будут удалены.
Следующим шагом подключим ISO образ в систему. Для этого, щелкнем правой кнопкой мыши по ISO файлу и выберем «Подключить». Затем выделите все файлы в смонтированном образе и скопируйте их на целевой USB-накопитель.
В процессе появится ошибка копирования файла install.wim, т.к. максимально возможный размер файла для тома отформатированного в FAT32 равен 4 ГБ. Сейчас пропустим файл и решим эту проблему ниже.
Чтобы обойти ошибку, связанную с ограничением файловой системы FAT32, разделим файл install.wim на несколько файлов не превышающих размер 4 Гб.
И это действие можно выполнить двумя способами. Первый, используя бесплатную программу GImageX для работы c wim файлами. В ней переходим на вкладку Split, указываем файл install.wim и папку, в которую нужно записать новые файлы.
Второй способ – использовать программу dism.
dism /Split-Image /ImageFile:E:sourcesinstall.wim /SWMFile:D:sourcesinstall.swm /FileSize:4096
sourcesinstall – путь до файла install.wim
sourcesinstall – путь к целевому USB диску
Если в качестве sourcesinstall был указан путь как в примере, сразу на Flash накопитель, получится готовый USB накопитель для инсталляции Windows Server 2019. Если был указан другой путь, то перенесите полученные файлы *.swm, в папку «sources» на Flash накопитель и у вас будет загрузочный USB-накопитель для установки Windows Server 2019.
С помощью dism можно добавлять и удалять: роли и компоненты, обновления и драйвера. Более подробно написано в этой статье.
Использование OSDBuilder для кастомизации образа
OSDBuilder это модуль PowerShell, с его помощью возможно создать свой, с настроенными предварительно параметрами, ISO образ. Как и Dism, OSDBuilder позволяет выполнять автономное обслуживание операционной системы Windows, включая и Windows Server 2019. Для этого создается файл ответов, называемый задачей, которая позволяет автоматизировать обслуживание автономного образа. С помощью командлета New-MediaUSB создается загрузочный USB носитель.
При установке и импорте модуля OSDBuilder может возникнуть ошибка, т.к. операционной системе по умолчанию запрещено запускать ненадежные сценарии PowerShell.
install-module OSDBuilder
import-module OSDBuilder
Изменив политику выполнения скриптов, команда импорта модуля завершится без ошибки.
С полным списком команд и последовательностью работы можно ознакомиться на сайте проекта.
Заключение
Существует несколько способов процесса создания USB-накопителя для установки Windows Server 2019. Самый быстрый способ – это использовать Rufus. Более сложные варианты - использовать Dism и OSDBuilder.