Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение. |
Управление пулами ресурсов. Проекты. Зоны и контейнеры
В Solaris применяется весьма серьезная и многоуровневая схема управления ресурсами. Именно поэтому Solaris имеет репутацию самой масштабируемой системы. В этой лекции мы обсудим базовые примитивы управления ресурсами и практику этого управления.
Процессы, задачи и проекты
Прежде всего, надо признаться, что в Solaris процессы группируются в задачи, а задачи, в свою очередь, в проекты (рис. 6.1). В проекте может быть одна задача, и задача может состоять из единственного процесса. Проект является единицей назначения ресурсов (которые будут обсуждаться ниже, в разделе "Пулы ресурсов"), и поэтому количество задач в проекте и общее количество проектов определяется реальной необходимостью распределения разнородных ресурсов между процессами.
После установки в системе уже определены несколько проектов. По умолчанию они перечислены в файле /etc/project и сразу после установки системы он выглядит так:
# cat /etc/project system:0:::: user.root:1:::: noproject:2:::: default:3:::: group.staff:10::::
Некоторые пользователи уже отнесены к определенному проекту; в нашем случае этой чести удостоены только пользователь root (запись user.root) и все, для кого группа staff (group.staff) является главной. Все остальные при входе в систему ассоциируются только с проектом default. Для проекта могут быть назначены какие-либо специфические ресурсы, но это не обязательно.
Концепция проектов придумана для управления большими группами процессов, и объединять процессы в такие группы можно по разным признакам.
При входе в систему любого пользователя создается задача (состоящая как минимум из командного процессора), ей назначается проект, и все задачи, порождаемые в рамках этой сессии, относятся к к этому проекту. Порядок назначения проекта при входе пользователя в систему таков:
- просматривается файл /etc/user_attr (он содержит атрибуты пользователей), и если этот пользователь в нем присутствует, то проектом по умолчанию для данного пользователя назначается проект, объявленный для него в этом файле в параметре project ;
- просматривается файл /etc/project, и если в нем указан проект для user.username, то проектом по умолчанию для данного пользователя назначается этот проект;
- просматривается файл /etc/project, и если в нем объявлен проект для group.groupname, то система назначает этот проект данному пользователю проектом по умолчанию, если эта указанная группа является главной для данного пользователя;
- если в файле /etc/project есть проект с именем default, то он назначается проектом по умолчанию для всех пользователей.
Если в файле /etc/project есть какой-либо проект, в поле "пользователи" которого указан данный пользователь, это означает, что данному пользователю разрешается присоединяться к данному проекту (например, с помощью указания имени этого проекта программе newtask ):
newtask -p user.brad bash
Можно посмотреть, процессы каких проектов запущены в системе, и оценить суммарную загрузку по процессам каждого проекта.
# prstat -J PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP 1669 filip 161M 42M cpu0 59 0 0:03:05 4,7% rhythmbox/9 1757 filip 239M 104M run 59 0 0:17:57 1,3% firefox-bin/7 691 filip 216M 193M sleep 59 0 0:15:57 1,2% Xorg/1 1828 filip 279M 143M sleep 59 0 0:04:01 1,0% soffice.bin/6 2063 root 7424K 3552K cpu1 59 0 0:00:00 0,5% prstat/1 992 filip 124M 26M sleep 49 0 0:00:21 0,2% gnome-terminal/2 903 filip 76M 17M sleep 59 0 0:00:33 0,1% metacity/1 925 filip 135M 16M sleep 59 0 0:00:50 0,0% wnck-applet/1 777 noaccess 78M 53M sleep 59 0 0:00:59 0,0% java/24 937 filip 138M 19M sleep 59 0 0:00:31 0,0% mixer_applet2/1 434 root 6868K 5196K sleep 59 0 0:00:48 0,0% hald-addon-acpi/1 1019 mysql 52M 17M sleep 59 0 0:00:24 0,0% mysqld/10 911 filip 163M 49M sleep 49 0 0:00:16 0,0% nautilus/1 892 filip 73M 12M sleep 59 0 0:00:06 0,0% iiim-panel/1 789 filip 2992K 1544K sleep 59 0 0:00:00 0,0% dbus-daemon/1 PROJID NPROC SWAP RSS MEMORY TIME CPU PROJECT 3 46 586M 852M 56% 0:49:07 8,6% default 1 3 3252K 9500K 0,6% 0:00:00 0,5% user.root 0 44 27M 121M 7,9% 0:02:11 0,1% system Total: 93 processes, 296 lwps, load averages: 0,22, 0,15, 0,09
Естественно, что список проектов может быть размещен не только в файле /etc/project, но и в других источниках – каталогах NIS, LDAP или иных. Главное – корректно указать источник для поиска описаний проектов в /etc/nsswitch.conf.
Записи файла /etc/project имеют следующий синтаксис:
projname:projid:comment:user-list:group-list:attributes
где
- projname – имя проекта;
- projid – уникальный идентификатор проекта;
- comment – описание проекта;
- user-list – список пользователей, использующих данный проект;
- group-list – список групп пользователей, использующих данный проект;
- attributes – параметры, определяющие возможность использования ресурсов.
Все поля, кроме projname и projid, являются необязательными:
system:0:::: user.root:1:::: noproject:2:::: default:3:::: group.staff:10:::: user.brad:150:A project for user brad:brad::project.max-lwps=(priv,20,deny)
Задачи создаются при следующих действиях/командах:
- login
- cron
- su
- newtask
- setproject
С помощью команд id и ps можно определить, с какими проектами пользователь связан:
id -p uid=0(root) gid=0(root) projid=1(user.root) ps -o user,pid,uid,projid USER PID UID PROJID root 1242 0 1 root 2935 0 1
Создадим новый проект foopro c идентификатором 150 для пользователя brad:
# projadd -U brad -p 150 foopro
Добавим описание проекта foopro:
# projmod -c "A project for user brad" foopro # cat /etc/project system:0:::: user.root:1:::: noproject:2:::: default:3:::: group.staff:10:::: foopro:150:A project for user brad:brad:: # su - brad Sun Microsystems Inc. SunOS 5.11 snv_79a January 2008 $ projects default foopro
Однако этой операцией мы лишь разрешили пользователю brad присоединяться к проекту foopro. Если же мы хотим, чтобы проект foopro был проектом по умолчанию для пользователя brad, надо либо изменить соответственно строку описания пользователя brad в /etc/user.attr, либо переименовать проект foopro в user.brad. В примере ниже мы также наложили ограничение на максимальное количество одновременно запускаемых пользователем потоков исполнения. В ограничении priv означает тип ограничения (priviliged, может быть изменено только администратором), а deny (запретить) – действие, которое следует выполнить при превышении заданного лимита.
system:0:::: user.root:1:::: noproject:2:::: default:3:::: group.staff:10:::: user.brad:150:A project for user brad:brad::project.max-lwps=( priv,20,deny)