Узкие места на сервере

Товарищи знатоки. Прошу помощи, чтобы разобраться и понять, где узкое место на моем сервере. Есть несколько разных серверов. Туда залит проект на php: кое-какая api. При работе 1 человека с апи – все ок, когда их становиться много – сразу начинает лагать и респонса клиент может и не дождаться.
Вот конфигурация одного из серверов: это бесплатный инстантс амазона. ОС – какая-то версия амазоновская, наверно основанная на убунту или дебиан. Процессор с 1 ядром, 600 мб оперативной памяти. Понимаю, что это понты, но сервера с более мощной конфигурацией испытывают такие же проблемы, хотя на мой взгляд работать они должны при бо’льших нагрузках. На сервере используется php 5.4, mysql 5, nginx. Работы с бд почти нет, тк раз 2 часа все данные апи кешируются с помощью memcached и всегда отдаются из кеша.
Так вот я запускаю тест загрузки от сайта loader.io, который имитирует 30 клиентов в минуту, каждый клиент делает запросы на 6 разных енпоинтов апи. Каждый ендпоинт в общем отдает закешированные данные + кое-какие мелкие действия в бд типа обновить дату доступа. При таком конфиге и 30 клиентов в минуту тест крашится из-за большого кол-ва таймаутов. Я не могу понять, в чем беда. Загрузка процессора – 100 почти всегда. Занимает почти все – пхп. Но почему он так грузит проц, если там работы-то на пару секунд.
Может кто описать кратко инструкцию по определению узкого места на сервере: в nginx что-то(может настрока неверная), или я как-то пхп неверно конфигурю, или с бд что-то не так. В настройке я полный 0, хотелось бы услышать советов людей, которые имеют опыт. Спасибо!

П.С. вот один из графиков, на нем видно, как сервере исправно обрабатывает запросы, но потом резко начинает педалить и загибается: upd: результаты профайлера

  • Вопрос задан более трёх лет назад
  • 2827 просмотров

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

Гипотетически (версия из головы) может например быть какой то кривой кеш, который захлебывается, постоянно перегенерится – вот и загрузка 100%

upd еще гипотетическая версия – у вас например есть какие то тяжелые транзакции которые мешают разным потокам скрипта.

www.xdebug.org/docs/profiler – использовать только для тестов, в продакшене стоит отключить.

Есть подозрения что у вас какая-то беда с ресолвингом DNS серверов с memcache и/или базой данных. Проверьте может?

@myLizzarD если там прописано "localhost" а не 127.0.0.1 оно всеравно будет пытаться заресолвить dns если не прописано ничего в /etc/hosts

И да, запустить нагрузочный тест и получить статистику по профилированию.

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

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

Потенциальные узкие места

Память

  • Недостаток объема оперативной памяти, установленной на компьютере, оказывает негативное влияние на производительность всех компонент 1С:Предприятия 8 и Microsoft SQL Server.
  • При увеличении количества пользователей и объема информационной базы требования к этому ресурсу со стороны сервера 1С:Предприятия 8 и Microsoft SQL Server возрастают.
  • Нехватка памяти приводит к увеличению интенсивности страничного обмена между файлом подкачки и физической памятью, что существенно снижает производительность системы.
Читайте также:  Convoy xs 6 инструкция

Процессоры

Дисковые операции

Конфликты блокировок Microsoft SQL Server

Идентификация узких мест

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

Объект Основные счетчики Описание Основные признаки наличия проблемы Варианты решения проблемы
Память Memory Pages/sec Характеризует интенсивность обмена между дисковой подсистемой и оперативной памятью. Обращение к дисковой системе происходит из-за того, что запрашиваемые страницы отсутствуют в оперативной памяти. Нормальное значение этого счетчика должно быть близко к нулю. Увеличение показания этого счетчика свыше 20 страниц в секунду говорит о необходимости увеличения объема оперативной памяти.

Увеличение объема оперативной памяти, установленной на компьютере.

