Какая среда и учетные данные используются запуском, фоном и сервисными процессами

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

Кэширование

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

  • поиск чего-то в базе данных
  • разрешение IP-адреса сервера
  • доступ к файлу от жесткого диска

Объединение

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

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

Так вместо этого то, что сделано, является светом frontend, создается, который примет соединения и затем продолжит несколько экземпляров приложения и работающий в любом случае, и затем frontend сделает следующее:

  1. присвойте входящее соединение с одним из уже рабочих экземпляров приложения
  2. возьмите результаты этого рабочего экземпляра
  3. пасуйте назад результаты клиенту
  4. отложите рабочий экземпляр приложения в "готовый обработать" состояние

Пример

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

Если Вы смотрите на Полукровку Ruby сервер HTTP, он был разработан так, чтобы он мог быть выполнен в пуле почти таким же способом.

Одна популярная конфигурация должна была выполнить Apache Сервер HTTP 2.2 как подсистема балансировки нагрузки с помощью mod_proxy_balancer в сочетании с несколькими экземплярами Полукровки. Каждый экземпляр Полукровки работал бы на отдельном порте TCP, настроенном через mongrel_cluster утилиту управления. До недавнего времени Твиттер был известным экземпляром этой конфигурации.

Полукровка была способна к обслуживанию приводимых в действие сайтов Ruby on Rails, не требуя никаких других веб-серверов, хотя как однопоточное приложение эта конфигурация является неподходящей для всех кроме легких загрузок

3
29.09.2016, 14:19
2 ответа

В зависимости от фазы загрузки процессов они могут вообще не иметь переменных окружения, унаследовать их от родительского процесса или использовать переменные, которые были в скрипте запуска (init.d).

Переменные окружения, используемые процессом, можно найти, изучив /proc/$PID_OF_PROCESS/environ:

root@frisbee:~# xargs -n 1 -0 < /proc/1243/environ 
UPSTART_INSTANCE=
UPSTART_JOB=rsyslog
TERM=linux
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin
UPSTART_EVENTS=filesystem
PWD=/

Много информации о процессе можно найти, изучив его каталог /proc/. Например:

  • С текущей рабочей директорией процесса осуществляется симлинкование по /proc/$PID/cwd:

    root@frisbee:~# ls -l /proc/1243/cwd
    lrwxrwxrwx 1 корень 0 apr 30 11:20 /proc/1243/cwd -> /
    
  • Двоичный файл, из которого был exec()'ed, symlinked by /proc/$PID/exe:

    root@frisbee:~# ls -l /proc/1243/exe
    lrwxrwxrwx 1 корень 0 apr 30 11:19 /proc/1243/exe -> /usr/sbin/rsyslogd
    
  • Файловые дескрипторы (файлы + сетевые соединения + сокеты межпроцессного взаимодействия) можно найти в /proc/$PID/fd/:

    root@frisbee:/proc/1243/fd# ls -l
    всего 0
    lrwx------ 1 корневой 64 apr 30 11:20 0 -> сокет:[12362]
    l-wx------ 1 корневой 64 apr 30 11:20 1 -> /var/log/syslog
    l-wx------ 1 корневой 64 apr 30 11:20 2 -> /var/log/kern.log
    lr-x------ 1 корневой 64 apr 30 11:20 3 -> /proc/kmsg
    l-wx------ 1 корневой 64 apr 30 11:20 4 -> /var/log/auth.log
    l-wx------ 1 корневой 64 apr 30 11:39 5 -> /var/log/ufw.log
    

Вы можете узнать, каким пользователем запущен процесс, изучив вывод ps:

root@frisbee:/proc/1243# ps -fp 1243
UID        PID  PPID  C STIME TTY          TIME CMD
syslog    1243     1  0 11:19 ?        00:00:01 rsyslogd -c5

Что-нибудь еще, что я должен знать?

Много, но вы должны сами определить эти вещи и найти их или задать другой вопрос.

2
27.01.2020, 21:19

Сценарии запуска (при загрузке)

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

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

Переменные среды, такие как $PATH, обычно устанавливаются в сценариях оболочки, которые могут быть автоматически установлены при запуске оболочки; объяснение того, как bash, например, делает это, смотрите в ИНВОКАЦИИ в man bash. Для shell'ов, вызываемых не интерактивно как sh (т.е. большинство init-скриптов), нет файлов, которые исходили бы автоматически.

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

Если конкретному загрузочному сервису необходимо, чтобы окружение было настроено определенным образом, то этот сервис сам отвечает за настройку такого окружения. Традиционно это делается путем инициализации переменных в init-скрипте.

Процессы, запущенные в фоновом режиме (или отправленные в него)

Процессы наследуют свое окружение от родителя (процесса, который их запустил). Отправка их в фон не меняет этого.

2
27.01.2020, 21:19

Теги

Похожие вопросы