Что такое Stack Size (размер стека) в UNIX-like

archive view archive save

article Понятие "стека" (Stack) имеет довольно обширное понятие в вычислительной технике. Существуют такие виды стеков как "Программный стек", "Аппаратный стек" и "Сетевой стек", но Stack Size (размер стека) обычно подразумевает тематику именно "Программного стека" и имеет прямое отношение к оперативной памяти.

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

Обычно в Linux Stack Size (размер стека) равен 10240 kb (10M), управляется конфигурационным файлом /etc/security/limits.conf и командой ulimit -s StackSize, где StackSize размер в kb.

Существует также понятие soft (мягкий) лимит и hard (жесткий) лимит на размер стека. Когда достигнут предел soft (мягкий) лимита, то приложению будет позволено увеличить размер стека до планки hard лимита. По-умолчанию жесткий лимит в Linux не ограничен, проверить можно командой:

[root@shaman]# ulimit -aH | grep stack
stack size (kbytes, -s) unlimited

Многие программы обычно способны к расширению стека (stack expansion), но в некоторых случаях расширение стека может быть невозможно, что может послужить причиной завершения приложения с многочисленными ошибками.

Для примера чувствительных к размеру стека приложений можно взять веб-сервер Apache с его модулем mod_fcgid и вики-движок MediaWiki. Так например в описании директивы ThreadStackSize веб-сервера Apache сказано, что в большинстве случаев размер стека определённый операционной системой является разумным, но в некоторых случаях требует корректировки:

  • На платформах (например, HP-UX), с относительно небольшим размером стека может произойти сбой в работе сторонних модулей Apache. В таком случае увеличение размера стека через параметр ThreadStackSize может решить проблему.
  • На платформах с довольно большим размером стека по умолчанию, снижение размера стека через параметр ThreadStackSize можно снизить расход оперативной памяти.

Для нормальной работы вики-движка MediaWiki есть особые рекомендации для веб-сервера Apache, включая требования к StackSize не ниже чем 8М.

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

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

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


Об авторе
АдМинь БагоИскатель
АдМинь БагоИскатель ярый борец за безглючную работу любых механизмов и организмов во всей вселенной и потому пребывает в вечном поиске всяческих багов, а тот кто ищет как известно всегда находит. Когда что-то или кого-то вылечить не в состоянии, то со словами "Я в аду, а вы все черти" уходит в запой выйдя из которого снова берётся лечить неизлечимое.
Ещё статьи автора

Нет комментариев

Вы можете стать первым, кто добавит комментарий к этой записи.

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

АХТУНГ! Все комменты гостей модерасятся модерастом.
  1. Мессаги исключительно рекламного содержания, либо содержащие только одни оценочные суждения типа "круто" ("отлично", "спасибо", "автор дебил" и т.п.) не публикуются;
  2. Злостным спамерам, пранкерам и прочей сетевой нечисти рекомендуем напрасно не тратить своего времени и удовлетворять свои больные фантазии на специализированных Интернет ресурсах!;
  3. Разумная обоснованная критика, замечания, дополнения приветствуются. Поля помеченные символом * обязательны к заполнению.


Защитный код
Обновить

Комментарии в блоге
Новое на форуме