Перенос приложений, интенсивно использующих оперативную память, на отдельный компьютер. Например, установка сервера 1С:Предприятия 8.0 и Microsoft SQL Server на разных компьютерах.

Процессор Processor %Processor Time Время, которое процессор тратит на выполнение полезной работы, в процентах от общего системного времени. Если среднее значение величины утилизации процессора превышает 85%, значит, процессор – узкое место в системе.

Замена процессоров на более быстродействующие.

Увеличение количества процессоров.

Перенос приложений, интенсивно использующих процессор на отдельный компьютер . Например, установка сервера 1С:Предприятия 8.0 и Microsoft SQL Server на разных компьютерах.

System Processor Queue Length Длина очереди к процессору. Если в течение длительного времени средняя длина очереди превышает значение 2, то это говорит о том, что процессор является узким местом. Дисковая система Physical Disk %Disk Time Процент времени, которое диск был занят, обслуживая запросы чтения или записи. Снижение утилизации процессоров сервера

Установка более быстрых дисков.

Использование дисков с интерфейсом SCSI.

Использование аппаратного RAID – контроллера.

Увеличение количества дисков в RAID – массиве.

Physical Disk Avg. Disk Queue Length Показывает эффективность работы дисковой подсистемы. Представляет собой среднюю длину очереди запросов к диску. Увеличение очереди запросов к дисковой подсистеме Сетевой интерфейс Network Interface Bytes Total/sec Скорость, с которой происходит получение или посылка байт через сетевой интерфейс Значение этого счётчика не должно превышать 65% величины пропускной способности сетевого адаптера.

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

Установка дополнительного сетевого адаптера.

Блокировки SQL Server: Locks Lock Wait Time (ms) Показывает общее время ожидания (в миллисекундах) выполнения запросов на блокировку за последнюю секунду Среднее значение общего времени ожидания не должно превышать заданного времени отклика системы умноженного на количество активных пользователей

Сокращение времени выполнения транзакции.

Обеспечение единого порядка доступа ко всем ресурсам.

Оптимизация запросов в прикладном решении.

Правильная установка признаков индексирования у реквизитов объектов конфигурации позволяет существенно сократить диапазон блокировок.

Поддержание актуальности индексов и статистики Microsoft SQL Server.

Использование в запросах оператора "ДЛЯ ИЗМЕНЕНИЯ".

Этап I. Подготовка БД MS SQL и ODBC.

1. Создаем пустую БД, например «Test»

2. Настраиваем ODBC

Идём в контрольную панель и вызываем «Administrative Tools» (Control PanelAll Control Panel ItemsAdministrative Tools)

Открываем (в зависимости от разрядности) «ODBC Data Sources» и добавляем новый провайдер на закладке «System DSN»

Выбираем источник, SQL Server

Заполняем реквизиты доступа к ранее созданной БД test:

Указываем учетную запись, под которой будет осуществляться подключение к БД (тут все зависит от ваших предпочтений, доменная или иcпользовать учетную запись MS SQL):

Далее можно, ничего не меняя, нажимать "next". В конце будет итоговое окно:

Нажимаем «Test Data Source» и получаем заветное: "TESTS COMPLETED SUCCESSFULLY!". Как показала практика, наличие этой прекрасной надписи не означает отсутствия проблем в дальнейшем.

Проверяем, что новый источник появился:

Этап II. Настройка счетчиков производительности.

Создаем новый набор счетчиков.

Идём в контрольную панель и вызываем «Administrative Tools» (Control PanelAll Control Panel ItemsAdministrative Tools)

Открываем «Performance Monitor» и в раздел «User Defined» добавляем новую коллекцию счетчиков:

Выбираем «Create manually (Advanced)»:

Указываем, что мы хотим логировать именно счетчики производительности:

На следующем экране представлены все возможные счетчики. Для примера возьмем один:

Читайте также:  Как заменить цвет в фотошопе cs6

