熟悉Solaris 10 項目和任務管理
原創【51CTO原創】
一、項目(Projects)和任務(Tasks)簡介
為了優化系統服務,有時需要對運行的系統進行工作量分析。無論是單獨對從進程方面還是從用戶方面來說,獲得這些信息是困難的。在Solaris中,有兩種工具來分析工作量:項目和任務。項目對有關工作提供網絡背景方面的管理。任務提供程序組方面的管理。基于項目和任務管理機制,運行的程序可以被標準的Solaris命令所管理。項目用于組織和管理物理系統資源集合。在實現全面服務器整合計劃時,項目很有用。項目提供下列功能:
為應用程序設置最小CPU資源和內存容量,從而平衡系統資源。
每個應用程序均可獲得為其項目設置的最小CPU資源和內存容量(可選)。例如:基于應用程序的項目允許你為網絡上運行的所有應用程序建立最小CPU資源和內存容量。當同一臺主機上有多個項目處于活動狀態時,由于每個應用程序均位于其各自的項目內,從而減少了系統資源的爭用現象。在這種情況下,為每個項目設置的資源限制是由該主機上的Solaris內核實施的。
跟蹤數據中心內的資源使用情況。
跟蹤項目當前使用的資源總量,還會跟蹤項目成員使用的資源量。盡管多個用戶和組可能同屬于一個或多個項目,但必須為每個Solaris用戶指定一個默認項目。Solaris用戶啟動的進程可以綁定到該用戶所屬的任何項目。項目通過使用項目成員和資源池來跟蹤與控制應用程序的資源消耗。
二、項目和容器的關系
項目就是與主機相關聯的容器。與主機關聯后,項目將處于活動狀態,并且也設置了屬于它自己的資源。容器可以作為多個項目模板。反過來,每個項目都具有與其關聯的容器。該關聯容器將這些項目的共同屬性存儲在一個中心位置,當創建新項目時,可以參照這些共同屬性創建。
三、項目、任務和進程的關系
每次成功登錄到項目中都會創建一個新的包含登錄進程的任務。任務是工作中的進程的集體表現。每個任務都被自動授予一個任務ID。每個進程都是一個任務的成員,每個任務都與一個項目相關聯。此之者的關系如圖-1 所示。
圖-1項目、任務和進程的關系
所有對進程組的操作,比如信號的發送,任務都是支持的。你可以將任務綁定到processor set或者調度優先權和類。
用下面的方法來創建最終的任務:
使用nwetask和-F選項的命令創建。
所有被項目創建的任務,在使用setproject命令后,就會具有task_final標識。具有這個標識說明任務已經被創建
在項目數據庫中設置task.final屬性。
四、Solaris 10 項目相關參數
項目標志符是用來鑒別有關任務的管理標志符。具有工作量標志的項目也可以成為用戶和組的標識。一個用戶或組可以屬于一個或多個項目,這些項目可以表現屬于它的用戶或組的工作量。盡管用戶必須屬于默認的項目,但用戶發布的程序可以關聯任何用戶所屬于的項目。
1.用戶默認項目(Projects)介紹
當登錄系統的時候,用戶必須被分配一個項目,用戶自動成為這個項目組的成員。
如果用戶項目的屬性是在/etc/user_attr擴展用戶屬性數據庫定義的,那么定義的值就是項目的默認屬性。
如果在項目數據庫中,某個項目下有user.user-id,那么這個用戶就是所屬項目成員。
如果在項目數據庫中,某個項目下有group.group-name,那么這個用戶組就是所屬項目成員。
如果在項目數據庫中,某個項目下有default標志,那么這個項目就是默認項目。
2.用useradd, usermod和passmgmt設置用戶屬性
可以用下列命令及-k選項在一些本地文件中來設置用戶的屬性:
passmgmt:修改用戶信息。
useradd:給用戶設置默認的項目。
usermod:修改用戶信息。
這些被修改的本地文件是:
/etc/group
/etc/passwd
/etc/project
/etc/shadow
/etc/user_attr
3.項目數據庫介紹
你可以存儲項目數據到上面介紹的本地文件、NIS服務或LDAP服務中,訪問時都需要權限模塊(PAM)的認證。
4.名稱服務的設置
項目數據庫的管理支持名稱服務。名稱服務是在/etc/nsswitch.conf中定義的。在默認情況下,文件列表是首先被查詢的。當然也可以有其他查詢次序。下面是默認次序:
project: files [nis] [ldap]
5.本地文件/etc/project文件的格式
圖 -2 是默認的/etc/project文件的內容

