Европейский Университет в Санкт-Петербурге
Опубликован: 19.10.2005 | Доступ: свободный | Студентов: 1764 / 170 | Оценка: 4.31 / 3.82 | Длительность: 18:28:00
Лекция 1:

Оптимизация работы процессов

Лекция 1: 1234 || Лекция 2 >

Ограничение использования оперативной памяти для отдельных проектов

Понятие "проект" в Solaris

Проектом в Solaris называется единица администрирования, предназначенная для оптимального управления ресурсами системы. К проекту могут относиться любые пользователи и группы, и каждый пользователь или группа могут входить в несколько проектов. В большой системе удобно определить ряд проектов в базе проектов (файле /etc/project или соответствующем файле базы NIS).

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

Каждый процесс также обязательно ассоциируется с каким-нибудь проектом. Это не обязательно главный проект пользователя, запустившего процесс, так как пользователь волен отнести запущенный им процесс к любому из проектов, участником которых он является. Отнести пользователя или группу к проекту можно либо в описании пользователя в файле /etc/user_attr, либо в файле проектов /etc/project. Для тех случаев, когда администратор не позаботился о том, чтобы отнести пользователей к определенным проектам, в системе имеется предопределенный проект default, к которому относятся все пользователи, группы и процессы, для которых явным образом не указано иное.

Главный проект пользователя определяется при входе в систему следующим образом:

  • если в файле /etc/user_attr запись об этом пользователе имеет атрибут project, то в качестве главного проекта пользователю назначается указанный таким образом проект ;
  • если в /etc/project имется проект с именем user.UID, где UID совпадает с UID пользователя, то он назначается главным проектом пользователя;
  • если в /etc/project есть проект group.groupname и groupname совпадает с именем главной группы пользователя, то этот проект назначается главным пользователю;
  • если в базе проектов есть проект с именем default, то главным назначается он.

Проверка перечисленных условий производится в указанном выше порядке. В качестве базы данных проектов может использоваться не только файл /etc/project, но и база данных NIS или LDAP. Порядок обращения к службам имен (файлу, NIS или LDAP) определяется в файле /etc/nsswitch.conf:

project: files nis ldap

При использовании PAM может оказаться полезным также изучить страницу руководства pam_projects(5).

Если при входе для пользователя не удалось определить главный проект, вход пользователю запрещается.

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

Файл /etc/project имеет следующий формат:

projname:projid:comment:user-list:group-list:attributes

где:

projname - это имя проекта (в нем не должно быть точек, запятых или двоеточий), то есть уникальный идентификатор проекта ;

projid - неотрицательное целое число не большее 2147483647;

comment - описание проекта ;

user-list - список пользователей, входящих в проект, имена через запятую;

group-list - список групп, входящих в проект, имена групп через запятую;

attributes - атрибуты проекта в формате имя=значение.

Везде, где указано "список", может стоять звездочка (подразумевает "все"), имя может быть предварено восклицательным знаком, что означает "кроме этого" (!groupname - все указанные группы, кроме groupname).

По умолчанию файл /etc/project выглядит так:

system:0::::
user.root:1::::
noproject:2::::
default:3::::
group.staff:10::::

Помимо редактирования файла вручную вы можете пользоваться программами projadd, projmod и projdel для добавления, изменения или удаления проектов. Для получения информации о соответствии процессов проектам следует запускать программы ps, id, pgrep, prstat:

ps -o user,pid,uid,projid
	USER		PID	UID		PROJID
	root		672	0 		1
	root		625	0 		1
	root		654	0 		1
	root		652	0 		1
	root		808	0 		1

id -p
uid=0(root) gid=1(other) projid=1(user.root)

Синтаксис вызова pgrep:

pgrep -J projidlist

например:

pgrep -J 1 | more
347
460
461
345
368
426
435
378
427
411
412
414
434
436
438
459
463
467
469
470
649
650

prstat -J
PID  USERNAME  SIZE    RSS    STATE    PRI   NICE  TIME       CPU     PROCESS/NLWP
345  root      63M     14M    sleep    59    0     0:01:35    0,8%    Xsun/1
622  root      15M     2532K  sleep    59    0     0:00:02    0,6%    dtterm/1
470  root      141M    55M    sleep    49    0     0:02:07    0,5%    soffice.bin/4
820  root      7624K   4576K  cpu0     59    0     0:00:00    0,3%    prstat/1
672  root      4728K   696K   sleep    49    0     0:00:00    0,0%    bash/1
652  root      24M     3784K  sleep    49    0     0:00:01    0,0%    sdtimage/1
654  root      79M     10M    sleep    19    10    0:00:08    0,0%    java/15
195  root      5660K   0K     sleep    59    0     0:00:00    0,0%    syslogd/13
175  root      2160K   0K     sleep    59    0     0:00:00    0,0%    lockd/2
170  root      3028K   0K     sleep    59    0     0:00:00    0,0%    in.named/1
237  root      1348K   0K     sleep    59    0     0:00:00    0,0%    powerd/2
183  root      6108K   644K   sleep    59    0     0:00:00    0,0%    automountd/3
322  root      4360K   0K     sleep    59    0     0:00:00    0,0%    snmpdx/1
347  root      8632K   0K     sleep    59    0     0:00:00    0,0%    dtlogin/1
158  root      2412K   0K     sleep    59    0     0:00:00    0,0%    inetd/1

PROJID    NPROC    SIZE    RSS    MEMORY    TIME       CPU     PROJECT
1         30       480M    99M    84%       0:04:00    2,3%    user.root
0         38       135M    5788K  4,8%      0:00:00    0,0%    system

Total: 68 processes, 185 lwps, load averages: 0,04, 0,14, 0,14
Пример 11.1. Результаты работы программы pgrep

Эта программа выполняется как интерактивная на полном экране (подобно top ).

Управление оперативной памятью с помощью rcapd

В системе Solaris, начиная с версии 9 выпуска 12/03, появился демон укупорки ресурсов (Resource Capping Daemon), который управляет тем, как процессы используют оперативную память. Управление выполняется на попроектной основе, т.е. ресурсы ограничиваются для конкретных проектов.

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

Лекция 1: 1234 || Лекция 2 >