Điểm:9

Làm cách nào để giới hạn mức sử dụng CPU và RAM cho một quy trình?

lá cờ in

Tôi đang sử dụng VPS Ubuntu có SFTP và bảng điều khiển. Tôi cần một quy trình cụ thể để chỉ sử dụng 60% CPU và 2048 MB RAM.

Tôi cũng cần một quy trình khác chỉ sử dụng 30% CPU và 1024 MB RAM.

Làm cách nào để giới hạn mức sử dụng CPU và RAM của một quy trình?

muru avatar
lá cờ us
Điều này có trả lời câu hỏi của bạn không? [Làm cách nào để hạn chế mức sử dụng tài nguyên cho một quy trình nhất định?](https://askubuntu.com/questions/1045076/how-to-limit-resource-usage-for-a-given-process)
Điểm:13
lá cờ in

Được cảnh báo: Ở đây có rồng.

Khi bạn bắt đầu đi vào con đường kiểm soát cụ thể tài nguyên của ứng dụng/quy trình/luồng ở mức độ này, bạn bắt đầu mở hộp Pandora theo nghĩa đen về các sự cố khi đến lúc gỡ lỗi sự cố mà giới hạn tốc độ của bạn không tính đến.

Điều đó nói rằng, nếu bạn tin rằng bạn biết mình đang làm gì, thì có ba tùy chọn dành cho bạn: đẹp, cpulimit, và các nhóm kiểm soát (Cgroups).

Đây là TL; DR cho ba phương pháp này:

Tốt đẹp ⢠tốt đẹp {quy trình}

Đây là một cách rất đơn giản để ưu tiên một tác vụ và khá hiệu quả đối với các mục đích sử dụng "một lần", chẳng hạn như giảm mức độ ưu tiên của một tác vụ chạy dài, tốn nhiều điện toán nên sử dụng nhiều CPU hơn khi máy không được sử dụng bởi các nhiệm vụ (hoặc con người) khác.

Giới hạn CPU ⢠cpulimit -l 60 {tiến trình}

Nếu hiệu suất máy chủ của bạn bị ảnh hưởng (còn gọi là ngừng hoạt động) khi mức sử dụng CPU vượt quá một mức nhất định, thì cpulimit có thể giúp giảm áp lực lên hệ thống.Nó thực hiện điều này bằng cách tạm dừng quá trình ở các khoảng thời gian khác nhau để giữ nó dưới một mức trần xác định bằng cách gửi ĐĂNG KÝKÝ HIỆU tín hiệu cho quá trình. cpulimit không thay đổi đẹp giá trị của quy trình, thay vào đó, nó theo dõi và kiểm soát việc sử dụng CPU trong thế giới thực.

bạn sẽ thấy rằng cpulimit hữu ích khi bạn muốn đảm bảo rằng một quy trình không sử dụng nhiều hơn một phần nhất định của CPU, điều mà câu hỏi của bạn ám chỉ, nhưng một nhược điểm là quy trình không thể sử dụng tất cả thời gian CPU có sẵn khi hệ thống không hoạt động ( cái mà đẹp cho phép).

CNhóm

Sudo cgcreate -g cpu:/bị hạn chế
Sudo cgset -r cpu.shares=768 bị hạn chế
Sudo cgexec -g cpu: bị hạn chế {tiến trình}

Nhóm â nhóm điều khiển â là một tính năng được tích hợp trong nhân Linux cho phép bạn kiểm soát cách phân bổ tài nguyên. Với Cgroups, bạn có thể chỉ định bao nhiêu CPU, bộ nhớ, băng thông, hoặc sự kết hợp của các tài nguyên này có thể được sử dụng bởi các quy trình được gán cho một nhóm.

Một lợi thế chính của Cgroups so với đẹp hoặc cpulimit là các giới hạn được áp dụng cho một tập hợp các quy trình; Không chỉ là một. đẹpcpulimit cũng bị giới hạn trong việc hạn chế việc sử dụng CPU của một quy trình, trong khi các nhóm có thể giới hạn các tài nguyên quy trình khác.

Nếu bạn đi sâu vào lỗ hổng của Cgroups thì bạn có thể siêu tối ưu hóa hệ thống cho một nhóm tác vụ cụ thể.

lá cờ mx
và về giới hạn sử dụng RAM; bạn có thể đưa ra ví dụ để làm điều đó thông qua CGroups không?
Điểm:10
lá cờ cn

Lưu ý: nếu bạn không muốn đặt cho quy trình một giới hạn cứng, mà chỉ ưu tiên, hãy tra cứu đẹp chỉ huy. Câu trả lời này sẽ cho rằng bạn muốn có một giới hạn cứng.

Hạn chế sử dụng CPU

Câu trả lời tuyệt vời này cho một câu hỏi khác giải thích nó khá tốt

Cài đặt cpulimit

sudo apt-get cài đặt cpulimit

Nó cung cấp các phương pháp khác nhau để hạn chế việc sử dụng CPU của một tiến trình foo phải nói là 20%

  • Theo tên quy trình của nó: Sudo cpulimit -e foo -l 20.

  • Theo tên đường dẫn tuyệt đối của nó: Sudo cpulimit -P /usr/bin/foo -l 20

  • Bằng PID của nó:

  1. Tìm PID của quá trình: pidof foo. (giả sử, nó xuất ra năm 1881)
  2. Sudo cpulimit -p 1881 -l 20

Hạn chế sử dụng bộ nhớ

Để có thêm tùy chọn, hãy xem bài này về cách hạn chế sử dụng RAM.

Ví dụ: để giới hạn quá trình 12345 đến 2048 MB sử dụng RAM, bạn có thể sử dụng giới hạn tối đa chỉ huy

$ prlimit --pid 12345 --as=2048000000
lá cờ mx
Xin lưu ý rằng `giới hạn không gian địa chỉ` **không giống** với `giới hạn mức sử dụng RAM`. Gọi nó là `giới hạn bộ nhớ ảo (RAM+swap)` chỉ tốt hơn một chút, nhưng vẫn không chính xác.Ví dụ, người ta có thể dễ dàng có chương trình yêu cầu 3GB hoặc không gian địa chỉ, trong khi chỉ sử dụng 100MB RAM và 0 MB trao đổi (xem `mmap(2)` & bạn bè, các mảng thưa thớt, v.v.).
cocomac avatar
lá cờ cn
@MatijaNalis Nếu bạn biết cách nào tốt hơn, hãy đăng câu trả lời. Hoặc, chỉnh sửa một trong những câu trả lời hiện có.
Peter Cordes avatar
lá cờ fr
@MatijaNalis: Có ulimit truyền thống `-m ` (bằng KiB) có hoạt động không? Theo `ulimit --help`, nó được cho là giới hạn kích thước tập hợp thường trú. (Có một bộ nhớ ảo `-v` ulimit riêng biệt (trong KiB)). Đối với thời gian CPU cũng có `ulimit -t truyền thống ` cài đặt, mà tôi cho rằng kernel chỉ giết một tiến trình vượt quá nó.
lá cờ mx
@PeterCordes thật không may, tôi không nghĩ như vậy (mặc dù ResidentSetSize chính xác là những gì @ newalvaro9 muốn giới hạn) - dù sao thì không phải trong bất kỳ hạt nhân không cổ xưa nào. `strace bash` tiết lộ rằng `ulimit -m` gọi `prlimit64(0, RLIMIT_RSS, ...` và trang man `prlimit64(2)` nói (trong số những thứ khác) rằng giới hạn `RLIMIT_RSS [....] có hiệu lực chỉ có trong Linux 2.4.x, x
Peter Cordes avatar
lá cờ fr
@MatijaNalis: Điều đó có ý nghĩa. Với bộ nhớ quá mức được bật theo mặc định, thật khó để làm cho nó hữu ích. Việc phân bổ các trang vật lý xảy ra quá muộn để mmap/malloc trả về NULL, vì vậy các tùy chọn duy nhất sẽ là hoán đổi các trang khác để nhường chỗ (tạo ra sự cố trao đổi khi một quá trình hết RSS) hoặc tắt nó, cả hai đều không được mong muốn . Và có lẽ việc tính toán sẽ ảnh hưởng đến hiệu suất trên một hệ thống đa lõi cho các quy trình đa luồng. Nhưng cũng có nghĩa là tùy chọn trình bao `ulimit -m` không thể biến mất, các trường API / ABI cũng vậy.
Peter Cordes avatar
lá cờ fr
Tuy nhiên, có thể hợp lý khi bản dựng Linux của `bash` in `(không có hiệu lực trong Linux sau 2.4.30)` như một phần của đầu ra trợ giúp, vì vậy những người khác không lãng phí thời gian của họ vào nó, nếu về cơ bản là không cơ hội rằng một phiên bản Linux trong tương lai sẽ làm cho nó hoạt động trở lại.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.