Giả sử tôi đang chạy một dịch vụ đa xử lý bên trong bộ chứa docker sinh ra nhiều quy trình, liệu docker sẽ sử dụng tất cả / nhiều lõi / CPU của máy chủ hay chỉ một?
Giả sử tôi đang chạy một dịch vụ đa xử lý bên trong bộ chứa docker sinh ra nhiều quy trình, liệu docker sẽ sử dụng tất cả / nhiều lõi / CPU của máy chủ hay chỉ một?
Câu trả lời:
Như Charles đã đề cập, theo mặc định, tất cả đều có thể được sử dụng hoặc bạn có thể giới hạn nó cho mỗi vùng chứa bằng cách sử dụng --cpuset-cpus
tham số.
docker run --cpuset-cpus="0-2" myapp:latest
Điều đó sẽ giới hạn vùng chứa ở 3 CPU (0, 1 và 2). Xem tài liệu do docker chạy để biết thêm chi tiết.
Cách ưa thích để hạn chế việc sử dụng CPU của các thùng chứa là giới hạn phân số đối với CPU:
docker run --cpus 2.5 myapp:latest
Điều đó sẽ giới hạn vùng chứa của bạn ở 2,5 lõi trên máy chủ.
Cuối cùng, nếu bạn chạy docker bên trong một máy ảo, bao gồm Docker cho Mac, Docker cho Windows và docker-machine, các máy ảo đó sẽ có giới hạn CPU tách biệt với chính máy tính xách tay của bạn. Docker chạy bên trong máy ảo đó và sẽ sử dụng tất cả các tài nguyên được cấp cho chính máy ảo đó. Ví dụ: với Docker cho Mac, bạn có menu sau:
Có thể máy chủ lưu trữ của bạn chỉ có một lõi theo mặc định. Do đó, bạn nên tăng số lượng cpu VM của mình trước và sau đó sử dụng tùy chọn --cpuset-cpus để tăng số lõi docker của bạn. Bạn có thể xóa máy ảo mặc định của docker bằng lệnh sau, sau đó bạn có thể tạo một máy ảo khác với số lượng cpu và kích thước bộ nhớ tùy chọn .:
docker-machine rm default
docker-machine create -d virtualbox --virtualbox-cpu-count=8 --virtualbox-memory=4096 --virtualbox-disk-size=50000 default
Sau bước này, bạn có thể chỉ định số lõi trước khi chạy hình ảnh của mình. lệnh này sẽ sử dụng 4 lõi trong tổng số 8 lõi.
docker run -it --cpuset-cpus="0-3" your_image_name
Sau đó, bạn có thể kiểm tra số lượng lõi có sẵn trong hình ảnh của mình bằng lệnh này:
nproc
--cpuset-cpus
bạn có muốn thay đổi điều đó không.