Cách hạn chế tài nguyên bằng cách sử dụng nhóm trên CentOS 6
Group điều khiển, hoặc group , là một tính năng kernel được giới thiệu trong CentOS 6 để cung cấp một cách mới để hạn chế quyền truy cập vào tài nguyên hệ thống cho các quy trình. Bạn có thể tạo các group của riêng mình, giám sát các group mà bạn cấu hình , từ chối quyền truy cập của các group vào một số tài nguyên nhất định và thậm chí cấu hình lại động các group của bạn trên một hệ thống đang chạy.Trong hướng dẫn này, ta sẽ thấy cách giới hạn CPU, bộ nhớ và ổ đĩa i / o cho các tiến trình. Để làm điều này, trước tiên ta sẽ tạo một số group kiểm soát, thêm các quy trình vào chúng và xem chúng hoạt động như thế nào.
Yêu cầu
Trước khi bắt đầu với hướng dẫn này, bạn nên có một user không phải root có cài đặt sudo trên CentOS 6 Server. Để cài đặt user kiểu này, hãy làm theo hướng dẫn Cài đặt server ban đầu với CentOS 6 của ta . Tất cả các lệnh sẽ được chạy với quyền user này.
Bước 1 - Cài đặt
Trong phần này, ta sẽ cài đặt các gói cần thiết để các group hoạt động.
Các group điều khiển và hệ thống con mà chúng liên quan có thể được thao tác bằng cách sử dụng các lệnh và tiện ích shell. Tuy nhiên, cách dễ nhất để làm việc với cgroups là cài đặt gói libcgroup
. Gói libcgroup
cung cấp các tiện ích dòng lệnh liên quan đến cgroups, file cấu hình và trang user . Gói này không được cài đặt theo mặc định trên server CentOS 6. Để cài đặt nó, hãy chạy lệnh sau:
- sudo yum install libcgroup
Bước 2 - Bắt đầu dịch vụ
Dịch vụ cgconfig
(cấu hình group điều khiển) được sử dụng để tạo group và quản lý hệ thống con. Nó có thể được cấu hình để khởi động tại thời điểm khởi động và cài đặt lại các group được định nghĩa của bạn, do đó làm cho chúng liên tục qua các lần khởi động lại. Dịch vụ cgconfig
không được khởi động theo mặc định trên CentOS 6, vì vậy hãy để ta khởi động nó:
- sudo service cgconfig start
Khởi động dịch vụ cgconfig
sẽ tạo một hệ thống file ảo được gắn tại /cgroup
với tất cả các hệ thống con. Hãy để ta xác minh điều này:
- sudo ls /cgroup
Lệnh này sẽ hiển thị các hệ thống con sau:
blkio cpu cpuacct cpuset devices freezer memory net_cls
Bạn cũng có thể chạy lệnh `` lscgroup '' để xác minh:
- sudo lscgroup
Bạn sẽ thấy các hệ thống con trong một bố cục hơi khác:
cpuset:/ cpu:/ cpuacct:/ memory:/ devices:/ freezer:/ net_cls:/ blkio:/
Tài nguyên hệ thống
Tài nguyên hệ thống được gọi là hệ thống con và mỗi hệ thống con có một số tham số mà ta có thể gán giá trị. CentOS 6 cung cấp mười hệ thống con cgroup:
- blkio - hệ thống con này đặt giới hạn truy cập đầu vào / kết quả đến và đi từ các thiết bị khối như ổ đĩa vật lý (đĩa, trạng thái rắn, USB, v.v.).
- cpu - hệ thống con này đặt giới hạn về thời gian có sẵn của CPU
- cpuacct - hệ thống con này tạo báo cáo tự động về tài nguyên CPU được sử dụng bởi các việc trong group cgroup
- cpuset - hệ thống con này chỉ định các CPU riêng lẻ (trên hệ thống đa lõi) và các node bộ nhớ cho các việc trong một group cgroup
- thiết bị - hệ thống con này cho phép hoặc từ chối quyền truy cập vào thiết bị của các việc trong một group cgroup
- tủ đông - hệ thống con này tạm dừng hoặc tiếp tục các nhiệm vụ trong một group
- bộ nhớ - hệ thống con này đặt giới hạn về việc sử dụng bộ nhớ của các việc trong một group c và tạo báo cáo tự động về tài nguyên bộ nhớ được sử dụng bởi các việc đó
- net_cls - hệ thống con này gắn thẻ các gói mạng với mã định danh lớp (classid) cho phép bộ điều khiển lưu lượng Linux (tc) xác định các gói có nguồn root từ một tác vụ cgroup cụ thể
- net_prio - hệ thống con này cung cấp một cách để đặt động mức độ ưu tiên của lưu lượng mạng trên mỗi network interface
- ns - đây là hệ thống con không gian tên
Bước 3 - Cấu hình
Trong phần này, ta sẽ tạo các group ví dụ và đặt một số giới hạn tài nguyên cho các group đó. Tệp cấu hình /etc/cgconfig.conf
là /etc/cgconfig.conf
. Tùy thuộc vào nội dung của file cấu hình, cgconfig có thể tạo phân cấp, mount các hệ thống file cần thiết, tạo group và đặt các thông số hệ thống con (giới hạn tài nguyên) cho mỗi group .
Hệ thống phân cấp là một tập hợp các group được sắp xếp trong một cây, sao cho mọi tác vụ trong hệ thống nằm trong chính xác một trong các group trong hệ thống phân cấp. Trong cấu hình CentOS 6 mặc định, mỗi hệ thống con được đưa vào hệ thống phân cấp riêng của nó.
Đầu tiên ta hãy tạo một vài group có tên là limitcpu, limitmem, limitio và browser. Tệp /etc/cgconfig.conf
chứa hai loại mục nhập chính - mount
và group
. Các dòng bắt đầu bằng group
tạo ra các group
và cài đặt các thông số hệ thống con. Chỉnh sửa file /etc/cgconfig.conf
và thêm các mục nhập cgroup sau vào cuối:
group limitcpu{ cpu { cpu.shares = 400; } } group limitmem{ memory { memory.limit_in_bytes = 512m; } } group limitio{ blkio { blkio.throttle.read_bps_device = "252:0 2097152"; } } group browsers{ cpu { cpu.shares = 200; } memory { memory.limit_in_bytes = 128m; } }
- Trong
limitcpu
limitcpu, ta đang giới hạn chia sẻ cpu có sẵn cho các quy trình trong cgroup này ở mức 400.cpu.shares
chỉ định tỷ lệ tương đối của thời gian CPU có sẵn cho các việc trong cgroup. - Trong
limitmem
giới hạn, ta đang giới hạn bộ nhớ có sẵn cho các quy trình cgroup ở mức 512MB. - Trong
limitio
limitio, ta đang giới hạn thông lượng đọc đĩa ở mức 2MiB / s. Ở đây, ta đang giới hạn I / O đọc cho đĩa chính, / dev / vda, với số chính: thứ 252: 0 và 2MiB / s được chuyển đổi thành byte mỗi giây (2x1024x1024 = 2097152). - Trong cgroup
browsers
, ta đang giới hạn chia sẻ cpu xuống 200 và bộ nhớ khả dụng là 128MB.
Ta cần khởi động lại dịch vụ cgconfig
để các thay đổi trong file /etc/cgconfig.conf
có hiệu lực:
- sudo service cgconfig restart
Hãy để ta kích hoạt cgconfig
để bắt đầu khởi động hệ thống. Khi bạn kích hoạt dịch vụ với chkconfig, nó sẽ đọc file cấu hình /etc/cgconfig.conf
tại thời điểm khởi động. cgroups được tạo lại từ phiên này sang phiên khác và vẫn tồn tại.
- sudo chkconfig cgconfig on
Tiếp theo, xác minh các group mà ta đã cấu hình đang hiển thị chính xác:
- lscgroup
Nếu mọi thứ diễn ra tốt đẹp, bạn sẽ thấy:
cpuset:/ cpu:/ cpu:/browsers cpu:/limitcpu cpuacct:/ memory:/ memory:/browsers memory:/limitmem devices:/ freezer:/ net_cls:/ blkio:/ blkio:/limitio
Mục tiêu tiếp theo của ta là thêm các quy trình (nhiệm vụ) mà ta muốn giới hạn tài nguyên cho các group mà ta đã tạo trước đó.
Cgred
(daemon luật group điều khiển) là một dịch vụ di chuyển các việc vào các group theo các tham số được cài đặt trong file /etc/cgrules.conf
. Các mục nhập trong file /etc/cgrules.conf
có thể có một trong hai dạng:
user subsystems control_group
hoặc là
user:command subsystems control_group
user
đề cập đến tên user hoặc tên group có tiền tố là ký tự “@”. subsystems
tham chiếu đến danh sách tên hệ thống con được phân tách bằng dấu phẩy. control_group
đại diện cho một đường dẫn đến cgroup và command
là viết tắt của tên tiến trình hoặc đường dẫn lệnh đầy đủ của một tiến trình. Các mục nhập trong file /etc/cgrules.conf
có thể bao gồm các ký hiệu bổ sung sau:
-
@
- chỉ ra một group thay vì một user cá nhân. Ví dụ:@admin
cho biết tất cả user trong group administrator . -
*
- đại diện cho "tất cả". Ví dụ:*
trong trường user đại diện cho tất cả user . -
%
- đại diện cho một mục giống như mục trong dòng trên.
Bây giờ ta hãy thêm các chương trình / quy trình mà ta muốn giới hạn. Chỉnh sửa /etc/cgrules.conf
và thêm phần sau ở dưới cùng:
*:firefox cpu,memory browsers/ *:hdparm blkio limitio/ sammy blkio limitio/ @admin:memhog memory limitmem/ *:cpuhog cpu limitcpu/
Trong các dòng trên, ta đang cài đặt các luật sau:
- Các quy trình firefox do mọi user chạy sẽ được tự động thêm vào cgroup
browsers
và bị giới hạn trong hệ thống con cpu và bộ nhớ. - quá trình hdparm chạy bởi bất kỳ user sẽ được bổ sung vào
limitio
cgroup và sẽ được giới hạn trong hệ thống phụ blkio theo các giá trị tham số quy định tại cgroup đó. - Tất cả quá trình chạy của thành viên Sammy sẽ được bổ sung vào
limitio
cgroup và hạn chế trong hệ thống phụ blkio. - các quy trình memhog do bất kỳ ai trong group
admin
hành sẽ được thêm vào giới hạnlimitmem
và bị giới hạn trong hệ thống con bộ nhớ. - các quy trình cpuhog do mọi user chạy sẽ được thêm vào limitcpu
limitcpu
và bị giới hạn trong hệ thống con cpu.
Ta cần khởi động dịch vụ cgred
để các thay đổi cấu hình cgrules có hiệu lực, hãy thực hiện việc này bằng lệnh:
- sudo service cgred start
Ta cũng cần đảm bảo dịch vụ cgred
được bật để bắt đầu khi server khởi động hệ thống để các luật của ta vẫn tồn tại khi khởi động lại:
- sudo chkconfig cgred on
Lưu ý: Đối với các dịch vụ hỗ trợ sysconfig, bạn có thể thêm biến CGROUP_DAEMON="subsystem:control_group"
trong /etc/sysconfig/servicename
thay vì chỉnh sửa file cgrules.conf
. Ví dụ: đối với một dịch vụ như httpd, bạn có thể thêm CGROUP_DAEMON="blkio:/limitio"
đến file /etc/sysconfig/httpd.conf
để thêm các quá trình httpd đến limitio
cgroup.
Bước 4 - Kiểm tra
Trong bước này, ta sẽ xác minh giới hạn thông lượng đọc của đĩa là 2MiB / s được thực thi chính xác theo luật mà ta đã thêm trong cgrules.conf
. Để làm điều này, ta sẽ cài đặt và chạy công cụ hdparm
. Công cụ hdparm
có thể cài đặt và xem các thông số phần cứng của ổ đĩa cứng, đo tốc độ đọc và ghi, v.v. Hãy để ta cài đặt hdparm bằng cách sử dụng:
- sudo yum install hdparm
Bây giờ, ta hãy chạy một lệnh để đo tốc độ đọc của đĩa cứng / dev / vda của bạn:
- sudo hdparm --direct -t /dev/vda
Bạn sẽ thấy kết quả sau:
/dev/vda: Timing O_DIRECT disk reads: 6 MB in 3.00 seconds = 2.00 MB/sec
Đầu ra hiển thị thông lượng đọc đĩa là 2MB / s. Nếu bạn dừng cả cgconfig
và cgred
dịch vụ và chạy hdparm
lệnh trên , bạn sẽ nhìn thấy / default ban đầu tốc độ đọc từ khi luật cgroup không được thực hiện.
Kết luận
Hướng dẫn này chỉ giới thiệu một số điều cơ bản bạn có thể làm với cgroups. Cũng có thể tạo các group con, đếm và báo cáo lượng tài nguyên được tiêu thụ bởi một group , tạm dừng một group các quy trình bằng cách sử dụng hệ thống con của tủ đông và hơn thế nữa.
Kiểm tra các tài nguyên sau để biết thêm chi tiết:
- Một số trường hợp sử dụng nâng cao cho group
- Danh sách tất cả các tham số hệ thống con và định nghĩa của chúng
- Thông tin thêm về phân cấp cgroup
- Thậm chí nhiều thông tin hơn về phân cấp cgroup
Các tin liên quan
Cách phân tích chỉ số hệ thống với InfluxDB trên CentOS 72015-06-04
Cách quản lý / vv với Kiểm soát phiên bản bằng Etckeeper trên CentOS 7
2015-04-20
Cách cài đặt WordPress với OpenLiteSpeed trên CentOS 7
2015-04-16
Cách backup server CentOS 7 bằng Bacula
2015-04-13
Cách sử dụng MariaDB với Ứng dụng Django của bạn trên CentOS 7
2015-03-25
Cách thiết lập LEPP hai node trên CentOS 7
2015-03-19
Cách cài đặt Ruby on Rails với rbenv trên CentOS 7
2015-03-16
Cách cài đặt MediaWiki trên CentOS 7
2015-03-12
Cách cài đặt Elasticsearch, Logstash và Kibana (ELK Stack) trên CentOS 7
2015-03-10
Cách cài đặt Elasticsearch, Logstash và Kibana (ELK Stack) trên CentOS 7
2015-03-10