Làm cách nào để giới hạn toàn bộ người dùng dưới 10% cpu, không chỉ xử lý?


10

Tôi đang chạy centos, cpanel / whm và tôi đã cài đặt cpulimit.

Vấn đề tôi gặp phải là một trong những người dùng của tôi đang sử dụng một lượng cực lớn sử dụng cpu. Hơn 100% nhất quán và nó làm chậm máy chủ của tôi.

Vấn đề nữa là họ là bạn bè và không độc hại nên tôi không muốn đình chỉ họ.

Ngoài ra, một vấn đề nữa là tôi không thể giới hạn nó theo quy trình, bởi vì quá trình này thay đổi mỗi giây. Đó là một quá trình khác nhau mỗi lần.

Tôi đã thử cách sau nhưng không được.

cpulimit -l 10 -e /home/[username]/public_html/theirwebsite.org/index.php

Tôi vừa được trả lại,

No process found
No process found
No process found
No process found
No process found
No process found

Vân vân

Có hai điều đang sử dụng cpu cực đoan đó.

Điều đầu tiên là tập tin ở vị trí đó , index.php. Khác là [php], bất cứ điều gì có nghĩa là trong WHM. Nhưng chủ yếu index.phplà vấn đề.

Nếu tôi có thể giới hạn index.phptệp đó ở vị trí đó, điều đó có thể giúp giảm thiểu vấn đề này.

Nhân tiện, tôi đã thử -Pcờ nhưng điều đó không có sẵn như là một tùy chọn không giống như tài liệu.

cpulimit -l 10 -P /home/[username]/public_html/theirwebsite.org/index.php

trả lại

cpulimit: invalid option -- 'P'
Usage: cpulimit [OPTIONS...] TARGET
   OPTIONS
      -l, --limit=N          percentage of cpu allowed from 0 to 1600 (required)
      -v, --verbose          show control statistics
      -z, --lazy             exit if there is no target process, or if it dies
      -i, --include-children limit also the children processes
      -h, --help             display this help and exit
   TARGET must be exactly one of these:
      -p, --pid=N            pid of the process (implies -z)
      -e, --exe=FILE         name of the executable program file or path name
      COMMAND [ARGS]         run this command and limit it (implies -z)

Vì vậy, có vẻ như tôi phải làm điều đó với -ecờ.

Tuy nhiên, lý tưởng nhất là tôi muốn giới hạn toàn bộ tài khoản người dùng.

Và vâng tôi biết về cloudlinux nhưng tôi không thể làm điều đó ngay bây giờ. Cho đến khi tôi có thể làm điều đó, tôi cần trợ giúp để thực hiện thủ công với một cái gì đó không yêu cầu khởi động lại máy chủ.

Câu trả lời:


1

Bạn đúng rằng bạn không thể giới hạn bạn bè của mình bằng cách sử dụng một quy trình (PID), Apache sinh ra một quy trình mới (Công nhân) cho mỗi yêu cầu mà nó nhận được, chỉ định một PID mới mỗi lần.

Tùy thuộc vào trình xử lý PHP nào bạn thiết lập WHM -> MultiPHP Manager -> PHP Handlers, Apache sẽ tự chạy các tập lệnh PHP hoặc chạy chúng với tư cách là người dùng sở hữu tệp. Nếu bạn sử dụng suPHPlàm trình xử lý, quy trình PHP sẽ được thực thi như tài khoản sở hữu tệp.

Nếu tập lệnh được chủ sở hữu thực thi, bạn có thể giới hạn việc sử dụng cpu vào tài khoản bằng cách thêm nó vào /etc/security/limits.conftệp. Mặc dù bạn không thể sử dụng điều này để giới hạn chính xác tỷ lệ phần trăm cpu, bạn có thể sửa đổi giá trị 'đẹp' của chúng để các quy trình của chúng có mức độ ưu tiên thấp hơn các quy trình khác trên máy chủ. Như vậy, các quy trình khác sẽ không phải đợi lâu.

Tôi chưa bao giờ sử dụng cái này cho mình (tôi chạy CloudLinux), nhưng tôi tin rằng mục sau đây sẽ giúp giải quyết vấn đề:

username    hard    priority    30

Điều này đặt mức ưu tiên tối đa cho các quy trình được người dùng thực hiện thành 30. Theo những gì tôi hiểu, mức độ ưu tiên cao hơn thực sự có nghĩa là các quy trình khác (có mức ưu tiên thấp hơn) có được nhiều thời gian CPU hơn.