В разделе «Processor» есть счетчик «% Processor time». В нижнем списке уточняем, какое ядро хотим мониторить. Для примера выбираем «Total» и нажимаем «Add». Это позволит отслеживать в процентах общую нагрузку по всем ядрам.

Указываем интервал сбора данных. Выбираем, к примеру, 15 секунд.

Далее без изменений, поэтому можно сразу жать "финиш". В итоге получаем набор счетчиков, но он пока не запущен, и запускать его пока что рано.

Перенастраиваем набор на БД MS SQL

Заходим в DataCollector01 и перевыбираем параметр Log format с Binary на SQL

Далее в параметре «Data source name» выбираем созданный в первом разделе провайдер

Идём в настройки New Data Collector Set. На закладке «Schedule» добавляем задание по старту счетчиков на ежедневной основе.

На закладке «Stop Condition» выставляем условия окончания сбора счетчиков. Я выбрал в качестве ограничения размер БД в 10 Гб.

Сохраняем и з апускаем счетчики

Проверяем, что данные начали собираться в БД MS SQL:

Этап III. Получение данных и их обработка в 1С

Теперь нужно получить данные из этой БД и как-то интерпретировать. Для этого нам понадобятся 2 функции:

Подключение к БД:

Получение данных из БД

В описываемом примере используется только 1 счетчик, но на самом деле их может быть много, поэтому сначала получим их список из таблицы [CounterDetails]:

Результат разбиваем на 3 списка (можно одним, но не наглядно):

  1. Список объектов контроля (ОЗУ, процессор и т.д.) [ObjectName]
  2. Список счетчиков [CounterName]
  3. Список экземпляров (Например нагрузку на процессор можно отслеживать в общем, а можно по ядрам) [InstanceName]

В итоге, выбрав нужное значение, в каждом из списков можно получить ID, по которому мы получим данные из таблицы [CounterData]. Помимо ID в условии указываем интервал времени, за который мы хотим получить информацию:

Для построения графика достаточно выбрать CounterDateTime и CounterValue.

В итоге получилась обработка следующего вида.

Для удобства помимо графика на форму выведены таблицы результатов запросов.

Настройки подключения к БД видны на закладке «Настройки». В событии"ПриСозданииНаСервере" можно прописать их автозаполнение

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

1. Имя счётчика (в нижнем регистре)

2. Значение которое будет отчерчено на графике зеленой линией

3. Описание счетчика.

Для примера, в обработке заполнил полностью для рассматриваемого счетчика. Результат видно на основном скрин-шоте:

Никаких уникальных технологий не применялось, всё сделано именно на уровне "для чайников", из-за этого кому-то код может показаться "не на уровне". Так что пожелания и к онструктивная критика – приветствуются.

Если где-то описал сумбурно и требуется больше пояснений или кода – готов откорректировать.

Скачать файлы

Наименование Файл Версия Размер

Специальные предложения

(2) http://www.gilev.ru/1c/cloud/HardwareClient82.cf лежит уже 4й год, там практически все указанное в статье есть, очередное изобретение велосипеда

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

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

как говориться без комментариев

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

при указании нескольких источников точно также можно посмотреть графики с разных серверов

(8) Gilev.Vyacheslav, Суть стаьи не конкурировать с другими сервисами, а показать что и как можно сделать.

Меня не интересует отправка данных на сторонние ресурсы + черный ящик, который не ясно как работает (как минимум по соображениям инф. безопасности) . В нем есть описание счётчиков и обоснование граничных условий? Ссылки на MSDN? + стоимость 10 000 руб. для юр. лиц.

(10) т.е. код так и не посмотрели, но решили порассуждать "не читал, но осуждаю"
похвальный подход, вопросов больше нет

Читайте также:  Воронеж дти заказное письмо что это

(11) DenIv, именно потому что и наш код, и многие сторонние обработки уже много раз заново изобретались – данная статья нового контекста не несет на мой взгляд

