Làm thế nào để hạn chế sử dụng tài nguyên cho một quy trình nhất định?


10

Tôi có một quy trình cho một ứng dụng cần chạy, nhưng cuối cùng lại sử dụng quá nhiều việc sử dụng IO cho những gì nó làm. Và thực sự làm hỏng máy tính của tôi, khiến nó không thể làm gì khác trong khi nó đang chạy.

Vì vậy, tôi đã tự hỏi nếu có một cách để hạn chế sử dụng IO, RAM và CPU cho một quy trình nhất định? Và tất nhiên các quy trình phụ của nó.

Đây là trên hệ thống Ubuntu 18.04 LTS của tôi.


2
@GreatUncleBulgaria Không thực sự, trừ khi bạn muốn chia tay với điểm danh tiếng. Câu trả lời đơn giản cho những gì bạn yêu cầu là chỉ kết hợp những gì người khác đề xuất - ionice, renice- và có lẽ ulimit -sra lệnh, và đó là nó.
Sergiy Kolodyazhnyy

@GreatUncleBulgaria Không quen thuộc cgroups-ionên không có ý kiến ​​gì :)
Sergiy Kolodyazhnyy

Câu hỏi có khả năng liên quan: Askubfox.com/q/538992/295286 Các câu trả lời có đề cập đến các nhóm, nhưng không nhiều, vì vậy. . . có lẽ ?
Sergiy Kolodyazhnyy

1
@SergiyKolodyazhnyy: Có vẻ như ai đó đã dọn dẹp các bình luận!

Câu trả lời:


8

Bạn nên sử dụng kết hợp tất cả cgexec, cpulimitionice:

  1. Giới hạn RAM và SWAP:

    sudo cgcreate -g memory:/szMyGroup
    echo $(( 512 * 1024 * 1024 )) | sudo tee /sys/fs/cgroup/memory/szMyGroup/memory.limit_in_bytes
    echo $(( 1024 * 1024 * 1024 ))  | sudo tee /sys/fs/cgroup/memory/szMyGroup/memory.memsw.limit_in_bytes

    Các lệnh trên tạo một nhóm điều khiển có tên szMyGroup(Ví dụ: trong trường hợp của bạn group-great-uncle), đặt giới hạn cho các quy trình chạy dưới szMyGroup512 MB bộ nhớ vật lý và tối đa 1024 MB trao đổi và sau đó:

    sudo cgexec -g memory:szMyGroup szMyProgram

    sẽ chạy chương trình của bạn trong szMyGroupnhóm kiểm soát, do đó đảm bảo chúng tuân thủ các giới hạn

  2. giới hạn đĩa IO:

    sudo ionice --class 3 --pid $(pgrep -f szMyProgram)

    Lệnh trên sử dụng pgrepvới việc sử dụng lại các phần của dòng lệnh hiện tại để giới hạn quyền truy cập đĩa của nó chỉ sử dụng đĩa khi không có chương trình nào khác sử dụng nó

  3. Giới hạn CPU:

    sudo cpulimit --limit=25 --pid=!#:4

    CPU của chương trình hiện bị giới hạn ở mức tối đa 25%

Nếu chương trình không sử dụng nhiều CPU để bắt đầu, hãy hạ thấp giá trị của cpulimit xuống một nửa hoặc ít hơn những gì nó hiện đang sử dụng.

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.