Trên máy chủ của tôi đang chạy cPanel, hầu hết các quy trình có mức ưu tiên là 20, do đó, theo logic trên, việc đặt mức ưu tiên cho người dùng đó thành 30 sẽ cho phép các quy trình khác thực hiện trước các quy trình này.


7

Bạn đã thử Cgroups chưa?


  • Cài đặt dịch vụ sudo yum install libcgroupvà bắt đầu nó sudo service cgconfig start.
  • Sau đó xem cấu hình hệ thống con cho các nhóm bằng cách chạy sudo ls /cgroup

Tạo một nhóm có tên limitcpu. Các dòng bắt đầu với nhóm tạo các nhóm và đặt tham số hệ thống con.

Ví dụ /etc/cgconfig.conf:

group limitcpu{

        cpu {
                cpu.shares = 200;
                # cpu.cfs_period_us
                # cpu.cfs_quota_us
        }
        memory {

        }
}

Đối với giới hạn CPU, có một vài tham số có thể điều chỉnh mà bạn có thể sử dụng để hạn chế việc sử dụng CPU trắng trợn

Nếu các tác vụ trong một nhóm sẽ có thể truy cập một CPU trong 0,1 giây (10%) giây sau mỗi 1 giây, hãy đặt cpu.cfs_quota_us thành 100000 và cpu.cfs_apse_us thành 1000000.


Cgred là một dịch vụ (bắt đầu dịch vụ cgrulesengd) để di chuyển các tác vụ vào các nhóm theo các tham số được đặt trong tệp /etc/cgrules.conf. Các mục trong tệp /etc/cgrules.conf có thể có một trong hai dạng sau:

user subsystems control_group
user:command subsystems control_group

Trường hợp usercó tên người dùng hoặc tên nhóm có tiền tố "@". Thay thế subsystemsbằng một danh sách các tên hệ thống con được phân tách bằng dấu phẩy, control_groupbiểu thị một đường dẫn đến nhóm và commandviết tắt của một tên quy trình hoặc một đường dẫn lệnh đầy đủ của một quy trình.

Ví dụ vv / cgrules.conf:

*:firefox      cpu,memory      browsers/
@admin:memhog  memory          limitmem/
cpuhog         cpu             limitcpu/
  • firefoxcác quy trình được chạy bởi bất kỳ người dùng nào sẽ được tự động thêm vào trình duyệt cgroupvà giới hạn trong các hệ thống con cpu và bộ nhớ.

  • memhogcác quy trình được điều hành bởi bất kỳ ai trong adminnhóm sẽ được thêm vào nhóm limitmemvà giới hạn trong hệ thống con bộ nhớ.

    - Người dùng của bạn cpuhog, sẽ được thêm vào cgroup 'giới hạn' và giới hạn trong các hệ thống con cpu.


Trong các trường hợp sử dụng trước, bạn có thể thử sử dụng một mẫu thay thế.

Ví dụ: chỉ định mẫu sau trong /etc/cgconfig.conf:

template users/%g/%u {
                     cpuacct{
                     }
                     cpu {
                        cpu.shares = "1000";
                     }
          }

Sau đó, sử dụng mẫu người dùng /% g /% u trong hàng thứ ba của mục nhập /etc/cgrules.conf, có thể trông như sau:

peter:ftp       cpu     users/%g/%u

Các %g and %ubiến được sử dụng ở trên được tự động thay thế bằng tên nhóm và tên người dùng tùy thuộc vào chủ sở hữu của quy trình ftp.

Nếu quy trình thuộc về peter từ nhóm adminstaff, đường dẫn trên được dịch sang users/adminstaff/peter.

Dịch vụ cgred sau đó tìm kiếm thư mục này và nếu nó không tồn tại, cgred tạo nó và gán quy trình cho người dùng / adminstaff / peter / task.

Lưu ý rằng quy tắc mẫu chỉ áp dụng cho các định nghĩa của mẫu trong tệp cấu hình, do đó, ngay cả khi "nhóm người dùng / adminstaff / peter" được xác định trong /etc/cgconfig.conf, nó sẽ bị bỏ qua có lợi cho "người dùng mẫu /% g /% bạn "

Hướng dẫn của Digital Ocean.

Giới thiệu về Nhóm điều khiển.


0

Bạn có thể có thể thử thiết lập /etc/security/limits.conf ở đó bạn sẽ có thể điều chỉnh lượng thời gian cpu và bộ nhớ mà người dùng có thể tiêu thụ. Để biết chi tiết, hãy xem https://linux.die.net/man/5/limits.conf

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.