"За пользование своим сервисом вы просите денег. " ну 100 рублей мы просим потому что когда 3 года сервис работал бесплатно, люди настраивали десятки гигабайт в месяц к нам заливать, а при этом не разу не пользовались, поэтому мы сделали скорее психологический барьер чтобы ненужную работу наши сервера не делали, если 100 рублей – это как цуп за 84 000 руб., то готовы взять 1 рубль или даже бесплатно, главное что вы обязуетесь выключить заливку, если не будете заглядывать больше месяца

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

PhysicalDisk(_Total)\% Disk Read Time
PhysicalDisk(_Total)\% Disk Write Time
PhysicalDisk(_Total)Avg. Disk Bytes/Read
PhysicalDisk(_Total)Avg. Disk Bytes/Write
PhysicalDisk(_Total)Current Disk Queue Length
PhysicalDisk(_Total)Disk Read Bytes/sec
PhysicalDisk(_Total)Disk Write Bytes/sec
PhysicalDisk(ххх)Avg. Disk sec/Read по 3-м дискам
PhysicalDisk(ххх)Avg. Disk sec/Write по 3-м дискам
Processor(_Total)\% Processor Time
Processor(_Total)DPCs Queued/sec

При наличии 11 дисков и 16 CPU занимает за сутки 390 МБ.

(2) Gilev.Vyacheslav
Вячеслав, стесняюсь спросить: Ваш сервис, разве не по этому же принципу работает? Вы какими мотивами руководствовались когда изобретали свой велосипед?
К чему это негатив? Идея не нова, действительно, но в интернетах, кроме Ваших сервисов, которые собирают по тому же принципу показания, но только в Ваши БД, и ЦУПа, ничего вменяемого БЕСПЛАТНО действительно нет.
Ваш HardwareClient82 – это конфигурация собрал что-то отправил куда-то, получил ответ с истиной. Логика совершенно другая. За пользование своим сервисом вы просите денег.
Здесь все прозрачно, не кофа, а обработка, денег не стоит.
Процитирую. Вас же: – "как говориться без комментариев "
PS. Ваш авторитет в данной области ни у кого не вызывает сомнений, однако, именно поэтому Ваша позиция : все дерьмо я Д`артаньян смотрится как-то странно

(2) h00k ЦИБ – стоит нормальных денег, плюс без подготовки и обучения понять что-то в ЦУПе сложно (ИМХО).

научитесь лучше пользоваться SQL Server Profiler
там всё есть. с отборами

а еще лучше см. "Настольная книга 1С:Эксперта по технологическим вопросам"
(артикул: 4601546110060)
Подробнее о ней на сайте: http://v8.1c.ru/metod/books/book.jsp? >

Отличная идея.
Однозначно ПЛЮС

Еще бы лучше в настройках и в запросах имя базы.
А то ругается ))

Не запускается сбор, ошибка «Вызов SQLAllocConnect завершился в ошибкой %1»

Журнал показал
Источник PDH, Код события 3041, в описании ошибки вот это:
Вызов SQLAllocConnect завершился с ошибкой [Microsoft][ODBC SQL Server Driver][SQL Server]Ошибка входа пользователя ""…

БД и Сервер на котором запускается сбор, не объединены в домен. Сборщик стартует от имени локальной учетки, как быть?

См. также

Тест серверного оборудования на допустимое количество пользователей: как это использовать? 77

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

17.12.2019 4887 4 sapervodichka 3

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных – правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Работа с базами данных 1С в SQL Server Management Studio (Расширение для SSMS) 84

Расширение позволяет просматривать связи объектов метаданных и таблиц БД, сгруппированные данные (по группам метаданных) об используемом дисковом пространстве и выполнять трансляцию SQL текста запроса в термины 1С. И бонусом – при наведении курсора мыши на таблицу или поле показывает назначение объекта в терминах 1С.

27.11.2019 5469 26 akpaevj 39

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *