Проблема обработки запросов в CGI-режиме
Материал из 1GbWiki.
Версия 15:45, 13 ноября 2007 (править) Dmach (Обсуждение | вклад) м ← К предыдущему изменению |
Текущая версия (06:52, 27 января 2010) (править) (отменить) Rin (Обсуждение | вклад) (1Gb.ru -> 1Gb.ua) |
||
(6 промежуточных версий не показаны.) | |||
Строка 1: | Строка 1: | ||
== Описание проблемы == | == Описание проблемы == | ||
- | Ряд скриптовых технологий исполняются сервером в CGI-режиме, это означает, что на обработку каждого CGI-запроса веб-сервер инициирует запуск отдельного процесса который обрабатывает запрос после чего отдаёт результат своей работы веб-серверу и завершается. Веб-сервер отдаёт результат работы CGI-процесса далее по цепочки клиенту (браузеру, например). | + | Ряд скриптовых технологий исполняются сервером в CGI-режиме, это означает, что на обработку каждого CGI-запроса веб-сервер инициирует запуск отдельного процесса, который обрабатывает запрос, после чего отдаёт результат своей работы веб-серверу и завершается. Веб-сервер отдаёт результат работы CGI-процесса далее по цепочки клиенту (браузеру, например). |
- | Обработка запросов в CGI-режиме имеет ряд проблем связанных с тем, что запуск нового процесса это | + | Обработка запросов в CGI-режиме имеет ряд проблем, связанных с тем, что запуск нового процесса это ресурсоёмкая задача: крайне ресурсоёмкая на Windows-сервере и чуть менее (ориентировочно в 6 раз) ресурсоёмкая на Unix-сервере. |
- | На хостинге [http://www.1gb. | + | На хостинге [http://www.1gb.ua 1Gb.ua] в CGI-режиме исполняются следующие скрипты: |
* PHP | * PHP | ||
Строка 11: | Строка 11: | ||
** на платформе Unix при выборе соответствующего режима | ** на платформе Unix при выборе соответствующего режима | ||
* Perl | * Perl | ||
- | * Parser | + | * [[Parser]] |
* некоторые другие | * некоторые другие | ||
- | Для режима работы сервера с запросами в CGI-режиме может наступить некоторая критическая ситуация характеризующаяся большим количеством единовременно исполняющихся процессов обрабатывающих CGI-запросы. Когда этих процессов больше какого-то лимита то это может сигнализировать как об атаке на какой-то сайт так и о проблемных скриптах (в общем виде обработка одного запроса должна происходить быстро и не затягиваться по времени) исполнение которых нежелательно. Если такую ситуацию игнорировать, то число процессов будет увеличиваться и это приведёт к резкому снижению производительности сервера вплоть до отказа в обслуживании. | + | Для режима работы сервера с запросами в CGI-режиме может наступить некоторая критическая ситуация, характеризующаяся большим количеством единовременно исполняющихся процессов, обрабатывающих CGI-запросы. Когда этих процессов больше какого-то лимита, то это может сигнализировать как об атаке на какой-то сайт, так и о проблемных скриптах (в общем виде обработка одного запроса должна происходить быстро и не затягиваться по времени), исполнение которых нежелательно. Если такую ситуацию игнорировать, то число процессов будет увеличиваться и это приведёт к резкому снижению производительности сервера вплоть до отказа в обслуживании. |
- | Что бы исключить такие ситуации на хостинге [http://www.1gb. | + | Что бы исключить такие ситуации на хостинге [http://www.1gb.ua 1Gb.ua] реализована специальная служба мониторинга, которая контролирует запущенные процессы и в случае превышения лимита принимает решение о прекращении исполнения процессов и оповещает об этом администраторов хостинга. |
Число процессов ориентировочно следующее: | Число процессов ориентировочно следующее: | ||
Строка 27: | Строка 27: | ||
* Исполнение запросов прерывается, производимые ими действия не завершаются | * Исполнение запросов прерывается, производимые ими действия не завершаются | ||
* Прерываются CGI-процессы всех пользователей сервера а не только проблемного рессурса | * Прерываются CGI-процессы всех пользователей сервера а не только проблемного рессурса | ||
- | |||
== Перспективы == | == Перспективы == | ||
- | Если | + | Если ресурс является инициатором подобной критической ситуации на постоянной основе, то администрация хостинга самостоятельно принимает необходимые действия (в том числе и без предварительного предупреждения) для решения проблемы, вплоть до остановки ресурса. Функционирование ресурса с указанной проблемой на виртуальном хостинге невозможно. |
- | + | ||
== Пути решения проблемы == | == Пути решения проблемы == | ||
- | * Если проблема относится к скриптам PHP то сайт может быть переведён на веб-сервер (как правило - Apache) исполняющий процессы не в CGI-режиме а в модуле. | + | * Если проблема относится к скриптам PHP, то сайт может быть переведён на веб-сервер (как правило - Apache), исполняющий процессы не в CGI-режиме, а в модуле. |
- | ** Если вам необходимо использовать Windows-технологии (например ASP или ASPX), то вы можете перенести на Apache только часть сайта выделив её в отдельный сайт с доменом 3-его уровня, например forum.example.com | + | ** Если вам необходимо использовать Windows-технологии (например ASP или ASPX), то вы можете перенести на Apache только часть сайта, выделив её в отдельный сайт с доменом 3-его уровня, например forum.example.com |
- | * Если проблема относится к скриптам для которых на хостинге отсутствует возможность работы в режиме модуля, то сайт можно перенести на Unix-сервер, исполняющий CGI-запросы чуть более эффективно | + | * Если проблема относится к скриптам, для которых на хостинге отсутствует возможность работы в режиме модуля, то сайт можно перенести на Unix-сервер, исполняющий CGI-запросы чуть более эффективно |
* Всё переписать отказавшись от проблемной технологии | * Всё переписать отказавшись от проблемной технологии | ||
* Найти другой хостинг | * Найти другой хостинг | ||
+ | |||
+ | [[Категория:Серверная нагрузка]] |
Текущая версия
[править] Описание проблемы
Ряд скриптовых технологий исполняются сервером в CGI-режиме, это означает, что на обработку каждого CGI-запроса веб-сервер инициирует запуск отдельного процесса, который обрабатывает запрос, после чего отдаёт результат своей работы веб-серверу и завершается. Веб-сервер отдаёт результат работы CGI-процесса далее по цепочки клиенту (браузеру, например).
Обработка запросов в CGI-режиме имеет ряд проблем, связанных с тем, что запуск нового процесса это ресурсоёмкая задача: крайне ресурсоёмкая на Windows-сервере и чуть менее (ориентировочно в 6 раз) ресурсоёмкая на Unix-сервере.
На хостинге 1Gb.ua в CGI-режиме исполняются следующие скрипты:
- PHP
- на платформе Windows/IIS
- на платформе Unix при выборе соответствующего режима
- Perl
- Parser
- некоторые другие
Для режима работы сервера с запросами в CGI-режиме может наступить некоторая критическая ситуация, характеризующаяся большим количеством единовременно исполняющихся процессов, обрабатывающих CGI-запросы. Когда этих процессов больше какого-то лимита, то это может сигнализировать как об атаке на какой-то сайт, так и о проблемных скриптах (в общем виде обработка одного запроса должна происходить быстро и не затягиваться по времени), исполнение которых нежелательно. Если такую ситуацию игнорировать, то число процессов будет увеличиваться и это приведёт к резкому снижению производительности сервера вплоть до отказа в обслуживании.
Что бы исключить такие ситуации на хостинге 1Gb.ua реализована специальная служба мониторинга, которая контролирует запущенные процессы и в случае превышения лимита принимает решение о прекращении исполнения процессов и оповещает об этом администраторов хостинга.
Число процессов ориентировочно следующее:
- 35 для x86-сервера
- 100 для x64-сервера
Превышение указанного числа и уничтожение исполняемых процессов плохо по следующим соображениям:
- Исполнение запросов прерывается, производимые ими действия не завершаются
- Прерываются CGI-процессы всех пользователей сервера а не только проблемного рессурса
[править] Перспективы
Если ресурс является инициатором подобной критической ситуации на постоянной основе, то администрация хостинга самостоятельно принимает необходимые действия (в том числе и без предварительного предупреждения) для решения проблемы, вплоть до остановки ресурса. Функционирование ресурса с указанной проблемой на виртуальном хостинге невозможно.
[править] Пути решения проблемы
- Если проблема относится к скриптам PHP, то сайт может быть переведён на веб-сервер (как правило - Apache), исполняющий процессы не в CGI-режиме, а в модуле.
- Если вам необходимо использовать Windows-технологии (например ASP или ASPX), то вы можете перенести на Apache только часть сайта, выделив её в отдельный сайт с доменом 3-его уровня, например forum.example.com
- Если проблема относится к скриптам, для которых на хостинге отсутствует возможность работы в режиме модуля, то сайт можно перенести на Unix-сервер, исполняющий CGI-запросы чуть более эффективно
- Всё переписать отказавшись от проблемной технологии
- Найти другой хостинг