圖 -2 默認的/etc/project文件的內容
這個/etc/project文件包含一行下列形式的項目信息:
projname:projid:comment:user-list:group-list:attributes
這個信息定義如下:
projname:項目名稱。
projid:在系統中項目惟一的號碼。
comment:項目的描述。
user-list:用逗號分隔的屬于這個項目的用戶列表。
group-list:用逗號分隔的屬于這個項目的用戶組列表。
attributes:用分號分隔的name-value對,name是屬性名,value是屬性的值。具體見16.3.3節。
#p#
五、Solaris 10 項目相關命令列表
項目和任務的一些命令如表-1所示。
表-1 項目和任務的一些命令
命 令 |
描 述 |
projects |
顯示項目成員;從項目數據庫列出項目;打印給出項目的信息;如果沒給出項目名,就列出所有項目信息;使用-l選項打印詳細信息 |
newtask |
運行Shell或專門的命令來完成新的任務;也可以被用來改變被任務或項目綁定的進程。使用-F選項可以創建最終的任務 |
useradd |
增加默認的項目定義到本地文件 |
userdel |
從本地文件中刪除用戶賬號 |
usermod |
修改用戶登錄系統的信息 |
prstat |
使用-J選項,顯示當前系統項目和程序的各種統計信息; 使用-T選項,顯示當前系統任務和程序的各種統計信息 |
id |
使用-p選項,顯示當前項目ID、用戶和組的ID |
pgrep |
使用-J選項,列出當前用戶項目ID 使用-T選項,列出當前用戶任務ID |
pkill |
使用-J選項,終結當前ID項目 使用-T選項,終結當前ID任務 |
projmod |
修改本地項目信息。也可以通過編輯/ect/project文件來達到修改項目信息的目的 |
projdel |
刪除本地項目信息。也可以通過編輯/ect/project文件來達到刪除項目信息的目的 |
六、Solaris 10 項目相關命令實例
1 顯示當前用戶、用戶組ID、任務ID
使用id –p 命令選項即可顯示當前用戶、用戶組ID:
# id -p
uid=0(root) gid=0(root) projid=1(user.root)
2增加一個名為books項目,項目ID為1443,并授權項目給cjh用戶。
# projadd -U cjh -p 4113 books
為這個books項目增加一些注釋:
# projmod -c ‘Books Project’ booksite
檢查項目內容:
# projects –l如圖 -3 。
圖-3檢查項目內容
從圖-3 可以看到Books Project注釋已經添加。
3刪除/etc/project中的項目
# projdel books
同樣,查看項目輸出,發現books項目已經不存在了。
# projects –l
查看cjh用戶的項目,已經變成默認:
# su – cjh
# projects
default
4創建新的任務
首先,以目標項目(books)的成員身份登錄,在booksite項目中創建新的任務:
machine% newtask -v -p books
16
上面創建的任務ID為16,并默認放置用戶自己的Shell到這個任務中。
5.如何將活動進程移動到新的任務中
(1)使用pgrep命令,查看book_catalog的進程ID:
# pgrep book_catalog
8100
(2)關聯這個進程到所屬項目名為booksite的新任務中:
#newtask -v -p booksite -c 8100
17
(3)列出新任務中的進程ID:
# pgrep -T 17
8100
現在,book_catalog進程屬于項目booksite的ID號為17的新任務。
總結:本文介紹了項目和任務的關系,以及在Solaris 10中,如何使用項目和任務來管理、分配資源。
【編輯推薦】