Thứ tư, 10/06/2015 | 00:00 GMT+7

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/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 - mountgroup . 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:

/etc/cgconfig.conf
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:

/etc/cgrules.conf
*: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ạn limitmem 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ả cgconfigcgred 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:


Tags:

Các tin liên quan

Cách phân tích chỉ số hệ thống với InfluxDB trên CentOS 7
2015-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